#背景・実行環境
このあんちべさんによる記事をみて、
・Python3(3.5.1)
・Windows10(64bits)
・anacondaでpythonインストール
の環境で同じことをしようとした。
※anacondaはかなりたくさんの科学計算に関連したパッケージがセットになっているので便利ですね。condaとpythonだけの小さなパッケージもあります。
※anacondaをインストールしないと、networkxだとか、python-twitter以外にインストールしないといけないパッケージが複数になるので、けっこう面倒です。
追加で参照:
・http://www.slideshare.net/pika_shi/pythontwittertwitter
・http://d.hatena.ne.jp/hangyo22/20120430/1335786712
・http://blog.kzfmix.com/entry/1206780815
ネットで有益な情報を公開してくれる方々に感謝。
##Python-twitterのバージョン
とりあえず、2016/06/11にグラフを描くところまで行ったときに、使っているバージョンは、3.1です。API制限にひっかかりまくるので、3.1のソースを一部変更して、利用しました。
#ソース(一部)
基本は、あんちべさんのページを参照してください。
以下は、少し変更を加えているところです。
api = twitter.Api(consumer_key='***', #your_consumer_key,
consumer_secret='***', #your_consumer_secret,
access_token_key='***', #your_access_token_key,
access_token_secret='***', #your_access_token_secret,
input_encoding = "utf-8",
sleep_on_rate_limit=True)
#まず、Python-twitterをインストール。
anacondaでインストールしているので、condaでやりたかったが、python-twitterの2016/05現在の最新版 3.0rc1(Python v3に対応するよう変更が加えられているらしい)を入れられなかったので、pipを使う。
pip install python-twitter==3.0rc1
⇒2016/05/28現在、最新版は、3.1なので、
pip install python-twitter==3.1
になります。
※パッケージのバージョンなどは、pip searchとか、conda searchとかを利用して確認しています。
※最新のバージョンについては、python-twitterのgithubのページでドキュメント読んだり、pip install python-twitter==4.0
などと、存在しないことがGithubのドキュメントから事前にわかっているバージョンを入れてみることで表示されるメッセージで確認しています。
※python-twitterのバージョンは、https://python-twitter.readthedocs.io/en/latest/changelog.html
を見るのが早いですね。
conda list
でインストールされているパッケージ一覧が表示されるので、python-twitterがインストールされていることを確認。
python-twitterのバージョンが3.0rc1のときには、twitter.Api()の中で、input_encording='utf-8'があるとエラーになっていたが、バージョンが3.1になって解消された。
##Python-twitterの機能概要(一部)
GetFriendsとかすると、100人といわず、全員の情報を収集する動作のようです。ソースの動作確認などで、あまりたくさんの情報がいらないときは、twitter.Api()の中に、'total_count='で、上限を設定するといい。
あと、timeout=(デフォルト60秒)
とかの設定もあるので、回線が不安定だと設定を見なおしたほうがいいのかも。※よくわかっていません。
#プログラムの実行
結果としては、グラフ描画まで完了。次はグラフから意味ある結果を導くこと。これはまだ。
twitter.error.TwitterError: [{'message': 'Rate limit exceeded', 'code': 88}]
が出た。その対応として、sleep_on_rate_limit = Trueにしようとするも、__init__
でエラーだなんだとpython-twitter==3.0rc1では表示されていたが、2016/05/28現在最新の、3.1ではエラーが表示されなくなった。よって解決。
Python-twitterの、_RequestUrl()の中のtime.sleepする秒数の算出のところで、int()で小数点以下切り捨てになっているので、ここに余剰の数値を足して動作確認したが、ここだけの変更ではAPI呼び出し制限にひっかかることを回避できないので、あまり関係なさそう。
API制限を避けるために最終的に実施したのは、python-twitterのソースの一部変更。API残数0にちょうどなったときにsleepしている処理を、API残数 2以下になったらsleepするように変更した。
いまのところグラフ描画できているものの、結果に意味を見いだせないグラフになっている。理由としては、いろんな分野の方をフォローしすぎなのか、ネットワークグラフを描くときのアルゴリズムに一工夫必要なのか、いろいろ考えられるが現時点では不明。継続確認することとする。
##実行結果から得られたAPIリミットの避け方(概要)
・python-twitterのapi.pyを編集する。
-(これは効果がない可能性あり)time.sleep(int(...)+数秒)
-APIのremaining==0のときのみ、sleepするところのif文の条件をかえて、例えば2以下でsleepするようにする。