Google App Engine の XMPPをPythonで書いてみる-1

Google App Engine(GAE)のバージョンアップで、XMPPをサポートするようになった。これによって、Google Talkのbotなどを簡単に作ることができる。GAEについては、Java版は記事が多いけど、Pythonはあまり見かけないので、さくっとサンプルを書いてみる。

とりあえず今回はアプリ(botアカウント)からの送信。

APIを使って、toのアドレスを指定して送信するだけなのでかなり楽ちん。
受ける側はXMPPをサポートすればなんでも良いんだろうけど、手っ取り早いのはGmailアカウントのGoogle Talkを使う。

送信側botアカウントは、このコードのように何も指定しない場合は、デフォルトのアカウント(app-id)@appspot.comが使われる。apiの引数に指定することで違うアカウントも使用可能。その場合は、
(任意のid)@(app-id).appspotchat.com
のように指定する。任意のIDが使えるこっちはドメイン部分がappspotではなく、appspotchatなので注意。

Google Talkで試す場合には、最初にGoogle Talkを利用するよう招待を送り、マイミクみたいな関係にならないといけない。(そうじゃないとSPAM送りまくれちゃう)
bot側から招待送るにはコード書かないと行けないので、受信側のGoogle Talkアカウントから招待を(app-id)@appspot.comに送る。すぐに自動的に承認される。

あとはこのWebアプリに対してリクエスト(http://(app-id).appspot.com/xmpp/send)を送ると、
chatメッセージがGoogle Talkアカウントに送信される。とても簡単。
開発サーバーでは送信されないので注意。(コンソールにログが出るだけ)

#!-*- coding:utf-8 -*-

import wsgiref.handlers
import logging
from google.appengine.ext import webapp
from google.appengine.api import xmpp

class XmppSend(webapp.RequestHandler):
  def get(self):
    to_address = "(foo-bar)@gmail.com"               ←Gmalアカウントなどに書き換える
    chat_message_sent = False

    if xmpp.get_presence(to_address): #if to-user is online
      status_code = xmpp.send_message(to_address, "Hello XMPP!!")  #send
      chat_message_sent = (status_code == xmpp.NO_ERROR)  #judge status
    else:
      logging.info("offline")

    if chat_message_sent:
      self.response.out.write("send message.");
    else:
      self.response.out.write("not send.");

def main():
  application = webapp.WSGIApplication(
      [('/xmpp/send', XmppSend)], debug=True)
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
  main()

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください