LoginSignup
1
2

More than 3 years have passed since last update.

Twitter API:こっちがフォローしてるのにフォローバックしてくれてないアカウント一覧の取得

Last updated at Posted at 2021-02-05

Twitter API:こっちがフォローしてるのにフォローバックしてくれてないアカウント一覧の取得

"お別れはブロックで"
"お別れはブロ解で"
"リムるならフォローするな!"
の意味がやっとわかりました今日この頃です。

前記事【ボツ】Twitter API:フォローしているがフォローバックされてないアカウント一覧の取得のtweepyを使ったやり方がぜんぜんうまく働かないのでtweepyやめて作り替えた。

コード

以下のコードをget_notFollwingFriends.pyなど任意の適当なファイル名で保存する。

# ライブラリインポート
import json
from requests_oauthlib import OAuth1Session

# APIキー&トークン設定
ConsumerAPIKey = ''
ConsumerAPIsecretkey = ''
AccsessToken = ''
AceestokenSecret = ''

# 対象アカウント設定
AccountUserId = ''

# フォロワーとフォロイング格納リスト
GetFollowersList = []
GetFriendsList = []

# フォロワーさんになっていないフォロイングさん格納リスト
GetNotFollowingFriedsList = []

# フォロワーを取得してリストする関数
def getFollowers():
    # フォロワー取得パラメータ設定
    Cursor = '-1'   
    GetFollowersIdsApiSession = OAuth1Session(ConsumerAPIKey, ConsumerAPIsecretkey, AccsessToken, AceestokenSecret)
    GetFollowersIdsApiUrl = 'https://api.twitter.com/1.1/followers/ids.json'

    while  Cursor != '0':
            GetFollowersIdsParameters = {
                    'user_id' : AccountUserId
                    ,'screen_name' : ''
                    ,'cursor' : Cursor
                    ,'stringify_ids' : ''
                    ,'count' : '10000'
            }

            # フォロワー取得
            GetFollowersIdsResponse = GetFollowersIdsApiSession.get(GetFollowersIdsApiUrl, params = GetFollowersIdsParameters)

            # 取得成功時はカーソルを進める
            if GetFollowersIdsResponse.status_code == 200:
                    GetFollowersIdsResult = json.loads(GetFollowersIdsResponse.text)
                    GetFollowersList.extend(GetFollowersIdsResult['ids'])
                    Cursor = GetFollowersIdsResult['next_cursor_str']
            else:
                    print(GetFollowersIdsResponse)
                    exit()


# フォロイングを取得してリストする関数
def getFriends():
    # フォロイング取得パラメータ設定
    Cursor = '-1'
    GetFriendsIdsApiSession = OAuth1Session(ConsumerAPIKey, ConsumerAPIsecretkey, AccsessToken, AceestokenSecret)
    GetFriendsIdsApiUrl = 'https://api.twitter.com/1.1/friends/ids.json'
    while  Cursor != '0':
            GetFriendsIdsParameters = {
                    'user_id' : AccountUserId
                    ,'screen_name' : ''
                    ,'cursor' : Cursor
                    ,'stringify_ids' : ''
                    ,'count' : '10000'
            }

            # フォロイング取得
            GetFriendsIdsResponse = GetFriendsIdsApiSession.get(GetFriendsIdsApiUrl, params = GetFriendsIdsParameters)

            # 取得成功時はカーソルを進める
            if GetFriendsIdsResponse.status_code == 200:
                    GetFriendsIdsResult = json.loads(GetFriendsIdsResponse.text)
                    GetFriendsList.extend(GetFriendsIdsResult['ids'])
                    Cursor = GetFriendsIdsResult['next_cursor_str']
            else:
                    print(GetFriendsIdsResponse)
                    exit()


# リスト作成関数実行
getFollowers()
print('【フォロワー数】' + str(len(GetFollowersList)))

getFriends()
print('【フォロイング数】' + str(len(GetFriendsList)))



# 本処理_こっちがフォローしてるIDの中から、こっちをフォロバしてないものだけを抜き取る
for friend in GetFriendsList:
    if friend not in GetFollowersList:
        # 抜き取ったIDをscreen_nameに変換する
        GetUsersShowApiSession = OAuth1Session(ConsumerAPIKey, ConsumerAPIsecretkey, AccsessToken, AceestokenSecret)
        GettUsersShowApiUrl = 'https://api.twitter.com/1.1/users/show.json'
        GetUsersShowParameters = {
            'user_id' : friend
        }
        GetUsersShowResponse = GetUsersShowApiSession.get(GettUsersShowApiUrl,params = GetUsersShowParameters)
        if GetUsersShowResponse.status_code == 200:
            GetUsersShowResult = json.loads(GetUsersShowResponse.text)
            GetNotFollowingFriedsList.append(GetUsersShowResult['screen_name']) #extendじゃダメ
# print('こっちがフォローしてるのに (`A´).フォロワーさんになっていないユーザー名:' + str(GetUsersShowResult['screen_name']))


print('GetNotFollowingFriedsList一覧:' + str(GetNotFollowingFriedsList))

使い方

  1. APIキー&トークン設定で、自分のツイッター開発者アカウントのAPIキーおよびトークンを設定。
    例:
    ConsumerAPIKey = 'XxXx0xXxxxX8xXxxxxX3755XX'
    ConsumerAPIsecretkey = 'x39xXxxXXX3xXXXxx3XxXx4xX4XX7XxXxXXx0xxxXX5xxXXXXx'
    AccsessToken = '999999999999999999-XxXX6Xxxx3xxxxXxxxXXXxxX5XXXX3'
    AceestokenSecret = '9xxXXX6xxXxxX2X4XxxX1xXzxxxxxx5x1Xxx68xxx3xXX'

  2. 対象アカウント設定で、自分のTwitterアカウント(screen_name)を設定。
    例:
    AccountUserId = 'myself'

  3. プログラムを実行する。python get_notFollwingFriends.py

  4. 結果は以下のように一覧表示される。
    image.png

コード解説

  1. 関数getFollowers():followers/ids APIを使ってフォロワーさんのID一覧をGetFollowersListに格納する。
  2. 関数getFriends():friends/ids APIを使ってフォローしているアカウント(以下フレンド一覧)のID一覧をGetFriendsListに格納する。
  3. For文を使って、フレンド一覧の中でフォロワーになっていないアカウントを弾き出してfriend変数に格納していきながら…
  4. そのIDをusers/show APIを使ってscreen_nameに変換していく。
  5. 変換されたscreen_nameをGetNotFollowingFriedsListリストに格納していく。
  6. For文を抜けたら、最後にGetNotFollowingFriedsListリストをprintで一覧表示。

※ パラメーターの'count'は自分のフォロワー数、フレンド数に合わせて調節する。

※ あとは一覧表示されたscreen_nameをひとつひとつ確認しながら手作業でリムっていく。フォロワー数が10万とかになったらリムるのも自動化するかもしれない。

参考

StackOverflow - Get username by id in Twitter Api
【Python3】【TwitterAPI】PythonでフォロワーのIDを全件取得(GETfollowers/ids)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2