TwitterのREST APIについて その5(自動いいねまで)
こんばんは、みんろです!
【前回】TwitterAPIについて(自動フォローまで)
https://minro-blog.info/system/develop/twitter-api-4/
【参考にしたURL】
https://syncer.jp/Web/API/Twitter/REST_API/
特定ワードでツイート検索して、いいねしてなかったらいいねする
最終ソースコードは下記のような感じ!処理内容とソースコードの中身を下で解説していきます。
search_favorite.py
import json, config, log #標準のjsonモジュールとconfig.pyの読み込み from requests_oauthlib import OAuth1Session #OAuthのライブラリの読み込み CK = config.CONSUMER_KEY CS = config.CONSUMER_SECRET AT = config.ACCESS_TOKEN ATS = config.ACCESS_TOKEN_SECRET twitter = OAuth1Session(CK, CS, AT, ATS) #認証処理 #searchURL searchurl = "https://api.twitter.com/1.1/search/tweets.json" #favoriteURL favoriteurl = "https://api.twitter.com/1.1/favorites/create.json" #tweet_researchURL tweeturl = "https://api.twitter.com/1.1/statuses/show.json" #favorite logic def favorite(tweet_id): #follow params params = {"id" : tweet_id} #request_follow res = twitter.post(favoriteurl, params = params) #post送信 #responsrog log.favoritelog(json.dumps(json.loads(res.text), ensure_ascii=False)) if res.status_code == 200: #正常投稿出来た場合 print("Success.") else: #正常投稿出来なかった場合 print("Failed. : %d"% res.status_code) return; #tweet_research logic def tweet_research(tweet_id): #follow params params = {'id' : tweet_id} #request_tweet_research req = twitter.get(tweeturl, params = params) if req.status_code == 200: search_tweet = json.loads(req.text) log.tweet_research(json.dumps(search_tweet, ensure_ascii=False)) if search_tweet['favorited'] == False: print('not_favorite') return False; else: print('favorited') return True; else: print("ERROR: %d" % req.status_code) return False; #search keyword keyword = "#ブログ初心者" #search params params = {'q' : keyword, 'count' : 2} #request_search req = twitter.get(searchurl, params = params) #search and request_favorite if req.status_code == 200: search_timeline = json.loads(req.text) log.searchlog(json.dumps(search_timeline, ensure_ascii=False)) for tweet in search_timeline['statuses']: if tweet_research(tweet['id_str']) == False: favorite(tweet['id_str']) print('----------------------------------------------------') else: print('----------------------------------------------------') else: print("ERROR: %d" % req.status_code)
【処理の流れ】
①キーワードでタイムラインを検索して、最大2ツイートまで抽出。
②再度ツイートを個別に取得し、いいね済みか確認する。
③いいねしていなければ、いいねする。
【ソースコード解説】
●17行目~30行目
前回と同じでいいね関数を用意しておきます。
引数としては、ツイートごとに発番されているツイートIDをキーにいいねする。
#favorite logic def favorite(tweet_id): #follow params params = {"id" : tweet_id} #request_follow res = twitter.post(favoriteurl, params = params) #post送信 #responsrog log.favoritelog(json.dumps(json.loads(res.text), ensure_ascii=False)) if res.status_code == 200: #正常投稿出来た場合 print("Success.") else: #正常投稿出来なかった場合 print("Failed. : %d"% res.status_code) return;
●32行目~50行目
個別ツイート取得の関数を用意しておきます。
いいね済みかどうかをチェックし、いいね済みであればTrueを返却するような関数にしています。
なぜか、ツイート検索の方ではいいねをしてても、してないことになっていました。。
解決しなかったので、逐一、個別でツイートを検索してます。
#tweet_research logic def tweet_research(tweet_id): #follow params params = {'id' : tweet_id} #request_tweet_research req = twitter.get(tweeturl, params = params) if req.status_code == 200: search_tweet = json.loads(req.text) log.tweet_research(json.dumps(search_tweet, ensure_ascii=False)) if search_tweet['favorited'] == False: print('not_favorite') return False; else: print('favorited') return True; else: print("ERROR: %d" % req.status_code) return False;
log.pyは前回記載しているものでOKなので、早速実行してみましょう。
「not_favorite」の表示の後、「Success」が表示されていれば、いいねができている。
本日はここまで!