Pythonで、Twitterをさわってみよう第二弾です。
今回は、検索条件に合うツイートを「いいね」する方法を考えてみます。
準備
TwitterのDeveloperアカウントを申請し、APIデータ操作に必要なキーを入手する必要があります。
詳しくは、前回の「PythonでTwitterをさわってみる」をご参照ください。
実装
前準備
API操作に必要な4つのキーを、変数に入れておきます。
1 2 3 4 |
CONSUMER_KEY = " " CONSUMER_SECRET = " " ACCESS_TOKEN = " " ACCESS_TOKEN_SECRET = " " |
ツイートの検索
「ツイートの検索」と「いいね」をモジュール化して実装します。最初に検索部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
from requests_oauthlib import OAuth1Session from time import sleep import json #4つのキーをセット CK = CONSUMER_KEY CS = CONSUMER_SECRET AT = ACCESS_TOKEN ATS = ACCESS_TOKEN_SECRET # 対象ツイートを検索 def search_tweet(search_word): url = "https://api.twitter.com/1.1/search/tweets.json" twitter = OAuth1Session(CK, CS, AT, ATS) req = twitter.get(url, params = search_word) if req.status_code == 200: tweet = json.loads(req.text) search_timeline = json.loads(req.text) for tweet in search_timeline['statuses']: print(tweet['user']['screen_name'] + "(" + tweet['user']['name'] + ") > " + tweet['text']) print("(tweet id = " + tweet['id_str'] + ")") print("-"*10) return tweet['id'] else: print("ERROR: %d" % req.status_code) |
ツイート検索のAPI説明はこちら(Twitter公式)。
前回の記事内容と構成はほとんど一緒ですが、APIでの「いいね」に必要なツイートIDを返しています。
いいね
続いて肝となる「いいね」の部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# いいね def favorite_tweet(tweet_id): url = "https://api.twitter.com/1.1/favorites/create.json" params = {'id' : tweet_id, #'include_entities' : 'True' } twitter = OAuth1Session(CK, CS, AT, ATS) req = twitter.post(url, params = params) if req.status_code == 200: print('↑のツイートを いいね しました') print("-・"*30) else: print("ERROR: %d" % req.status_code) print("-・"*30) |
いいねのAPI説明はこちら(Twitter公式)。
パラメータは取得したID(と、include_entities)ですので、構造は単純ですね。
全体の構造
全体は以下のようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# 「いいね」をつける #-------------------------------------------------------------------------------------------------------------------------------------- from requests_oauthlib import OAuth1Session from time import sleep import json #4つのキーをセット CK = CONSUMER_KEY CS = CONSUMER_SECRET AT = ACCESS_TOKEN ATS = ACCESS_TOKEN_SECRET # 対象ツイートを検索 def search_tweet(search_word): url = "https://api.twitter.com/1.1/search/tweets.json" twitter = OAuth1Session(CK, CS, AT, ATS) req = twitter.get(url, params = search_word) if req.status_code == 200: tweet = json.loads(req.text) search_timeline = json.loads(req.text) for tweet in search_timeline['statuses']: print(tweet['user']['screen_name'] + "(" + tweet['user']['name'] + ") > " + tweet['text']) print("(tweet id = " + tweet['id_str'] + ")") print("-"*10) return tweet['id'] else: print("ERROR: %d" % req.status_code) # いいね def favorite_tweet(tweet_id): url = "https://api.twitter.com/1.1/favorites/create.json" params = {'id' : tweet_id, #'include_entities' : 'True' } twitter = OAuth1Session(CK, CS, AT, ATS) req = twitter.post(url, params = params) if req.status_code == 200: print('↑のツイートを いいね しました') print("-・"*30) else: print("ERROR: %d" % req.status_code) print("-・"*30) if __name__ == '__main__': count = 3 tweet_id = 9999999999999999999 for i in range(count): #print(tweet_id) search_word = {'q' : "#サンシャイン水族館 min_faves:10", #検索文字列 'count': 1, 'lang' : 'ja', 'result_type' : 'recent', 'max_id' : str(tweet_id-1) } tweet_id = search_tweet(search_word) favorite_tweet(tweet_id) if not i==count-1: sleep(60) print("finish") |
51行目の検索文字列に合う、最新3つのツイートに「いいね」をつけています。検索文字列には、Twitterの高度な検索を使用しています。
Twitterの高度な検索は別ブログにまとめています。よろしければご参照ください。
55行目の max_id
は、ツイート検索で「これを含まない、これより過去(よりIDの小さい)のツイートを取得する」パラメータです。最新のツイートから、徐々に遡って「いいね」します。
「これを含まない」はずなんですが、何故か同一のツイートを参照してしまうため -1しています。何でだろう…?
59行目では 一度の処理後に1分間の待機を設けています。短期間に いいねをし過ぎると、アカウントを凍結される可能性があるためです。1分は流石に長すぎかもしれませんが、念のため。
実行結果
上の例、「#サンシャイン水族館 min_faves:10″」は、ハッシュタグ:サンシャイン水族館、いいね数 10以上のツイート検索文字列です。
実行結果はこちら↓
無事いいねをつけることができました。
まとめ
Twitterの検索条件にあうツイートに自動で「いいね」する方法でした。
これを利用すると、特定の投稿者からのツイートを全て いいね したり、自分宛ての返信に自動で いいね できます。
最後に、公式APIの説明にある通り、検索,いいね数 ともに単位時間中の数制限が存在しますので、十分に注意して運用してください。
コメント
[…] 【Python】Twitterで検索したツイートに自動で「いいね」する […]