TwitterのREST APIについて その6(自動リツイートまで)
こんばんは、みんろです!
【前回】TwitterAPIについて(自動いいねまで)
https://minro-blog.info/system/develop/twitter-api-5/
【参考にしたURL】
https://syncer.jp/Web/API/Twitter/REST_API/
特定ワードでツイート検索して、リツイートしてなかったらリツイートする
最終ソースコードは下記のような感じ!処理内容とソースコードの中身を下で解説していきます。
search_retweet.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" #retweetEP retweetEP = "https://api.twitter.com/1.1/statuses/retweet/" #tweet_researchURL tweeturl = "https://api.twitter.com/1.1/statuses/show.json" #retweet logic def retweet(tweet_id): #follow params params = {"id" : tweet_id} retweeturl = retweetEP + tweet_id + ".json" print(retweeturl) #request_follow res = twitter.post(retweeturl, params = params) #post送信 #responsrog log.retweetlog(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['retweeted'] == False: print('not_retweeted') return False; else: print('retweeted') 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: retweet(tweet['id_str']) print('----------------------------------------------------') else: print('----------------------------------------------------') else: print("ERROR: %d" % req.status_code)
【処理の流れ】
①キーワードでタイムラインを検索して、最大2ツイートまで抽出。
②再度ツイートを個別に取得し、リツイート済みか確認する。
③リツイートしていなければ、リツイートする。
【ソースコード解説】
●12行目~13行目
リツイート用のURLには「ツイートID」を付与してリクエストを投げないといけない。
そのため、前回とは違うポイントとして、後々ツイートIDを付与できるようにEPとして定義しています。
#retweetEP retweetEP = "https://api.twitter.com/1.1/statuses/retweet/"
●17行目~30行目
リツイート用のロジックを用意しています。
引数に「ツイートID」をセットし、関数を呼び出す事で、URLに付与してリクエストを投げています。
#retweet logic def retweet(tweet_id): #follow params params = {"id" : tweet_id} retweeturl = retweetEP + tweet_id + ".json" print(retweeturl) #request_follow res = twitter.post(retweeturl, params = params) #post送信 #responsrog log.retweetlog(json.dumps(json.loads(res.text), ensure_ascii=False)) if res.status_code == 200: print("Success.") else: print("Failed. : %d"% res.status_code) return;
それ以外は前回とほぼ同じですね。※関数名とかは変えてますが、、、
早速実行して行きましょう!
最後の赤枠の中にURLが記載されていますが、そのURLにリクエストを投げており「Success」が表示されていれば、成功です!
本日はここまで