TwitterのREST APIについて その4(自動フォローまで)

こんばんは、みんろです!

TwitterAPIを使って色々してみたいPart4です!
本日からPythonを使ってフォロー・いいね・リツイートができるところまで進めて行きますよ。
と言っても、前回までができているのであれば、エンドポイント(URL)をちょっと変更するくらいでそれぞれできちゃうから、めっちゃ簡単でした。
 

【前回】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」の文字が表示されていれば、フォローできているはず。
本日はここまで!




 

 

おすすめ

コメントを残す

メールアドレスが公開されることはありません。