仮想サーファーの波乗り

仮想サーファーの日常

プログラミング・エンジニアのスキルアップ・ブログ運営などに関してよく書く雑記ブログ

➡ Udemyで8/27(木)まで割引セール開催中! 1,200円〜で普段の90%以上OFF!

Pythonでwebアプリケーション開発⑥ ~TwitterAPIで自動フォロー/アンフォロー~


こんばんは!


TwitterのAPIを触ってみよう企画の第3回目です。今回は、TwitterAPIを使って特定のユーザーをフォローしていきます。


TwitterのAPI利用準備


まだTwitterのAPI準備をしていない方は、こちらを参考にAPIを使える状態にしておいてください。


特定条件のアカウントをフォロー


今回もこれまで同様Tweepyを使っていきます。まずは、「search_follow_user.py」というファイルに、以下の条件でユーザーをフォローしていく処理を記述します。
・特定の単語で検索に引っかかる
・まだフォローしていない
・フォローは最大でも5人までにする

import tweepy
import os

# 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)

# 特定の単語でつぶやいているユーザーを10人検索して、フォローしているか判定し、まだフォローしていなければフォロー。
# フォロー人数が5人になるまでフォローしていく。
query = "ブロックチェーン"
search_count = 10
loop_count = 0
api = tweepy.API(auth)
search_results = api.search(q=query, count=search_count)

for result in search_results:
    user_id = result.user.id
    screen_name = result.user.screen_name
    user_name = result.user.name
    print("----------------------")
    try:
        api.create_friendship(user_id)
        print(user_id, ":", user_name + "@" + screen_name, "をフォローしました")
        loop_count += 1
    except:
        print(user_id, ":", user_name + "@" + screen_name, "はフォロー済みだったぽいね")
    if loop_count >= 5:
        break


それでは、ファイルを実行してみましょう。

$ forego run python search_follow_user.py


Terminal上に、フォロー結果が表示されました。 f:id:virtual-surfer:20180212155909p:plain


本当にフォローされているのか結果の1人目を確認してみると、フォローされていることを確認できました。 f:id:virtual-surfer:20180212155925p:plain


次に、「既にフォローされているアカウントはフォローしなくてもいいし、フォロワー少なすぎるアカウントはちょっとなあ。。。」という時を想定して「search_unfollowed_user.py」というファイルに、以下の条件でユーザーをフォローしていく処理を記述します。
・特定の単語で検索に引っかかる
・まだフォローされておらず、フォローもしていない
・フォロワーが200人以上いる

import tweepy
import os

# 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)
query = "仮想通貨"
search_count = 5
my_screen_name = "virtual_techX"

followers_ids = api.followers_ids(my_screen_name)
search_results = api.search(q=query, count=search_count)
for result in search_results:
    user_id = result.user.id
    # 検索結果のユーザーにすでにフォローされていたら、フォロー処理をせずにループを次に進める。
    if user_id in followers_ids:
        break
    # 検索結果のユーザーにまだフォローされておらず、フォロワーが200人以上いればフォロー。いなければ無視。
    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 < 200:
        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) + "人もいるからフォローしたっす")
        except:
            print(user_id, ":", user_name + "@" + screen_name, "はフォロー済みだったぽいね")


ファイルを実行してみると、ちゃんと200人以上の場合はフォローするようにしてくれています。 f:id:virtual-surfer:20180212163324p:plain


ちなみに、「str(文字列型)とint(整数型)の連結、普通にできるっしょ!」と普段書いているJavaのノリで実行してエラーになりました。「str(int)」でintを明示的にstrに型変換する必要あるのですね。ちょっと勉強になった。


特定条件のアカウントをアンフォロー


ついでに、フォロワー少なすぎるアカウントのフォローを外す処理も実装します。以下の条件で今フォローしているアカウントのフォローを外す「remove_user.py」ファイルを作成します。
・自分がフォローしているアカウントの内、フォロワーが10人以下のアカウント

import tweepy
import os

# 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"

# フォローしているアカウントのフォロワーが10人以下ならフォロー外す。10人より多ければ無視
following_ids = api.friends_ids(my_screen_name)
for following_id in following_ids:
    following = api.get_user(following_id)
    user_id = following.id
    user_follower_count = following.followers_count
    user_name = following.name
    screen_name = following.screen_name
    if user_follower_count <= 10:
        print("----------------------")
        api.destroy_friendship(user_id)
        print(user_id, ":", user_name + "@" + screen_name, "はフォロワーが" + str(user_follower_count) + "人しかいないからフォロー外したっす")


ファイルを実行してみると、フォロワー10人以下のユーザーがどんどんアンフォローされていきます。 f:id:virtual-surfer:20180212165827p:plain


これでフォロー、特定の条件でのアンフォローの実装ができるようになったので、あとは条件を変えていけば自分のフォローしたい/アンフォローしたいアカウントを定期的に自動で操作してくれます。最高。


まとめ


ここまでで、ツイート、タイムラインの取得、フォロー・アンフォローの実行処理を書いてきましたが、ここまでできればTwitterを画面から操作することは今後なさそうです。terminalとファイル操作で処理の内容だけ書いて、あとは実行しておくようにすれば実質の作業時間5分とかで時間の短縮になりますしね。毎回フォロー/アンフォローの操作のために画面ポチポチして20分とかかけてた頃が懐かしい...。


次は処理を定期実行するようにしたいところですね。条件と定期実行するタイミングを画面からいじれるようなアプリケーションを作れば、晴れてTwitterのポチポチ操作を卒業できそうです。


Pythonをしっかり学びたい方向け

最後に、Pythonをしっかり学びたいという方向けにおすすめの学習ツールを紹介しておきます。


スッキリわかるPython入門 スッキリわかるシリーズ

そもそもPythonの書き方が分からないという方はこちら、安いし分かりやすいのでオススメです。


プログラミング言語 Python 3 入門

f:id:virtual-surfer:20191207103500p:plain

このコースで学べること

  • Pythonの基礎(データ、制御フロー、関数、データ構造、モジュール、例外(エラー)、クラス、入力と出力、標準ライブラリ)
  • ターミナルを使用したPythonの実行
  • PyCharmを使用したPython ファイルの作成・デバッグ実行

Pythonの基礎の基礎が丁寧に開設されていて、Python初心者の方でもPythonへの理解が深まりやすいUdemyのコースです。

Pythonの仕組みを基礎からしっかりと理解しておきたい方にオススメです。


【プログラミング言語 Python 3 入門】をUdemyで見てみる


Pythonで作業の自動化・効率化

Pythonでのプログラミング学習中の方向けに、Noteでより詳細なプログラミングチュートリアルを配信しているので、そちらもチェックしてみてください( ・v・)/

note.mu


では!