【Tweepy】ランダムでフォロワーさんを紹介するプログラム[Python]

  • URLをコピーしました!
目次

Tweepy

前回、Twitter制御ライブラリTweepyを使って、リツイート・リプライ・メンションをくれた方へ感謝ツイートプログラムのバグを修正しました。

今回はTweepyを使った新たなプログラム、ランダムフォロワーさん紹介プログラムを作ってみたいと思います。

流れとしては、

  1. 現在のフォロワーさんのIDを取得
  2. ランダムで特定の人数を抽出
  3. ツイートする

という感じです。

流れだけ書くと簡単そうに見えますが、思ったより簡単に作れました。

ということでまずはプログラム全体から見ていきましょう。

プログラム全体

<セル1>

import tweepy
import datetime
import random

account = "@Nori_3PySci"

n_people = 10

time_now = datetime.datetime.now()

consumer_key = 'API keyを入力'
consumer_secret = 'API key secretを入力'
access_token = 'Access tokenを入力'
access_token_secret = 'Access token secretを入力'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth, wait_on_rate_limit = True)
<セル2>

def follower_listing(account):
    
    follower_id_all = tweepy.Cursor(api.followers_ids, id = account, cursor = -1).items()
    
    f_list = []
    
    for follower_id in follower_id_all:
        f_list.append(follower_id)
    
    return f_list
<セル3>

def get_name(id_list):
    
    n_list = []
    
    for user_id in id_list:
        n_list.append("@" + api.get_user(user_id).screen_name)
        
    return n_list
<セル4>

def intro_tweet(intro_name_list, n_people, time_now):
    tweet_content = '\n\n'.join(intro_name_list)
    api.update_status("(APIテスト中)\n毎日、ランダムでフォロワーさん" + str(n_people) + "人紹介!\n\n" + tweet_content + "\n\n" + time_now.strftime("%Y/%m/%d %H:%M:%S") + "\n\n#フォロー感謝砲")
<セル5>

def main(account, time_now, n_people):
    followerlist = follower_listing(account)
    intro_id_list = random.sample(followerlist, n_people)
    intro_name_list = get_name(intro_id_list)
    intro_tweet(intro_name_list, n_people, time_now)
<セル6>

if __name__ == '__main__':
    main(account, time_now, n_people)

それでは順番に見ていきましょう。

<セル1>API接続

最初のセルはTwitter APIへの接続です。

ほぼ前回と同じですが、3箇所変わっています。

まずは「randomモジュール」をインポートしています。

import random

次に紹介する人数を定義しています。

n_people = 10

最後にAPI接続部分で「wait_on_rate_limit = True」を追加しています。

api = tweepy.API(auth, wait_on_rate_limit = True)

これによりAPIの呼び出し回数が超過してしまった場合、使えるようになるまでプログラムを停止してくれるようになります。

何度も確認のため、接続していると利用制限に引っかかってしまったため、追加しました。

<セル5>main関数

まずは大まかな流れを見るために<セル5>のmain関数部分を見ていきましょう。

最初に全フォロワーのIDのリストを取得します。

followerlist = follower_listing(account)

次に全フォロワーのIDのリストから紹介する人数分のフォロワーをランダムに抽出し、新たなリストに格納します。

intro_id_list = random.sample(followerlist, n_people)

取得したフォロワーのIDは数字のIDになっているので、IDからアカウント名を取得します。

intro_name_list = get_name(intro_id_list)

最後に紹介ツイートを行います。

intro_tweet(intro_name_list, n_people, time_now)

それでは各関数を解説していきましょう。

<セル2>全フォロワーのリスト取得

<セル2>は全フォロワーのリストを取得する関数です。

tweepyでフォロワーのIDを取得するには「api.followers_ids」を使いますが、「Cursor」を使うことで繰り返しフォロワー全員のIDを取得します。

follower_id_all = tweepy.Cursor(api.followers_ids, id = account, cursor = -1).items()

ただリスト形式で得られるわけではなく、「tweepy.cursor.ItemIterator」というTweepy独自の形式のようです。

それをリスト形式にするために、一人一人、「tweepy.cursor.ItemIterator」から抜き出して、リストに移し替えていきます。

    f_list = []
    
    for follower_id in follower_id_all:
        f_list.append(follower_id)

最後に「return f_list」でリストを返します。

<セル3>IDからアカウント名への変更

全フォロワーのIDを取得したのち、main関数の内部で紹介する人数のIDをランダムに抽出しています。

intro_id_list = random.sample(followerlist, n_people)

そして抽出されたフォロワーのリストを次の関数「get_name」に渡しています。

「get_name」はIDからアカウント名へ変更する関数です。

IDからアカウント名は「api.get_user(user_id).screen_name」とすることで取得できます。

一つずつリストからIDを取り出し、アカウント名に変更し、新たなリスト「n_list」に格納し、最後にそれを返します。

    n_list = []
    
    for user_id in id_list:
        n_list.append("@" + api.get_user(user_id).screen_name)
        
    return n_list

注意する点としてはアカウント名を取得する際、「”@” + api.get_user(user_id).screen_name」とすることで、頭に「@」を追加しています。

これはツイートする際に@がついていないとただの文字の羅列になってしまい、メンションとならないためです。

<セル4>ツイート

<セル4>はツイートをする関数です。

アカウント名を2回の改行(’\n\n’)を含めつつ、結合します。

tweet_content = '\n\n'.join(intro_name_list)

そして「api.update_status」でツイートします。

プログラムを実行してみた

実行してみた感じはこんな感じです。

ちゃんと10人紹介されています。

あとは前のリプRT感謝砲と同様、サーバーにアップロードして、cronでの定期実行を設定すれば完了です。

紹介する人数だったり、定期実行する間隔を調整して、みんなが相互に繋がれるように、でも多すぎて迷惑にならないようにしていくことが必要かなと思います。

このプログラムはGitHubでも公開していますので、よかったらそちらもどうぞ。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次