GAE支持XMPP消息的发送和接收,用来实现XMPP Robot是再方便不过了。
1. 下载google appengine安装。
2. 新建一个应用,偷懒,就用官方的代码。到源文件目录下,找到app.yaml,修改为如下以支持XMPP功能:
application: nsnfaq
version: 1
runtime: python
api_version: 1
inbound_services:
- xmpp_message
handlers:
- url: /_ah/xmpp/message/chat/
script: main.py
3. 修改main.py 如下:
from google.appengine.api import xmpp
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class XMPPHandler(webapp.RequestHandler):
def post(self):
message = xmpp.Message(self.request.POST)
if message.body[0:5].lower() == 'hello':
message.reply("Greetings!")
application = webapp.WSGIApplication([('/_ah/xmpp/message/chat/', XMPPHandler)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
4. deply到google上。提示Process exited with code 0,即为成功部署。
5. 验证功能,在GTalk中添加,nsnfaq@appspot.com为好友。发送hello,得到Greetings!回复。
至此,一个Demo版XMPP Robot就实现了。更加智能的Robot,需要扩充post函数的功能了。打算做成一个FAQ~~
6. 如果有多个RequestHandler,需要做少量修改。如:
application = webapp.WSGIApplication([('/', BrowseHandler ),
('/_ah/xmpp/message/chat/, XMPPHandler),
],
debug=True)
debug=True 参数可将应用程序设置为调试模式,这样可通知 webapp 在处理程序引发异常时在浏览器中显示堆栈跟踪。
默认情况下,当发生错误时,webapp 只返回一个 HTTP 500 错误。
App Engine 基于在应用程序的 app.yaml 文件中所指定的网址和映射将请求传送至 Python 脚本。webapp WSGIApplication 会进一步将具体的网址路径映射至请求处理程序。可以将所有非静态网址映射至单个 Python 脚本,然后使该脚本将所有动态网址调度到处理程序。也可以将功能分组成由不同脚本运行的多个 WSGI 应用程序,然后使用 app.yaml 将相应的网址映射至相应的应用程序。