前回、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 を想定しています。
コメント