TwitterのREST APIについて その4(自動フォローまで)
こんばんは、みんろです!
【前回】TwitterAPIについて(自動ツイートまで)
https://minro-blog.info/system/develop/twitter-api-3/
【参考にしたURL】
https://syncer.jp/Web/API/Twitter/REST_API/
特定ワードでツイート検索して、フォローする
最終ソースコードは下記のような感じ!処理内容とソースコードの中身を下で解説していきます。
search_follow.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" #followURL followurl = "https://api.twitter.com/1.1/friendships/create.json" #follow logic def follow(screen_name): #follow params params = {"screen_name" : screen_name, "follow" : False} #request_follow res = twitter.post(followurl, params = params) #post送信 #respons_log log.followlog(json.dumps(json.loads(res.text), ensure_ascii=False)) if res.status_code == 200: #正常投稿出来た場合 print("Success.") else: #正常投稿出来なかった場合 print("Failed. : %d"% res.status_code) return; #search keyword keyword = "#ブログ初心者" #search params params = {'q' : keyword, 'count' : 2} #request_search req = twitter.get(searchurl, params = params) #request_follow if req.status_code == 200: #store result search_timeline = json.loads(req.text) #search_log log.searchlog(json.dumps(search_timeline, ensure_ascii=False)) for tweet in search_timeline['statuses']: #print follow_user_name print(tweet['user']['screen_name']) follow(tweet['user']['screen_name']) print('----------------------------------------------------') else: print("ERROR: %d" % req.status_code)
【処理の流れ】
①キーワードでタイムラインを検索して、最大2ツイートまで抽出。
②その後、そのツイート主をフォローする。
【ソースコード解説】
●1行目~8行目
前回と同じでTwitterAPIを使用するための認証処理。ここは必須のコード。
よく考えてみると、こういう部分って共通化するべきだったな。。。
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) #認証処理
●10行目~13行目
エンドポイントの設定をしています。
searchURLがタイムラインの検索で使うAPI。followURLがフォローをするときに使うAPI。
このURLにパラメータ(値)をセットしてリクエストしたら、検索やフォローができる。
今回は、下記のように使用していきます。
・searchURL・・・特定のキーワードをセットして、該当するツイートを探す。
・followURL・・・ユーザIDをセットして、フォローを行う。
#searchURL searchurl = "https://api.twitter.com/1.1/search/tweets.json" #followURL followurl = "https://api.twitter.com/1.1/friendships/create.json"
●15行目~28行目
フォロー関数をここで定義しておきます。
4行目の「params」の部分でユーザIDをパラメータにセットします。
6行目の「req」の部分でフォロー行為を行なっています。
8行目でログファイルへの出力をしています。
#follow logic def follow(screen_name): #follow params params = {"screen_name" : screen_name, "follow" : False} #request_follow res = twitter.post(followurl, params = params) #post送信 #respons_log log.followlog(json.dumps(json.loads(res.text), ensure_ascii=False)) if res.status_code == 200: #正常投稿出来た場合 print("Success.") else: #正常投稿出来なかった場合 print("Failed. : %d"% res.status_code) return;
●30行目~49行目
後半に書いてありますが、ここがメインロジックですね!
2行目の「keyword」の部分で検索したいキーワードを入力します。
4行目でパラメータにセットしています。
※countの部分は、最大で何件のツイートを抽出するか設定してます。何件ものツイートを取得したい場合はここの数字を増やせばOK。
6行目の「req」の部分でタイムラインの検索行為を行なっています。
7行目は検索行為が成功したかどうかをチェックし、200(Success)であれば、取得したタイムラインをログファイルに出力。
その後、取得したツイートのユーザIDを上記で定義したfollow関数にセットして、フォローリクエスト。
follow(tweet[‘user’][‘screen_name’])
#search keyword keyword = "#ブログ初心者" #search params params = {'q' : keyword, 'count' : 2} #request_search req = twitter.get(searchurl, params = params) #request_follow if req.status_code == 200: #store result search_timeline = json.loads(req.text) #search_log log.searchlog(json.dumps(search_timeline, ensure_ascii=False)) for tweet in search_timeline['statuses']: #print follow_user_name print(tweet['user']['screen_name']) follow(tweet['user']['screen_name']) print('----------------------------------------------------') else: print("ERROR: %d" % req.status_code)
log.py
※こちらも前回と比べて微修正しているので、再掲。
# log making import datetime #file make def fileout(text,str): f = open(str, 'w') f.write(text) f.close() #":"と","で改行コード with open(str,"r",encoding="utf-8") as file: filedata=file.read() filedata=filedata.replace(":",":\n") filedata=filedata.replace(",",",\n") with open(str,"w",encoding="utf-8") as file: file.write(filedata) return; def searchlog(text): dt = datetime.datetime.now() str = 'logs/search_' + dt.strftime("%Y%m%d%H%M%S") + '.log' fileout(text,str) return; def followlog(text): dt = datetime.datetime.now() str = 'logs/follow_' + dt.strftime("%Y%m%d%H%M%S") + '.log' fileout(text,str) return; def favoritelog(text): dt = datetime.datetime.now() str = 'logs/favorite_' + dt.strftime("%Y%m%d%H%M%S") + '.log' fileout(text,str) return; def tweet_research(text): dt = datetime.datetime.now() str = 'logs/tweet_research_' + dt.strftime("%Y%m%d%H%M%S") + '.log' fileout(text,str) return; def retweetlog(text): dt = datetime.datetime.now() str = 'logs/retweet_' + dt.strftime("%Y%m%d%H%M%S") + '.log' fileout(text,str) return;
コマンド上でのファイル配置は前回と変わらず。
早速実行して、「Success」の文字が表示されていれば、フォローできているはず。
本日はここまで!