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





以前、一度twitter APIによるフォロー自動化ツールを作成しました。
今回は、さらにアンフォロー化を実装したプログラムを記載したいと思います。

 


汎用性の広いPythonを0から習得するためのフロー及び実際にPythonで開発を行い開発案件を獲得するまでの筋道について解説しているチュートリアル資料と

コーディングの参考となる実際にPythonを使って作ったツールのソースコードを無料で配布していますので、こちらも併せてご覧ください。

初心者・入門者でも30日間で学習できるおすすめPython学習方法

 


おすすめのプログラミングスクールの比較・特徴をまとめた記事を執筆しております。

挫折することなく一直線にエンジニアを短期集中で目指している人はこちらから確認してください。

【比較表・無料体験あり】おすすめのプログラミングスクール3選!オンライン学習で完結!

 

自動化プログラムのための準備

以下に、以前作成したフォロー自動化ツールの記事を載せておきますので、興味のある方は一読して頂けると幸いです。

【Python】twitterでの検索キーワードからフォロー自動化

 

必要なモジュール

今回作成するツールも、APIに使用するキーを取得していることを前提に進めていきます。
今回利用するモジュールは、、、

・tweepy
・time

 

上記で挙げたモジュールをインポートして利用していきます。
それでは、ファイルエディタウィンドウを開いて、任意の名前.pyのファイルを作成・保存してください。

 

フォロー・アンフォロー自動化ツール

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

    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

ここでは、APIに使用するキーをそれぞれ取得し、利用できるよう変数に格納しています。こういったAPIに関するプログラムでは馴染みのものですね。

 

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

ここでは、アンフォローに関する関数を定義しています。
それぞれ引数として、api, followes, friendsといった変数を用いています。unfollow_cntをif文の分岐に対する変数として考慮して、実装しています。

 

def follow(keyword, a_cnt):
	follow_cnt = 0
	# 検索ワードと追加フォロー数をセットし検索実行
	search_results = api.search(q=keyword, count=a_cnt)
	for result in search_results:
		if follow_cnt <= a_cnt:
			try:
				screen_id = result.user._json["screen_name"]
				api.create_friendship(screen_id)
				print("{0}をフォローしました。" .format(screen_id))
				time.sleep(2)
				follow_cnt += 1
			except tweepy.error.TweepError:
				print("フォローが失敗しました。")
	return follow_cnt

ここでは、フォローに関する関数を定義しています。それぞれ引数として、keyword, a_cntといった変数を用いています。

また、関数として定義した内容として参考URLの記事で説明しているため、興味のある方は一読してみてください。

 

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)
    keyword = input("検索ワード:")
    a_count = input("追加フォロー数:")
    a_cnt = int(a_count)
    choice = input("フォローを実行しますか? [y/N]: ").lower()
    if yes_no_input(choice):
        f_cnt = follow(keyword, a_cnt)
    print('{}人をフォロー解除、{}人をフォローしました。'.format(u_cnt,f_cnt))
    input()

ここでは、処理に関するコードを記載しています。yes_no_input関数の定義内容について、下記に記載した処理でのchoice変数の値によって処理を実行するかしないか判断するものとなっています。

それぞれyes_no_input関数で処理選択を行ったのち、自動化機能の関数に関して必要な変数を決定しています。

 

★ follow-unfollow.py ★

import tweepy
import time

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

    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 <= 100:
               api.destroy_friendship(f)
               print("{0}のフォローを解除しました。".format(api.get_user(f).screen_name))
               time.sleep(2)
               unfollow_cnt += 1
            else:
                print('一度に解除可能な人数に達したため処理を中断します。')
                break
    return unfollow_cnt

def follow(keyword, a_cnt):
	follow_cnt = 0
	# 検索ワードと追加フォロー数をセットし検索実行
	search_results = api.search(q=keyword, count=a_cnt)
	for result in search_results:
		if follow_cnt <= a_cnt:
			try:
				screen_id = result.user._json["screen_name"]
				api.create_friendship(screen_id)
				print("{0}をフォローしました。" .format(screen_id))
				time.sleep(2)
				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)
    keyword = input("検索ワード:")
    a_count = input("追加フォロー数:")
    a_cnt = int(a_count)
    choice = input("フォローを実行しますか? [y/N]: ").lower()
    if yes_no_input(choice):
        f_cnt = follow(keyword, a_cnt)
    print('{}人をフォロー解除、{}人をフォローしました。'.format(u_cnt,f_cnt))
    input()

 

出力結果

 

 

それでは!!

 

 



ABOUTこの記事をかいた人

sugi

大学卒業後、IT企業に就職を果たす。システム開発・人工知能に触れながら大手企業と業務をこなす。2年半後脱サラし、現在フリーランス活動中。 2019年2月から起業する予定。 自社サービス及び製品を開発し、売り上げを立てている。