Instagram GRAPH APIの結果をfile_get_contentsで取得する際の400エラーの解決法

Instagram GRAPH APIを使うと、指定のハッシュタグ名に紐づくInstagramの投稿のデータを取得する事ができます。

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
この記事を書いた人
せみやま せみやま
生き物が大好きなWebエンジニアです。
身近な自然を楽しみながら暮らしています。
詳細なプロフィール

プログラミング

Posted by せみやま