tweepy
PythonのTwitter API制御ライブラリtweepyを使って、おはよう戦隊のハッシュタグを検索し、条件に合うアカウントを抽出してみました。

今回はtweepyを使って、フォロワー情報をまとめて、さらにJSON形式で保存してみます。
そして次回はそのJSON形式で保存したデータを、CSVに書き換え、人間が簡単に読めるようにしてみましょう。
ちなみに今回出力するJSONファイルはこんな感じです。
{
"アカウントID": {
"lastupdate": "データを追加・更新した日時",
"screen_name": "アカウント名",
"follows": フォロー数,
"followers": フォロワー数,
"no_tweets": 総ツイート数,
"no_favourites": 総いいね数,
"following": 自分がフォローしているかどうか,
"protected": 鍵アカウントかどうか
}
}
それでは始めていきましょう。
プログラム全体
まずはプログラム全体をお見せします。
import os
import tweepy
import json
import datetime
num_listing_followers = 200
timenow = datetime.datetime.now()
timenow_str = timenow.strftime('%Y%m%d_%H%M%S')
json_filename = 'followerlist.json'
default_dirpath = r" pythonプログラムがあるパス "
json_filepath = os.path.join(default_dirpath, json_filename)
# print(default_dirpath)
# print(json_filename)
#For Twitter API
account = "@account_name"
consumer_key = ' consumer key '
consumer_secret = ' consumer 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)
def getfollowerlist():
followerlist = api.followers_ids(account)
return followerlist
def getfollowerinfo(followerlist):
with open(json_filepath, 'r') as json_in:
json_dic = json.load(json_in)
noupdateids = []
for followedid in json_dic.keys():
last_update = datetime.datetime.strptime(json_dic[followedid]['lastupdate'], '%Y%m%d_%H%M%S')
if last_update >= (timenow - datetime.timedelta(days=14)):
noupdateids.append(followedid)
i = 0
for followerid in followerlist:
if not str(followerid) in noupdateids:
user = api.get_user(followerid)
json_dic[user.id_str] = {'lastupdate':timenow_str, 'screen_name':user.screen_name, 'follows':user.friends_count,
'followers':user.followers_count, 'no_tweets':user.statuses_count, 'no_favourites':user.favourites_count,
'following':user.following, 'protected':user.protected}
if i >= num_listing_followers:
with open(json_filepath, 'w') as json_out:
json.dump(json_dic, json_out, indent=4, ensure_ascii=False)
break
else:
i = i + 1
def main():
followerlist = getfollowerlist()
getfollowerinfo(followerlist)
if __name__ == '__main__':
main()
設定部分
まずは設定部分からです。
import os
import tweepy
import json
import datetime
num_listing_followers = 200
json_filename = 'followerlist.json'
timenow = datetime.datetime.now()
timenow_str = timenow.strftime('%Y%m%d_%H%M%S')
default_dirpath = r" pythonプログラムがあるパス "
json_filepath = os.path.join(default_dirpath, json_filename)
# print(default_dirpath)
# print(json_filename)
#For Twitter API
account = "@account_name"
consumer_key = ' consumer key '
consumer_secret = ' consumer 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)
インポートするのは、「os」、「tweepy」、「json」、「datetime」の4つです。
状況によって変更するだろう設定はこちらの2つ。
num_listing_followers = 200
json_filename = 'followerlist.json'
最初の「num_listing_followers」は1回の実行で何人のフォロワー情報を取得し、まとめるかになります。
Twitter APIに限らず、ほとんどのAPIは一定時間内に使用できる回数が決まっており、それを超えると一定時間APIに接続できなくなったり、料金が発生したりします。
とりあえず200人程度の情報は一度に取得できたので、200としています。
私の場合は1日に200人もフォローすることはまれなので、これで十分です。
「json_filename」は出力するJSONファイルの名前です。
次の部分は自動で設定される部分です。
timenow = datetime.datetime.now()
timenow_str = timenow.strftime('%Y%m%d_%H%M%S')
default_dirpath = r" pythonプログラムがあるパス "
json_filepath = os.path.join(default_dirpath, json_filename)
最初の2行が時間の取得と文字列への変換、後の2行がデフォルトのファイルパス(Pythonプログラムを動かしているファイルパス)とJSONファイルのパスの作成です。
ちなみに「default_dirpath」はこのプログラムをローカル環境で使う場合は「os.getcwd()」でも大丈夫です。
後の部分はTwitter APIへの接続部分なので、今回は説明を省略します。
Twitter APIへの接続に関してはこちらの記事で解説していますので、よかったらどうぞ。

これで設定部分に関しては完了です。
フォロワーリストの取得
次にフォロワーのリストを取得していきます。
それがこちらの部分。
def getfollowerlist():
followerlist = api.followers_ids(account)
return followerlist
「api.followers_ids(‘フォロワーリストを取得したいアカウント’)」で取得できます。
ただしここで得られるのはフォロワーのIDだけですので注意してください。
フォロワーの情報の取得
次に取得したフォロワーのIDからフォロワー情報を取得していきます。
def getfollowerinfo(followerlist):
with open(json_filepath, 'r') as json_in:
json_dic = json.load(json_in)
noupdateids = []
for followedid in json_dic.keys():
last_update = datetime.datetime.strptime(json_dic[followedid]['lastupdate'], '%Y%m%d_%H%M%S')
if last_update >= (timenow - datetime.timedelta(days=14)):
noupdateids.append(followedid)
i = 0
for followerid in followerlist:
if not str(followerid) in noupdateids:
user = api.get_user(followerid)
json_dic[user.id_str] = {'lastupdate':timenow_str, 'screen_name':user.screen_name, 'follows':user.friends_count,
'followers':user.followers_count, 'no_tweets':user.statuses_count, 'no_favourites':user.favourites_count,
'following':user.following, 'protected':user.protected}
if i >= num_listing_followers:
with open(json_filepath, 'w') as json_out:
json.dump(json_dic, json_out, indent=4, ensure_ascii=False)
break
else:
i = i + 1
まずこれまでに保存したフォロワーのデータを読み込みます。
with open(json_filepath, 'r') as json_in:
json_dic = json.load(json_in)
そして読み込んだフォロワーの情報から、14日以内に登録・更新されたIDに関しては一度リストに格納します。
noupdateids = []
for followedid in json_dic.keys():
last_update = datetime.datetime.strptime(json_dic[followedid]['lastupdate'], '%Y%m%d_%H%M%S')
if last_update >= (timenow - datetime.timedelta(days=14)):
noupdateids.append(followedid)
この格納したIDは追加・更新しないようにプログラムします。
i = 0
for followerid in followerlist:
if not str(followerid) in noupdateids:
user = api.get_user(followerid)
json_dic[user.id_str] = {'lastupdate':timenow_str, 'screen_name':user.screen_name, 'follows':user.friends_count,
'followers':user.followers_count, 'no_tweets':user.statuses_count, 'no_favourites':user.favourites_count,
'following':user.following, 'protected':user.protected}
ここでは取得した現在のフォロワーのリストから一つずつIDを取り出し、追加・更新をしないIDのリストにないか確認します。
そしてもし追加・更新しないリストにない場合、「api.get_user(‘アカウントID’)」で情報を取得します。
今回取得する情報はこんな感じです。
アカウントID(str型) | user.id_str |
アカウント名 | user.screen_name |
フォロー数 | user.friends_count |
フォロワー数 | user.follower_count |
総ツイート数 | user.statuses_count |
総いいね数 | user.favourites_count |
自分がフォローしているかどうか | user.following |
鍵アカウントかどうか | user.protected |
これをIDをキーとした辞書にします。
次にJSONファイルに保存していきますが、その際にひと工夫が必要です。
if i >= num_listing_followers:
with open(json_filepath, 'w') as json_out:
json.dump(json_dic, json_out, indent=4, ensure_ascii=False)
break
else:
i = i + 1
実は先ほど現在のフォロワーリストからフォロワーIDを取得する前に「i = 0」としてカウンタを用意しています。
このカウンタは今回、JSONファイルに追加・更新する人数をカウントするためのカウンタです。
そのため追加・更新をしたあとにこのカウンタを一つ上げなければなりません。
またこのカウンタが一定数、今回の場合は「num_listing_followers」以上になった場合にJSONファイルを出力する必要があります。
ということで上記のように「if…else」を使って条件分岐しているというわけです。
これでフォロワー情報の取得は完了です。
あとはmain関数の処理だけなので、解説は割愛します。
これで最初に紹介したこのようなJSONファイルが得られます。
{
"アカウントID": {
"lastupdate": "データを追加・更新した日時",
"screen_name": "アカウント名",
"follows": フォロー数,
"followers": フォロワー数,
"no_tweets": 総ツイート数,
"no_favourites": 総いいね数,
"following": 自分がフォローしているかどうか,
"protected": 鍵アカウントかどうか
}
}
とりあえず保存するだけならこれでいいですが、情報は使ってなんぼです。
ということで次回はこのデータを使いやすいように加工し、CSVファイルとして保存しましょう。

ではでは今回はこんな感じで。
コメント