Twitterのフォロー&RTキャンペーンに自動参加してみたくなったのでpython+tweepyコードでやってみた

気になるアカウントをフォローしてリストインのコードをパクったら、こっちも出来るんじゃ無いか?とやってみた。

このネタはあっちこっちで転がっているようで、同じ事を考えている人が多いようだ。

まあそう言うわけでやってみる。

Twitterでいろんな情報を集めたいので、自動フォローとリストインをpython+tweepyコードをパクってみた – happyman web

import tweepy
import time
# API情報(API1.1)を記入
consumer_key=' '
consumer_secret=' '
ACCESS_TOKEN=' '
ACCESS_TOKEN_SECRET=' '

#API V1.1認証
auth = tweepy.OAuthHandler("consumer_key","consumer_secret")
auth.set_access_token("ACCESS_TOKEN","ACCESS_TOKEN_SECRET")
api = tweepy.API(auth) 

#検索したいキーワードをいれる。もしくははORにしてやれば良いみたい。
query = " をRTとか 色々考えて入れる。フィルターもした方が良さそう。" 

#CRONで定期的に動かすのでバン対策にカウント少なめにした。
#検索方法は新しいもの(recent)、人気なもの(popular)と混在型(mixed)があるらしい。
results = api.search_tweets(q=query,result_type='mixed',count=10)

#実行
for result in results:
   #検索結果でユーザーを抽出
   screen_name = result.user.screen_name
   print('@' + screen_name + 'をフォロー処理中...')
   for i in range(3): #RateLimitにかかったら3回までリトライ
     try:
       if result.lang == 'ja': #日本語ユーザーかどうかフィルタリング
        api.create_friendship(screen_name=screen_name) #フォローする
        api.add_list_member(screen_name=screen_name,list_id="リスト番号") #リストにそのツイートのユーザ名を追加する
        print('@' + screen_name + 'さんのフォローに成功しました。')
         
        try: 
          api.retweet(tweet_id) #リツイートしてやる
         except
          Exception as e: print(e)
       else:
        print('@' + screen_name + 'さんは日本語アカウントではありません。') 

      except tweepy.TweepError as e: #エラーはこっちで処理(この辺の理解がまだできてない)
       if e.reason == "[{'message': 'Rate limit exceeded', 'code': 88}]":
        print(e)
        time.sleep(15 * 60) #15分待機
       else:
        break
    else:
     time.sleep(5) #5秒おく
     break

リツイートの部分はリツイートが何度も出来なくて落ちるので、「except Exception as e:」で逃がしてみた。

このネタは検索ワードとフィルターが工夫が要るようで、フィッシングアカウントまで拾ってリツイートしてしまいかねないので、なかなか難しい。