Shintaro's Laboratory

SEの徒然日誌です。気ままに更新していきます。

インスタで複数枚まとめて投稿された写真を一発でダウンロードする手法(instagram graph api)

instagraminstagram graph apiというAPIが公開されており、ハッシュタグ検索等の検索や画像のダウンロードを自動化できる。

APIの利用にはインスタグラムアカウント(ビジネスアカウント)、フェイスブックアカウント(ページ作成も)、facebook developerへの登録等が必要です(詳細はいろんな方がまとめているので、ググってみてください)。

 

ユーザの投稿の画像の枚数が1枚のみの場合は特別な考慮をせずにmedia_url(画像を参照するための固有のURL)が取得できるため、画像のダウンロードが容易である。

 

しかし複数枚画像がまとめて投稿されている場合(instagram graph apiでは、CAROUSEL_ALBUMと呼ぶ)、上記で取得を行うと各画像はidしか取得できない。

 

 

また下記のリファレンスに倣って画像を直接IDで取得しようと試みると、GraphMethodException(エラーコード:100、エラーサブコード:33)となって取得できない。

https://developers.facebook.com/docs/instagram-api/reference/ig-media

※IGメディアの取得はアクセストークンがユーザであるのに対しハッシュタグ検索はアクセストークンはページであり、使用可能なトークンが異なるからという可能性があるが、未検証。

 

しかしハッシュタグ検索のfieldsの指定の仕方を工夫すれば、一発で複数枚まとめて投稿された画像それぞれのmedia_urlを取得可能であるため、ここで共有する。

 

その方法とは、下記の通りchildren{media_url}という記載方法である。

 

上記のように指定すればmedia_typeがCAROUSEL_ALBUMであっても一発でmedia_urlが取得でき、media_urlに対して例えばpythonのrequestsライブラリのget等を行い、バイナリで書き出せば、画像をダウンロード可能なのである。