【Python】Twitter APIで一方的にフォローしている人を洗い出して自動フォロー解除する
スポンサーリンク
こんにちは。talosです。
TwitterなどのSNSで一方的にフォローしているのって悲しいですよね。
だからと言って一人ひとり解除するのは面倒くさい…
なのでTwitter APIを使って一方的にフォローしている人を洗い出し、フォロー解除します。
環境
言語:Python
ライブラリ:tweepy
方針
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が作成されます。
フォロワーのリスト
フォローしている人のリスト
なおここでいう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が作成されます。
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')
これを実行するとフォロー解除し、フォロー解除したユーザーのリストを作成します。
実際にフォローが外れているか確認してみてください。