月別アーカイブ: 2013年1月

python-twitterで遊んだ。

ちょっとした興味で作った駄作について。

ちょっとコミケに遊びに行こうと思い、そのモバイル環境でTLが取得できないことを予測。使用しているモバイル環境がdocomo系MVNOのものなのでdocomoの比率の高さに加えて本家に潰される可能性がある。

で、VPSでTLを取得してメールで送りつければ良いのではという考えで作ったもの。

10秒に1回、自分のタイムラインを直近100件読み込んで、古いものから順にidを調べ、既に書き出しているものより大きいものをファイルに書き出すというもの。

import sys
import codecs
import time
import twitter

api = twitter.Api(consumer_key='適切な文字列', consumer_secret='適切な文字列', access_token_key='適切な文字列', access_token_secret='適切な文字列', cache=None)

tmp = 0

timeline = api.GetFriendsTimeline('@以下の文字列', 100, 0, 0, True, True)
timeline.reverse();
f = open("1.log","w")
f = codecs.getwriter('utf-8')(f)
for tweet in timeline:
	f.write('\n%s(%s)\n%s\n.' % (tweet.user.name, tweet.user.screen_name, tweet.text))
	if tmp < tweet.id:
		tmp = tweet.id
f.close();

while 1:
	time.sleep(120)
	timeline = api.GetFriendsTimeline('@以下の文字列', 100, 0, 0, True, True)
	timeline.reverse();
	f = open("1.log","a")
	f = codecs.getwriter('utf-8')(f)
	for tweet in timeline:
		if tmp < tweet.id:
			tmp = tweet.id
			f.write('\n%s(%s)\n%s\n.' % (tweet.user.name, tweet.user.screen_name, tweet.text))
	f.close();

また、取得したファイルを送りつけるようなシェルスクリプトを準備して回した。

#!/bin/zsh
while true
do
	export aaaa=`date +"%Y.%m.%d-%T"`
	mail -s $aaaa 送信先のメールアドレス < ./1.log
	rm -f ./1.log
	sleep 5m
done

出力されたファイルをリダイレクトでmailコマンドに放り込み、送信した時間を件名に埋め込んだだけの何か。送った後5分間休むので5分間隔で送りつけてくれる。cronを初めて使ったら添付ファイルになったので急遽作った。何が悪かったのかは今後。

この2つを借りているVPSで起こしたscreenの下で実行。5分間隔というのが少し短くて時々苛立ったが取得漏れ以外は追いかけることが可能だったのである程度重宝した。

メールでの通知は止めたがpythonのコードの方はその後も無駄に動かし続けている。10秒間隔が悪いのかは不明だが1日とか8時間とかで倒れてしまう現象が発覚。python-twitter側でエラーが起きて倒れるのでライブラリ自体が不穏な可能性もあるがとりあえず120秒間隔で取得するようにしたところ3日動き続けている。

pyhonなにそれという状態からライブラリを探しTwitterでアプリの登録をしてTLを吐き出すコードを書き、mailコマンドを適当に叩くところまでで4時間というので適当だがこういう駄作でもなにか作るとある程度調べるから悪くない。