インスタで複数枚まとめて投稿された写真を一発でダウンロードする手法(instagram graph api)
instagramはinstagram 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等を行い、バイナリで書き出せば、画像をダウンロード可能なのである。