twitterAPIとpythonを使ってツイートの埋め込みコードを取得してみる

2020年12月21日

twitterAPIとpythonを使ってツイートの埋め込みコードを取得してみる

djangoでtwiterを使用したマーケティングツール的なものを開発したいと思っており、その段階としてツイートの埋め込みを取得してみる事にしました。
検索した特定のユーザーにメッセージを送れるようにする機能を考えています。完全自動化もできますが、djangoで実装する予定なので、ツイートをブラウザ上で確認して定型文メッセージを送る半自動的な仕様にしたいと考えました。その場合はブラウザにコードを埋め込むスタイルになります。twitterAPIには「埋め込みコード」を取得する機能も用意されているみたいですね。早速使ってみたいと思います。

参考:
  【Python】python-twitterモジュールを使って埋め込みコードを取得する
  Python で Twitter から情報収集 (Twitter API 編)

モジュールのインストール

pip3で必要なモジュールをインストールします。


pip3 install requests requests_oauthlib

ソースコード

最終的には下のURLにリクエストすることで該当する埋め込みコードを取得できるみたいです。
「https://twitter.com/<screen_name>/status/<id>

その為には「id」と「screen_name」が必要みたいですね。
なので検索したツイートデータから「id」と「screen_name」を抜き出してあげましょう。


#coding: utf-8
import json
from requests_oauthlib import OAuth1Session

CONSUMER_KEY    = 'xxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxx'
ACCESS_TOKEN    = 'xxxxxxxxxx'
ACCESS_SECRET   = 'xxxxxxxxxx'

twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_SECRET)

url_trend  = "https://api.twitter.com/1.1/trends/place.json"
url_search = "https://api.twitter.com/1.1/search/tweets.json"
url_embed  = "https://publish.twitter.com/oembed"
url_status = "https://api.twitter.com/1.1/statuses/show.json"

#url_searchからid取得
#url_statusとidからstatus取得
#statusとscreen_nameからembed_dataを取得

class TwitterApi():
    def search_tweets(self):
        params = {'q': '寿司', 'count': '3'}
        request = twitter.get(url_search, params = params)
        if request.status_code == 200:
            search_tweets = json.loads(request.text)
            return search_tweets
    
    def get_tweet_ids(self, search_tweets):
        tweet_ids = []
        for tweet in search_tweets['statuses']:
        	tweet_ids.append(str(tweet['id']))
        return tweet_ids

    def get_screen_names(self, tweet_ids):
        embed_params_dicts = []
        for tweet_id in tweet_ids:
            params = {'id': tweet_id}
            request = twitter.get(url_status, params = params)
            status = json.loads(request.text)
            screen_name = status['user']['screen_name']
            embed_params_dict = {}
            embed_params_dict['tweet_id'] = tweet_id
            embed_params_dict['screen_name'] = screen_name
            embed_params_dicts.append(embed_params_dict)
        return embed_params_dicts

    def get_embed_datas(self, embed_params_dicts):
        embed_datas = []
        for e in embed_params_dicts:
            url = 'https://twitter.com/'+e['screen_name']+'/'+'status/'+e['tweet_id']
            params = {'url': url, 'hide_media': False, 'align': 'center'}
            request = twitter.get(url_embed, params = params)
            embed_data = json.loads(request.text)
            embed_datas.append(embed_data['html'])
        return embed_datas

def main():
    twitterApi = TwitterApi()
    search_tweets      = twitterApi.search_tweets()
    tweet_ids          = twitterApi.get_tweet_ids(search_tweets)
    embed_params_dicts = twitterApi.get_screen_names(tweet_ids)
    embed_datas        = twitterApi.get_embed_datas(embed_params_dicts)
    for embed_data in embed_datas:
        print(embed_data)

if __name__ == '__main__':
    main()

実行結果

コンソールにしっかり表示されているのが確認できます。

このコードをブラウザで表示してみます。

しっかり表示されていますね!
これでwordpressAPIも利用すれば完全自動のツイッターまとめサイトなんかもできちゃいそうですね。

最後に

twitterってフォローし合っていないとDM送れませんでしたね...
とりあえず次はdjangoのメッセージボックスに入れた「文字」でツイートを表示できるようにしてみたいと思います。

2020年12月21日