先日の Python hack-a-thon で作ってたやつ。他にもやってたけどそれは別の話。
俺のサブアカウントは普段ログインしないので返信とかあっても気づかない。なので IRC の BOT に返信が来たら通知する機能をつけた。Python-twitter 使ってます。
LOGFILE の中身は最後に取得した tweet の id 。
python-twitter にある GetReplies() の返り値を逆順にする方法が分からなかったので一旦リストに格納してから再度for文で回している。
def twitteratsillca():
import twitter
import os
import time
USER = 'username'
PASS = 'password'
LOGFILE = 'logfile.log'
while (1):
time.sleep(300)
if os.path.exists(LOGFILE):
log = open(LOGFILE).read()
if len(log) == 0:
maxid = 0
else:
maxid = int(log)
else:
maxid = 0
api = twitter.Api(USER,PASS)
tweet = []
for i in api.GetReplies():
if maxid < i.GetId():
tweet.append({'id':i.GetId(), 'user':i.GetUser().screen_name, 'text':i.GetT
ext()})
tweet.reverse()
for i in tweet:
url = 'http://twitter.com/%s/status/%s' % (i['user'], str(i['id']))
s = '%s:%s %s' % (i['user'], i['text'], url)
irc.notice(channel, s)
open(LOGFILE, 'w').write(str(i['id']))
文字コードの変換でコケタけどそれは PyIrc 自体を修正する。
chardet.detect() には unicode ではなく string を渡さないといけないようだ。 unicode を入れると UnicodeWarning が出たり出なかったり、結果の encoding が ascii と判断されたりする。