2009年10月24日土曜日

NetWalkerでPythonでtwitterのつぶやきを取得の補足

先月9月28日のエントリーNetWalkerでPythonでtwitterのつぶやきを取得で、Pythonを使ってtwitterのつぶやきをテキストファイルに落とす方法を書きました。実際に自分でばんばんしたスクリプトでつぶやき落としたいという人はあまり居ないかもしれません。(私はマジです。この方法で自分の独り言落として、10年保管します。10年後に眺めてニタニタします。)
ところが、実際に自作のスクリプトでtwitter APIを実行してみると、途中で終わってしまってつぶやきが落とせない事が良くあります。
まず、API実行回数は、一時間に100回までらしい。マジですか? いや、ほんとらしいです。なんかコンピューターがやってると考えると回数が一桁小さいような気もします、人が手でやってんの?みたいな回数。いや使わせて頂いている身でこんな事を言ってはいけませんね。うちの周りなんかバスの本数が一時間に3本ですよ。twitter十分太っ腹です。
あと、混んでいるせいなのか、落ちてくる件数が黙って少なくなってそこで終わっちゃう事が良くあります。こういうところクラウドっぽいですね。あなたの相手はクラウドの向こうに居るのです。少年犯罪とかで名前が出ないのと一緒、いや大分違うか。

さて、以上の様な事があるので、私はPythonのスクリプトをちょこちょこ変更して、独り言を落としています。本日はそこらへんの追加情報を書きます。
まず、デフォルトの一回20件ですと、API呼び出し回数が増えてしまうため、count引数を付けます。最大200までいけるそうです。例では一回100件にしています。

r=urllib2.urlopen('http://'+host+'/statuses/friends_timeline.xml?count=100&page='+str(i))

注:ソースの右側が切れていますがコピーペーストすればちゃんと出る様です
str(i)は、iページ目を取得のiを文字列化(str関数)してます。前回のプログラムがそういう仕様なので。count=100にすると、ちゃんと1ページ100ステータスでページ計算してくれている様です。と、いいつつ最初の100件目の境界しかまだチェックしてないですが。


さて、取得は新しいステータスから落ちてきますので、途中で止まってしまった場合は、max_id引数を指定して、指定id以前のメッセージ取得を別のファイル名に保管で再チャレンジします。再チャレンジは出来れば一時間経ってからの方がいいですね。コーヒー一服コースだと足りないので、コーヒー飲んで風呂入ってマンガ一冊くらいでしょうか。
指定は、例えばさっきの取得が途中で終わってしまって取得出来た最後の行が
「173 5096739816 pridonjp Fri Oct 23 22:40:17 2009 にんにくマニア紙皿爪楊枝で食べてたら楊枝滑ってひっくり返してしまいました...この匂いは何日経ったら消えるのでしょうか。」だったとしたら、そのid以前のステータスを取得したいので、以下の様に変更して再チャレンジします。

r=urllib2.urlopen('http://'+host+'/statuses/friends_timeline.xml?count=100&page='+str(i)+'&max_id=5096739816')


以上、先日こちらのブログ観測気球:Twitter API 仕様書 (勝手に日本語訳シリーズ)を見つけたおかげで出きるようになりました。感謝です。ブログ主さんの本「Twitter!―Twitter APIガイドブック」も持っておりますよ。

0 件のコメント:

コメントを投稿