Instagram Graph API でハッシュタグ検索する python スクリプト

技術的な小ネタ

前回、Instagram Graph API でハッシュタグ検索する方法を調査しました。

Instagram Graph API でハッシュタグを使用して画像検索する
前回、Instagram Graph API を利用するための準備をしました。ここまでで、とりあえず Instagram Graph API が使用できている状態とします。今回やりたいことは、Instagram Graph API の...

今回はこの検索方法を python スクリプトとして実装します。

目標

以下のpythonスクリプトを作ります。

  • 引数としてハッシュタグ(文字列)を与えると、そのハッシュタグに関連付けされた画像のURLリストを返す
  • 検索順番は評価が高い順とする

作成したもの

python 初心者なので適切な実装ではないかもしれませんが、動作するものはできました。

import requests
import json

class InstagramHashtagSearch:
    # ハッシュタグのID取得用URL
    hashtag_id_api = "https://graph.facebook.com/ig_hashtag_search?user_id={user_id}&q={hashtag}&access_token={access_token}"

    # ハッシュタグの検索用URL
    hashtag_search_api = "https://graph.facebook.com/{hashtag_id}/top_media?user_id={user_id}&fields=id,media_type,media_url,permalink&access_token={access_token}"

    # コンストラクタ引数:インスタグラムのビジネスアカウントID、APIのトークン
    def __init__(self, user_id, access_token):
        self.user_id = user_id
        self.access_token = access_token

    # ハッシュタグの検索して、パーマリンクのリストを得る
    def get_permalink_list(self, hashtag):
        return [d.get("permalink") for d in self.__seach_hashtag(hashtag)]

    # ハッシュタグの検索して、画像リンクのリストを得る(画像でないページはスキップする)
    def get_media_url_list(self, hashtag):
        return [d.get("media_url") for d in self.__seach_hashtag(hashtag) if d.get("media_url") is not None]

    # ハッシュタグで検索して、jsonデータを取得する
    def __seach_hashtag(self, hashtag):
        # ハッシュタグIDの取得
        hashtag_id_url = self.hashtag_id_api.format(user_id=self.user_id, hashtag=hashtag, access_token=self.access_token)

        # 応答のjsonをパースして数値を取得
        hashtag_id = self.__request_url(hashtag_id_url)[0]["id"]

        # ハッシュタグの検索
        hashtag_search_url = self.hashtag_search_api.format(hashtag_id=hashtag_id, user_id=self.user_id, access_token=self.access_token)

        # 応答のjsonをパースして数値を取得
        result_list = self.__request_url(hashtag_search_url)
        return result_list

    # WebAPIを叩く
    def __request_url(self, url):
        response = requests.get(url)
        return json.loads(response.text)["data"]

以下のように使用します。

from InstagramHashtagSearch import * 

if __name__ == '__main__': 
    obj = InstagramHashtagSearch("ビジネスアカウントID","APIトークン")
    result = obj.get_media_url_list("ハッシュタグ")

    print(result)

注意

Facebook 社の意向により、WebAPIのURIが変更になる場合がある点に注意が必要かと思います。
また、APIのバージョンは 4.0 を想定しています。

コメント

タイトルとURLをコピーしました