TwitterBot on GAEにReplyさせる(その2)

 前回
http://d.hatena.ne.jp/intheflight/20090613/p1
 現在のなかさきBotは1時間毎にPostし、@_nkskされると常に「キュフフ♪」とReplyする単純なものです。これをもう少し複雑にしたい。せめて「おはよう」と言ったら「おはよう」と返してもらいたい。ということで次の目標はPostの中身を調べて、内容に合ったReplyを返せるようにします。内容に合ったReplyといっても返す言葉は定型句なので、それほど難しくありません。今回は「おはよう」と言ったら「おはよう」と返すことを目標とします。新しくクラスを作ったりはせずにNkskReplyクラスのget()を編集するだけです。get()の該当する送信部分だけを抜粋します。

url = "http://twitter.com/statuses/update.xml"
statuses2 = db.Query(Status)
statuses2.filter("replied =", False)
for status in statuses2:
  status.replied = True
  db.put(status)
  
  head_message = u"@" + status.user + u" "
  if re.compile(u"おはよう").search(status.text):
    tail_message = u"さん、おはよう!"
  else:
    tail_message = u"キュフフ♪"
  message = head_message + tail_message
  payload = urllib.urlencode({'status': message.encode("utf-8")})
  base64string =b64encode("%s:%s" % (username, password))
  headers = {"Authorization": "Basic %s" % base64string}
  urlfetch.fetch(url, payload=payload, method=urlfetch.POST, headers=headers)

正規表現でPost文字列の中に「おはよう」があるか判定します。

re.compile(u"おはよう").search(status.text)

それから、必要なモジュールをインポートします。

import re

テストしてアップロードして完成。簡単ですね!