にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

Twitterのフォローが減ってることがあるので、フォローのリストをログとして記録したい

Twitterのフォローが減ってることがある。
退会や凍結によりアカウントが消えたか、あるいはブロックされたかのどちらかだろうと思うが、今まで購読していたものが購読できなくなって、それが把握できないというのは切ない。
なので、Twitterのフォローのリストを定期的に取得しておいて、フォローが減ったときなどに比較して比べて、減ったフォローを確認したい。定期的と言ってもフォローの数が変化した時に取得しておけばよい。ひょっとしたらブロックされたことがわかってひどく凹むことになるのかもしれないが……。

手法

さて、Twitterにおいて、@で始まるユーザ名("screen_name")は変更することができる。一方で、ユーザには内部で一意の番号が振られていて("id")、こちらは、ユーザ名が変わっても変わらないはずである。
なので、idの集合を定期的に記録しておけば、フォローの変化を追跡することができる。また、ユーザー名が変更された場合もそれを把握できる。

idだけの取得であればGET friends/idsでいけるが、今回はscreen_nameなども欲しいのでGET friends/listを使う。


取得したユーザのリストデータを保存する際、辞書オブジェクトであるから簡単に考えるとpickleなどで保存するということが考えられる。一方でpickleで保存するとpythonのバージョンが上がったときなどで互換性がなくなる場合があり(2->3とかだめだった気がする)、CSVJSONなどの汎用フォーマットを用いた方が良さそう。今回はJSONでダンプする。


実装にはPython Twitter APIを使った。これは pip install twitter で導入できる。

取得のためのコードを次に示す。
同じフォルダに'consumerkey'という、"<Consumer Key>[改行]<Consumer Secret>[改行]"という様なTwitter API Keyを記録したファイルを置いて実行する。Twitter API Keyはhttps://apps.twitter.com/でAppを作成すると発行できる。


自分がフォローしているユーザが数百なので、API制限など考えずに作成した。もし3000以上のユーザをフォローしている場合だとAPI制限に引っかかることになると思う。

比較

要するにユーザーのidの集合について比較し、差集合を計算すればよい。
ユーザーのidをキーとする辞書オブジェクトを作っておけば、ユーザー名などを引くことができる。

以下にコードを挙げる。

ちなみにこれをフォロワーの方で行ってフォロワーの推移を追跡することもできるが、やりたくないのでやらない。