talosのプログラミング教室

【Python】Twitter APIで一方的にフォローしている人を洗い出して自動フォロー解除する

スポンサーリンク

こんにちは。talosです。

TwitterなどのSNSで一方的にフォローしているのって悲しいですよね。

だからと言って一人ひとり解除するのは面倒くさい…

なのでTwitter APIを使って一方的にフォローしている人を洗い出し、フォロー解除します。

環境

言語:Python
ライブラリ:tweepy

事前準備

Twitter APIの申請をしてある必要があります。

申請の方法はGoogleで調べればいくらでも出てくるのでここでは触れません。

方針

1.フォローしている人とフォロワーをリストアップする

2.1で作成したリストを比較してフォローしている人のリストにだけ存在する人をリストアップする

3.2で作成したリストのユーザーをフォロー解除する

フォローしている人とフォロワーをリストアップする

CK、CS、AT、ASにはそれぞれご自身で取得したAPI KEY、API secret key、Access token、Access token secretを入れてください。

また、「フォロワー取得」と「フォローしている人取得」で呼んでいるtweepy.Cursor()のidのところにご自身のアカウント名(@からはじまるやつ)を入れてください。

CSV出力」をするフォルダはご自身の環境に合わせて決めてください。

import tweepy
import pandas as pd

CK = '****'    # API KEY
CS = '****'    # API secret key
AT = '****'    # Access token
AS = '****'    # Access token secret

auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth, wait_on_rate_limit=True)

cols = ['id']
# フォロワー格納用DataFrame
followers_ids = pd.DataFrame([], columns=cols)
# フォローしている人格納用DataFrame
followings_ids = pd.DataFrame([], columns=cols)

# フォロワー取得
itr = tweepy.Cursor(api.followers_ids, id='****', cursor=-1).items()   
for follower_id in itr:
    record = pd.Series([follower_id], index=followers_ids.columns)
    followers_ids = followers_ids.append(record, ignore_index=True)

# フォローしている人取得
itr = tweepy.Cursor(api.friends_ids, id='****', cursor=-1).items()   
for following_id in itr:
    record = pd.Series([following_id], index=followings_ids.columns)
    followings_ids = followings_ids.append(record, ignore_index=True)

# CSV出力
followers_ids.to_csv('../csv/followers.csv')
followings_ids.to_csv('../csv/followings.csv')

これを実行するとフォロワーのIDをリスト化したCSVファイルとフォローしている人のIDをリスト化したCSVが作成されます。

フォロワーのリスト
f:id:talosta:20210114163212p:plain

フォローしている人のリスト
f:id:talosta:20210114163358p:plain

なおここでいうIDはアカウント名とは異なります。

現時点ではIDが誰のものかわかりませんが、後ほどわかるのでここでは置いておきます。


スポンサーリンク



一方的にフォローしている人をリストアップする

こちらもフォルダを三か所で指定しているので、ご自身の環境に合わせて修正してください。

import tweepy
import pandas as pd

CK = '****'    # API KEY
CS = '****'    # API secret key
AT = '****'    # Access token
AS = '****'    # Access token secret

auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth, wait_on_rate_limit=True)

# フォロワーのリストを読み込む
followers_ids = pd.read_csv('../csv/followers.csv', index_col=0)
# フォローしている人のリストを読み込む
followings_ids = pd.read_csv('../csv/followings.csv', index_col=0)

# 一方的にフォローしている人格納用DataFrame
oneside_follow = pd.DataFrame([], columns=['id', 'name', 'screen_name', 'description'])

# フォローしている人リストに存在していてフォロワーリストに存在していないユーザーを抽出
for following_id in followings_ids['id']:
    if following_id not in followers_ids['id'].values:
        # ユーザーの情報を取得
        user = api.get_user(following_id)
        record = pd.Series([user.id, user.name, user.screen_name, user.description], index=oneside_follow.columns)
        oneside_follow = oneside_follow.append(record, ignore_index=True)

# CSV出力
oneside_follow.to_csv('../csv/oneside_follow.csv')

これを実行すると一方的にフォローしている人の情報をリスト化したCSVが作成されます。

f:id:talosta:20210114164911p:plain

IDだけでなくユーザー名やアカウント名、自己紹介文も出力するようにしたので、確認してフォロー解除したくない人は消しておきましょう。

一方的にフォローしている人をフォロー解除する

こちらもフォルダを二か所で指定しているので、ご自身の環境に合わせて修正してください。

import tweepy
import pandas as pd

CK = '****'    # API KEY
CS = '****'    # API secret key
AT = '****'    # Access token
AS = '****'    # Access token secret

auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth, wait_on_rate_limit=True)

# 一方的にフォローしている人リストを読み込む
oneside_follow = pd.read_csv('../csv/oneside_follow.csv', index_col=0)

# フォロー解除済みユーザー格納用DataFrame
removed_users = pd.DataFrame([], columns=['id', 'name', 'screen_name', 'description'])

# フォロー解除
for remove_id in oneside_follow['id']:
    user = api.destroy_friendship(remove_id)
    record = pd.Series([user.id, user.name, user.screen_name, user.description], index=oneside_follow.columns)
    removed_users = removed_users.append(record, ignore_index=True)

# CSV出力
removed_users.to_csv('../csv/removed_users_'+ datetime.datetime.now().strftime('%y%m%d%H%M%S') + '.csv')

これを実行するとフォロー解除し、フォロー解除したユーザーのリストを作成します。

f:id:talosta:20210114171129p:plain

実際にフォローが外れているか確認してみてください。

おわりに

Twitter APIの申請は大変ですがぜひ試してみてください。