TwitterのREST APIについて その6(自動リツイートまで)

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

TwitterAPIを使って色々してみたいPart6です!
本日はPythonを使ってリツイートするところまで進めて行きますよ。
 

【前回】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」が表示されていれば、成功です!

本日はここまで

おすすめ

コメントを残す

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