以前、TwitterのAPIを触ってみよう企画第3回目でTwitterAPIを使って特定のユーザーをフォロー/アンフォローする機能をご紹介しましたが、そのコードを改良してより実践的なものにしたので、ご紹介しておきます。これを実行するだけで、フォロー/アンフォローをボタンからポチポチすることは1度も無くなりました。(早く自動実行も実装しなきゃ。。。)
TwitterのAPI利用準備
まだTwitterのAPI準備をしていない方は、こちらを参考にAPIを使える状態にしておいてください。
特定条件でのアカウントのフォロー外す
まずは、フォローしていてもリフォローしてくれなさそうなアカウントのフォローを外していく以下のプログラムを、任意のファイルに記述します。
import tweepy import os import time # TwitterAPIの認証データを取得して認証 CONSUMER_KEY = os.environ['CONSUMER_KEY'] CONSUMER_SECRET = os.environ['CONSUMER_SECRET'] ACCESS_TOKEN = os.environ['ACCESS_TOKEN'] ACCESS_TOKEN_SECRET = os.environ['ACCESS_TOKEN_SECRET'] auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) api = tweepy.API(auth) my_screen_name = "virtual_techX" # 自分がフォローしているアカウントをチェックして、特定人数を上限に、フォロー返してくれなさそうなアカウントのフォローを外していく。 delete_count = 0 loop_out = False for loop_count in range(2): print("----------------------------------") print(str(loop_count + 1) + "回目のループ開始!") print("----------------------------------") following_ids = api.friends_ids(my_screen_name) followers_ids = api.followers_ids(my_screen_name) check_count = 0 # 同じ人たちを判定しなくていいように、逆からチェックしていく。 if loop_count == 0: following_ids.sort() elif loop_count == 1: following_ids.reverse() for following_id in following_ids: check_count += 1 if check_count > 400: break print("----------------------") print(str(check_count) + "人目のアカウントチェック!今んとこ" + str(delete_count) + "人のフォロー外した") print("following_id:" + str(following_id) + "に関してチェック!") if delete_count > 400: loop_out = True print(str(delete_count) + "人フォロー外したから抜ける!") break for followers_id in followers_ids: if following_id == followers_id: print("following_id:" + str(following_id) + "にはフォローされてたからOK!") break following = api.get_user(following_id) user_follower_count = following.followers_count user_following_count = following.friends_count # 「フォロワー数が2000より小さい」もしくは「フォロワー数がフォロー数の1/2以下」の場合はフォロー削除 if user_follower_count < 2000 or user_following_count / user_follower_count > 0.5: user_id = following.id user_name = following.name screen_name = following.screen_name location = following.location api.destroy_friendship(user_id) print(user_id, ":", user_name + "@" + screen_name + "(" + location + ")はフォロワー:" + str(user_follower_count) + "人,フォロー:" + str( user_following_count) + "人だったからフォロー外した") delete_count += 1 else: print("following_id:" + str(following_id) + "はフォローしすぎてなかったからOK!") print("----------------------------------") print(str(loop_count + 1) + "回目のループ終了!") print("----------------------------------") # 特定人数フォロー外したから抜ける if loop_out: print(str(delete_count) + ":人フォロー外したし、処理終わるよ!!") break # まだ処理続けるなら、次のループまで7.5分休む print(str(check_count) + "回連続でAPIアクセスしたから、7.5分休みますわ...。") time.sleep(450)
プログラムが書けたら、自分好みに変数を一部書き換えるなどして実行してみてください(実行方法が分からない方はコチラを参考にどうぞ)。一応、何か不具合が起きた時にどこで問題が起きたか、フォロー外したのが何人なのかを確認するために、コンソールに情報が表示されるようにしています。
上述のフォロー外す処理の頻度に関して。これは何回か試していく中で発見したことでもあるのですが、基本的に2日間フォローしている状態でフォローバックがない場合、それ以降にフォローバックが行われる可能性は超低かったです。なので、2日(48時間)に1回程度の頻度で以上のプログラムを実行してフォローを外していくと、効果が最大化されるなぁという実感を現状持ってます。
特定単語での検索結果アカウントをフォロー
次に、特定の単語でつぶやいているもしくはプロフィールにその単語が含まれているアカウントを順次フォローしていきます。以下のプログラムを任意のファイルに書いて実行します。
import tweepy import os import time # TwitterAPIの認証データを取得して認証 CONSUMER_KEY = os.environ['CONSUMER_KEY'] CONSUMER_SECRET = os.environ['CONSUMER_SECRET'] ACCESS_TOKEN = os.environ['ACCESS_TOKEN'] ACCESS_TOKEN_SECRET = os.environ['ACCESS_TOKEN_SECRET'] auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) # 特定の単語でつぶやいているユーザーを5人検索して、フォローされておらず、フォロワーが200人以上いればフォロー。 api = tweepy.API(auth) follow_count = 0 loop_out = False for loop_count in range(7): print("----------------------------------") print(str(loop_count + 1) + "回目のループ開始!") print("----------------------------------") if loop_count == 0: query = "ブロックチェーン" elif loop_count == 1: query = "仮想通貨取引所" elif loop_count == 2: query = "coincheck" elif loop_count == 3: query = "bitFlyer" elif loop_count == 4: query = "資産運用" elif loop_count == 5: query = "個人事業" elif loop_count == 6: query = "Dapps" elif loop_count == 7: query = "イーサリアム" # Max100人までしか検索できないぽい。また、単語検索結果で検索結果出てきたアカウント数が上限となる。 search_count = 100 my_screen_name = "virtual_techX" followers_ids = api.followers_ids(my_screen_name) following_ids = api.friends_ids(my_screen_name) check_count = 0 search_results = api.search(q=query, count=search_count) for result in search_results: # フォロー人数が特定人数以上になったらループ抜けて処理終了。 if follow_count > 500: loop_out = True break user_id = result.user.id check_count += 1 print("-----------------------------------------") print("[" + str(loop_count + 1) + "ループ目] 現状" + str(follow_count) + "人を新規フォロー。" + str(check_count) + "人目のアカウント(following_id:" + str(user_id) + ")をチェック開始!") # 検索結果のユーザーにすでにフォローされていたら、フォロー処理をせずにループを次に進める。 if user_id in followers_ids: print("following_id:" + str(user_id) + ")からはすでにフォローされてたからスルー!") continue # 検索結果のユーザーをフォローしていたら、フォロー処理をせずにループを次に進める。 if user_id in following_ids: print("following_id:" + str(user_id) + ")はすでにフォローしてたからスルー!") continue user_follower_count = api.get_user(result.user.id).followers_count user_name = result.user.name screen_name = result.user.screen_name print("----------------------") if user_follower_count < 100: print(user_id, ":", user_name + "@" + screen_name, "はフォロワーが" + str(user_follower_count) + "人しかいないからフォローしなかったす") else: try: api.create_friendship(user_id) print(user_id, ":", user_name + "@" + screen_name, "はフォロワーが" + str(user_follower_count) + "人いて、まだフォローされてなかったからフォローしたっす") follow_count += 1 except: print(user_id, ":", user_name + "@" + screen_name, "はフォローできんかった...なぜ??") print("----------------------------------") print(str(loop_count + 1) + "回目のループ 終了!") print("----------------------------------") # フォロー上限になったらループ抜ける if loop_out: break # アクセス連続しすぎるとやばいかもだから5分待つ(5分待つことで、153APIアクセス/5分 = 459APIアクセス/15分でAPIアクセス上限に引っかからないはず。) print("5分待ちます") time.sleep(300)
query="XXX"
の箇所に入れる単語で検索してフォローしていくことができます。1度の検索では上限が100件だったようなので、7回ループしてMax700アカウントの
チェックをするような処理にしています。
まとめ
僕は今回紹介した2つのプログラムを2日に1回(たまに1週間に1回とかになる)実行しています。これによってTwitterのフォロー/アンフォロー処理は半自動化することができました。ちなみに、先にフォローを外す処理をして、そのあとにフォローしていく処理をしていく方がいい気がしています。フォロー人数の方がフォロワー人数よりも多いアカウントって何となく怪しいですよね。
「フォロワー数 / フォロー数」×「フォロワー数」 = 「ツイッター戦闘力」
上の等式がツイッターにおける戦闘力の高さだと認識しているので、いかにフォロー人数が少ないままでフォロワー数を増やすことができるかどうかがカギな気がしてます。
Pythonをしっかり学びたい方向け
最後に、Pythonをしっかり学びたいという方向けにおすすめの学習ツールを紹介しておきます。
スッキリわかるPython入門 スッキリわかるシリーズ
そもそもPythonの書き方が分からないという方はこちら、安いし分かりやすいのでオススメです。
プログラミング言語 Python 3 入門
このコースで学べること
- Pythonの基礎(データ、制御フロー、関数、データ構造、モジュール、例外(エラー)、クラス、入力と出力、標準ライブラリ)
- ターミナルを使用したPythonの実行
- PyCharmを使用したPython ファイルの作成・デバッグ実行
Pythonの基礎の基礎が丁寧に開設されていて、Python初心者の方でもPythonへの理解が深まりやすいUdemyのコースです。
Pythonの仕組みを基礎からしっかりと理解しておきたい方にオススメです。
【プログラミング言語 Python 3 入門】をUdemyで見てみる
Pythonで作業の自動化・効率化
Pythonでのプログラミング学習中の方向けに、Noteでより詳細なプログラミングチュートリアルを配信しているので、そちらもチェックしてみてください( ・v・)/
では!