・PythonによるTwitter APIの使い方を知りたい方
・Pythonを使った自動リツイートのコードを実装したい方
・自動リツイートプログラムの効果を知りたい方
など
Pythonを使うことで色々なことができるのですが
その一つがTwitterとの連携です。
これまでのこのブログでもPythonコードを使ってTwitterにアクセスし
色々なことを試させてもらいました。
そんなPythonとTwitterのコードなのですが
試しに自動リツイートのプログラムを書いてみたら、フォロワーの数が500人を超えるほど増加しました。
下がその時の写真になります。
左が自動化前で右がPythonで自動化後になります。
500増えたわけじゃないやん!!!
って思われるかもしれませんが。。。。。
5/5には530人くらいだったから許して。。。。
今日はそんな感じで、Pythonで自動botのコードを紹介させていただきます。
Twitterの規約
Twitterの規約については公式ドキュメントを参照してください。
少しだけ解説させていただくと特にこの部分は注意が必要です。
この部分を読むと自動「いいね」は禁止になっております。
また無差別や過剰なフォローも禁止になっております。
念のために申しますと、、、
ちなみに私の紹介するプログラムもフォロワーが増やせる保証は全く無いです(笑)
他にも色々注意事項はあるので、しっかりここは自己責任で読み込んでください。
PythonによるBot化の手順
次はBot作成の手順お話をさせていただきます。
Pythonで Botを作るには「Twitter API 」というものを利用する必要があります。
なのでまず、 Twitter の公式ページからAPIの利用申請を出す必要があります。
PythonでTwitterを扱えるようにするまでは以下のような手順です。
- Twitterアカウントを作成する(Pythonで操作用)
- Twitter 公式ページへ API 利用申請する
- API 申請許可が通ったら API を利用するための「Consumer Keys」 と「Authentication Tokens」を取得
- 取得したTwitter API を使って BotのPythonコードを書く
②、③については前にどうやって取得するのかについて解説した記事があるのでこちらを参照していただければ幸いです。
作成するBotのルール
ここまで色々と前提についてお話させていただいたのですが
ようやくPythonで作る内容について書かせていただきます!!
下記の内容が今回の紹介するPythonコードの機能になります。
- 指定した「検索ワード」を含むツイートしたユーザを自動フォロー
- 指定した「検索ワード」を含むツイートを自動リツイート
- フォローしてくれた人を自動リフォロー
- 毎日特定の時間に①〜③を実行
これを家のPCでPythonを使って実行します。
本格的な運用にはサーバーを借りて実行するのでしょうが
私はそのあたりズボらだったので、家のPCで1ヶ月の間実行しておりました。
実行したコード
早速実行したコードを紹介させていただきます。
少し長いですが以下が内容になります。
import schedule
import tweepy
import random
from time import sleep
import datetime
def main():
dt_now = datetime.datetime.now()
print('実行しました', dt_now)
consumer_key = 'XXXXXXXXXXXXXXXXXX'
consumer_secret = 'XXXXXXXXXXX'
access_token_key = 'XXXXXXXXXXXXX'
access_token_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token_key, access_token_secret)
api = tweepy.API(auth)
my_user_id = api.verify_credentials().id_str
#キーワード
keyword = ["勉強", "運動", "プログラミング"]
# リツイート
do(api,"RETWEET",keyword)
# フォロー
do(api,"FOLLOW",keyword)
# リフォロー
reFollow(api,my_user_id)
# タイムライン検索
def do(api,action,keyword,maxReq=5,maxTimeLine=10):
for q in keyword:
cnt = 0
actCnt = random.randint(1,maxReq)
search_results = api.search_tweets(q=q, count=maxTimeLine)
for result in search_results:
tweet_id = result.id
user_id = result.user._json['id']
try:
if cnt < actCnt:
if action == "RETWEET" : api.retweet(tweet_id)
if action == "FOLLOW" : api.create_friendship(user_id=user_id)
else:
break
cnt = cnt + 1
except Exception as e:
print(e)
# フォロー返し
def reFollow(api,my_user_id,maxReq=3):
cnt = 0
#フォロワー数とフォロー数を収納するリスト
follower_list = []
friend_list = []
#ユーザ情報からフォロワー数を取得
follower_list = api.get_follower_ids()
#ユーザ情報からフォロー数を取得
friend_list = api.get_friend_ids()
result_list = list(set(follower_list) - set(friend_list))
for user_id in result_list:
cnt = cnt + 1
print(user_id)
try:
if cnt < maxReq : api.create_friendship(user_id=user_id)
except Exception as e:
print(e)
main()
schedule.every().day.at("06:23").do(main)
schedule.every().day.at("10:27").do(main)
schedule.every().day.at("12:16").do(main)
schedule.every().day.at("15:41").do(main)
schedule.every().day.at("18:29").do(main)
schedule.every().day.at("21:36").do(main)
schedule.every().day.at("23:51").do(main)
while True:
schedule.run_pending()
sleep(1)
ちょっと長いのですが
上のコードを実行すると、すぐにルール通りのものを実行し
コード内に書かれた時間で再実行してくれます。
少し内容を解説させていただきます。
メインのコード
def main():
dt_now = datetime.datetime.now()
print('実行しました', dt_now)
consumer_key = 'XXXXXXXXXXXXXXXXXX'
consumer_secret = 'XXXXXXXXXXX'
access_token_key = 'XXXXXXXXXXXXX'
access_token_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token_key, access_token_secret)
api = tweepy.API(auth)
my_user_id = api.verify_credentials().id_str
#キーワード
keyword = ["勉強", "運動", "プログラミング"]
ここでは主にPythonとTwitterの連携設定について書いております。
このコードを実行するために皆様に変更していただきたい部分を解説します。
consumer_key =’XXX’と伏せて書いてある部分がAPIのキーの部分で
個別のアカウントに与えられるものになります。(間違ってブログに載せないようにしましょう笑)
keywordのリストは、このリストに含まれる単語が
リツイートやフォローの対象になります。
お好みの内容を記述しましょう(^_^)
リツイートとフォロー機能
def do(api,action,keyword,maxReq=5,maxTimeLine=10):
for q in keyword:
cnt = 0
actCnt = random.randint(1,maxReq)
search_results = api.search_tweets(q=q, count=maxTimeLine)
for result in search_results:
tweet_id = result.id
user_id = result.user._json['id']
try:
if cnt < actCnt:
if action == "RETWEET" : api.retweet(tweet_id)
if action == "FOLLOW" : api.create_friendship(user_id=user_id)
else:
break
cnt = cnt + 1
except Exception as e:
print(e)
search_results = api.search_tweets(q=q, count=maxTimeLine)
qの部分で先ほどのキーワドを指定して、ツイートを検索します。
その後ヒットしたツイートをfor文を使って
api.retweet(tweet_id)でリツイート
api.create_friendship(user_id=user_id)でフォロー
を実行しております。
フォロー返し
フォローした下さった方をフォローする機能については以下になります。
def reFollow(api,my_user_id,maxReq=3):
cnt = 0
#フォロワー数とフォロー数を収納するリスト
follower_list = []
friend_list = []
#ユーザ情報からフォロワー数を取得
follower_list = api.get_follower_ids()
#ユーザ情報からフォロー数を取得
friend_list = api.get_friend_ids()
result_list = list(set(follower_list) - set(friend_list))
for user_id in result_list:
cnt = cnt + 1
print(user_id)
try:
if cnt < maxReq : api.create_friendship(user_id=user_id)
except Exception as e:
print(e)
これは
そのフォロワーとフォローの差分を result_listに集約して、そのリストに含まれるアカウントをfor文を使って順にフォローする内容になります。
特定の時間に実行する
最後に実行スケジュールのコードを解説します。
schedule.every().day.at("06:23").do(main)
schedule.every().day.at("10:27").do(main)
schedule.every().day.at("12:16").do(main)
schedule.every().day.at("15:41").do(main)
schedule.every().day.at("18:29").do(main)
schedule.every().day.at("21:36").do(main)
schedule.every().day.at("23:51").do(main)
while True:
schedule.run_pending()
sleep(1)
ScheduleライブラリというPythonのライブラリを使用しました。
まず、schedule.every
で定期実行するためのジョブをライブラリに登録してます。
登録したジョブは実行時間などを管理していますが、
次に記載するshedule.run_pending
が呼び出されるまで、ジョブは実行されません。
このhedule.run_pending
をwhile True文で実行し
定期的にこのBotを実行させてます。
おわりに
ここまで読んでいただき、ありがとうございました。
Pythonは結構SNSと相性いいなと最近感じております。
実は今回のBotは私が趣味で行っているスマホゲームの内容について
リツイートやフォローをさせてもらっていて。。。
500人という昔使用していたリアルのアカウントよりも多くフォロワーが多くなってしまいました(#^.^#)
もしかしたら、面白いツイートをするよりも
誰かを認めたり、ツイートの拡散を手伝ってあげることが
自分のフォロワーを増やすことよりも重要かもしれませんね。
長くなりましたが、ここで終わりたいと思います。
読んでいただきありがとうございました!!!