【tweepy】Pythonで特定ユーザーのフォロワーを自動フォローする

pythonのライブラリにtweepyというものがあり簡単に自動フォローすることができます。ネット上にもたくさんコードが公開されているのでそれらを参考にコードを構築することができるでしょう。

スポンサーリンク

tweepyを使うまでの準備

tweepyを使うにはtwitterアプリの登録が必要です。アプリの登録の際は申請が必要で、https://developer.twitter.com/en/appsから行うことができます。この記事ではツイッターのアプリ申請はすでにおわっているものとします。ちなみに「ツイッター アプリ 申請」などと検索すればいくらでもやり方がでてくると思います。

なぜツイッターの開発者登録でアプリ申請が必要なのかというとtweepyはtwitterAPIを使用するからです。twitterAPIを使用するためにはアクセストークンなどが必要となります。

  • pythonのtweepyで簡単に自動フォローのスクリプトが作れる
  • tweepyを使うためにはtwitterの開発者ページでアプリの申請を行う
  • アプリ申請はtwitterのAPIを使うために必要
スポンサーリンク

tweepyで自動フォローするスクリプト

さきほどものべましたが自動フォローのスクリプトはネット上に公開されています。

以下の2サイトで公開されているコードはほぼ同じものです。

【コード公開】【Python】twitter APIによるフォロー・アンフォロー自動化ツール

Tweepyで自動フォロー&ファボを実装し、Cronで定期実行

import tweepy
import time

def get_api():
    keys = dict(
        screen_name = 'XXXXXXXXX',
        consumer_key = 'XXXXXXXXX',
        consumer_secret = 'XXXXXXXXX',
        access_token =  'XXXXXXXXX',
        access_token_secret = 'XXXXXXXXX',
    )

    SCREEN_NAME = keys['screen_name']
    CONSUMER_KEY = keys['consumer_key']
    CONSUMER_SECRET = keys['consumer_secret']
    ACCESS_TOKEN = keys['access_token']
    ACCESS_TOKEN_SECRET = keys['access_token_secret']

    auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
    auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
    api = tweepy.API(auth)
    return api, SCREEN_NAME

def unfollow(api,followers, friends):
    unfollow_cnt = 0
    for f in friends:
        if f not in followers:
            if unfollow_cnt <= 50:
                api.destroy_friendship(f)
                print("{0}のフォローを解除しました。".format(api.get_user(f).screen_name))
                time.sleep(10)
                unfollow_cnt += 1
            else:
                print('一度に解除可能な人数(50人)に達したため処理を中断します。')
                break
    return unfollow_cnt

def follow(api, followers, friends):
    follow_cnt = 0
    for followerId in followers:
        count=0
        for friendId in friends:
            if followerId == friendId:
                break
            count += 1
        if count == len(friends):
            try:
                api.create_friendship(followerId, True)
                print("ID:{0}をフォローしました。".format(api.get_user(followerId).screen_name))
                time.sleep(10)
                follow_cnt += 1
            except tweepy.error.TweepError:
                print('フォローが失敗しました。')
    return follow_cnt

def yes_no_input(choice):
    while True:
        if choice in ['y', 'Y']:
            return True
        else:
            return False

if __name__ == "__main__":
    u_cnt = 0
    f_cnt = 0
    api, SCREEN_NAME = get_api()
    followers = api.followers_ids(SCREEN_NAME)
    friends = api.friends_ids(SCREEN_NAME)
    choice = input("フォロー解除を実行しますか? [y/N]: ").lower()
    if yes_no_input(choice):
        u_cnt = unfollow(api, followers, friends)
    choice = input("フォローを実行しますか? [y/N]: ").lower()
    if yes_no_input(choice):
        f_cnt = follow(api, followers, friends)
    print('{}人をフォロー解除、{}人をフォローしました。'.format(u_cnt,f_cnt))
    input()

このコードはネット上に公開されているコードですが、このコードのをみるとわかるのですが、自分のフォロワーをフォローするようになっています。もし特定ユーザーのフォロワーをフォローしたい場合はコードを編集する必要があります。

また、完全自動でフォローを行いたい場合、yes_no_input()関数はユーザーにフォロー、アンフォローを実行するかどうかをうながすものですが、これは不要です。ですのでここも編集する必要があるでしょう。

 特定ユーザーのフォロワーをフォローする

特定ユーザーのフォロワーをフォローしたかった場合は以下のように編集すればいいと思われます。

if __name__ == "__main__":
    u_cnt = 0
    f_cnt = 0
    api, SCREEN_NAME = get_api()
    followers = api.followers_ids(SCREEN_NAME)
    friends = api.friends_ids(SCREEN_NAME)
    specificuser_followers = api.followers_ids('特定ユーザー')
    '''
    choice = input("フォロー解除を実行しますか? [y/N]: ").lower()
    if yes_no_input(choice):
        u_cnt = unfollow(api, followers, friends)
    '''
    '''
    choice = input("フォローを実行しますか? [y/N]: ").lower()
    if yes_no_input(choice):
        f_cnt = follow(api, specificuser_followers, friends, 1)
    '''
    f_cnt = follow(api, specificuser_followers, friends)
    print('{}人をフォロー解除、{}人をフォローしました。'.format(u_cnt,f_cnt))

api.followers_ids()で特定のユーザーを取得できますので、follow()関数の第二引数にspecificuser_followersをあててやればよいでしょう。またyes noは邪魔なのでユーザーが操作しなくて済むようにコメントアウトしています。unfollowもすぐには実行しなくてよいのでコメントアウトにしています。

 

コメント

タイトルとURLをコピーしました