Instagram GRAPH APIの結果をfile_get_contentsで取得する際の400エラーの解決法
file_get_contentsを使って、ハッシュタグ名やトークンを含むURLをコールして結果を取得していたところ、
failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
というエラーが出て、結果が取得できなくなりました。
エラー文から推定して、file_get_contentsのオプションのprotocol_versionでhttp1.1を指定したり、file_get_contentsではなくcurlに変えたりしてみたのですが、それらの方法では解決できませんでした。
色々調べている内に、REST APIでは全角文字をURLに含めるとエラーになる場合があるという記述を見つけ、そこを修正したところ、うまく動作させる事ができました。
コールするハッシュタグ名に、以下のように日本語(全角)が入っていると、400エラーで弾かれてしまうようです。
以下は「ブログ」というハッシュタグ名で検索する場合のURL例です。
https://graph.facebook.com/{hash id}/top_media?user_id={user_id}&q=ブログ&access_token={access_token}&fields=id,media_type,media_url,permalink,like_count,comments_count,caption,timestamp,children{id,media_url}&limit=50
全角になっているハッシュタグ名を、以下のサイトなどを使ってURLエンコードすると、file_get_contentsやcurlでInstagram GRAPH APIの実行結果が受け取れるようになりました。
「ブログ」という文字列をURLエンコードして、コールするURLに含めた例です↓
https://graph.facebook.com/{hash id}/top_media?user_id={user_id}&q=%E3%83%96%E3%83%AD%E3%82%B0&access_token={access_token}&fields=id,media_type,media_url,permalink,like_count,comments_count,caption,timestamp,children{id,media_url}&limit=50