見出し画像

【Python × Twitter運用】固定ツイートをRTした人にフォロバ&RT返しを行うプログラム

みなさん,こんにちは.

私はTwiterをよく閲覧しているのですがよく,「フォロー&RTしてくれたらフォロバ&RT返し」というツイートをしばしば見かけます.

フォロワーを急増させるために効率の良い方法なのだと思います.


実際に私もフォロワーを増やすためにそのようなツイートを試してみました.

しかし,フォロバや固定ツイートのRT返しは手動でやるのは少し面倒でした.


そこで,pythonを利用して自動で固定ツイートをRTしてくれた人をフォローして固定ツイートをRTするプログラムを作成してみました.

作成したコードを掲載していますので,すぐに汎用することが可能です.


なお,Twitter APIを使用しているため,Twitter Developerアカウントが必要となります.(要申請)


コード全貌

import json
from requests_oauthlib import OAuth1Session
import tweepy

auth = tweepy.OAuthHandler("APIキー", "APIシークレット")
auth.set_access_token("アクセストークン", "アクセスシークレット")
api = tweepy.API(auth)

twitter = OAuth1Session("APIキー", "APIシークレット", "アクセストークン", "アクセスシークレット")

#自分の固定ツイート取得
endpoint = 'https://api.twitter.com/2/users?ids=ユーザーID'
params = {'expansions':'pinned_tweet_id'}
res = twitter.get(endpoint, params = params)
dic_me = json.loads(res.text)
print(dic_me['data'][0]['pinned_tweet_id'])
print(dic_me['includes']['tweets'][0]['text'])

tweet_id=dic_me['data'][0]['pinned_tweet_id']
endpoint = 'https://api.twitter.com/1.1/statuses/retweeters/ids.json?id=' + tweet_id + '&stringify_ids=true'
res = twitter.get(endpoint)
dic_users = json.loads(res.text)

#フォロー/フォロワー取得
friend_ids = api.friends_ids()
follower_ids = api.followers_ids()

for num in range(len(dic_users['ids'])):
   user_id = dic_users['ids'][num]
   
   #自分をフォローしているかどうか
   if user_id in follower_ids:
       print(user_id)
       endpoint = 'https://api.twitter.com/2/users?ids='+user_id
       params = {'expansions':'pinned_tweet_id'}
       res = twitter.get(endpoint, params = params)
       dic_user = json.loads(res.text)
   
       #自分がフォローしていないかどうか
       if int(user_id) not in friend_ids:
           print('未フォロー')
           print(dic_user)
           api.create_friendship(user_id) 
           print('フォローしました')

            #固定ツイートがあるかどうか
           if (dic_user['data'][0]['pinned_tweet_id']):
               tweet_id=dic_user['data'][0]['pinned_tweet_id']
               print('固定ツイートあり')
               try:
                   api.create_favorite(tweet_id)
                   api.retweet(tweet_id)          
               except Exception as e:
                   print(e)
   else:
       print("対象ではありません.")
      


プログラムを利用する前に

まず本プログラムを使用する上でOAuth1Session,tweepyをインストールする必要があります.

未インストールであれば以下のコードをターミナルに入力してインストールしましょう.


pip install requests requests_oauthlib
​pip install tweepy

また,Twitter developerアカウントを取得したら,自分のAPIキー,APIシークレット,アクセストークン,アクセスシークレットに書き換えましょう.

さらに,'ユーザーID'を自分のTwitterアカウントのユーザーIDに書き換えましょう.(Twitter上で表示されるユーザーIDとは異なります.)


コードの解説

続いて,コードの流れについて解説していきます.

本コードは①固定ツイート情報の取得 ②フォロー/フォロワー取得 ③RTしてくれた人がRT返しするための条件を満たしていれば固定ツイートをRT返し の大きく3つの部分に分かれます.


コードの解説 ①固定ツイート情報の取得

#①固定ツイート情報の取得
endpoint = 'https://api.twitter.com/2/users?ids=ユーザーID'
params = {'expansions':'pinned_tweet_id'}
res = twitter.get(endpoint, params = params)
dic_me = json.loads(res.text)
print(dic_me['data'][0]['pinned_tweet_id'])
print(dic_me['includes']['tweets'][0]['text'])

tweet_id=dic_me['data'][0]['pinned_tweet_id']
endpoint = 'https://api.twitter.com/1.1/statuses/retweeters/ids.json?id=' + tweet_id + '&stringify_ids=true'
res = twitter.get(endpoint)
dic_users = json.loads(res.text)

まず,①固定ツイート情報の取得 についてです.

ユーザーID(自分)を指定してTwitterに固定ツイートに関するリクエストを送ります.

リクエストの結果受け取ったレスポンスから自分の固定ツイートのツイートidを取得して「リツイートしているユーザー」のユーザーIDをリスト[dic_users]で取得します.


コードの解説 ②フォロー/フォロワー取得

#②フォロー/フォロワー取得
friend_ids = api.friends_ids()
follower_ids = api.followers_ids()

次に,②フォロー/フォロワー取得 についてです.

[friends_ids]で自分がフォローしているユーザーのユーザーIDを取得します.

[followers_ids]で自分をフォローしているユーザーのユーザーIDを取得します.


コードの解説 ③フォロバ&RT返し(条件付き)

#③RTしてくれた人の固定ツイートをRT返し
for num in range(len(dic_users['ids'])):
   user_id = dic_users['ids'][num]
   
   #自分をフォローしているかどうか
   if user_id in follower_ids:
       print(user_id)
       endpoint = 'https://api.twitter.com/2/users?ids='+user_id
       params = {'expansions':'pinned_tweet_id'}
       res = twitter.get(endpoint, params = params)
       dic_user = json.loads(res.text)
   
       #自分がフォローしていないかどうか
       if int(user_id) not in friend_ids:
           print('未フォロー')
           print(dic_user)
           api.create_friendship(user_id) 
           print('フォローしました')

            #固定ツイートがあるかどうか
           if (dic_user['data'][0]['pinned_tweet_id']):
               tweet_id=dic_user['data'][0]['pinned_tweet_id']
               print('固定ツイートあり')
               try:
                   api.create_favorite(tweet_id)
                   api.retweet(tweet_id)          
               except Exception as e:
                   print(e)
   else:
       print("対象ではありません.")

最後に,③RTしてくれた人がRT返しするための条件を満たしていれば固定ツイートをRT返し についてです.

固定ツイートをRTしてくれたユーザー一覧[dic_users]から1人ずつ取り出して処理していきます.


まず,そのユーザーが自分のことをフォローしているかどうかをフォロワーリストにそのユーザーのIDがあるかどうかで判別します(無ければ終了).

続いて,そのユーザーを自分がフォローしているかどうかをフォローリストにそのユーザーのIDがあるかどうかで判別します(あれば終了).フォローしていなければここでフォローバックします.

最後に,固定ツイートがあるかどうかを判別し,あればその固定ツイートをRTします.


以上が本コードの仕組みとなっています.


最後に

以上がpythonを利用して自動で固定ツイートをRTしてくれた人をフォローして固定ツイートをRTするプログラムの全貌です.

自分がテスト運用した際には問題なく利用することができました.

多いな問題はないと思いますが,もし問題が発生した際にはご連絡いただければ幸いです.


なお,本コードの利用はあくまで自己責任でお願いいたします.

最後までお読みいただきありがとうございました.


私はガジェット紹介,お得情報配信,ブログ運営に関する雑記ブログを運営しております.是非こちらもチェックしてみてください.


いいなと思ったら応援しよう!