2009年12月15日

上有一个cron jobs的功能,类似于Linux下的crontab,可以实现在指定规则的时间里去运行程序。利用这个功能和飞信的短信功能就完成一些简单的小应用,比如天气预报,服务器监控,股票大盘实时行情提醒等等。

拿服务器监控来说,我们先注册一个账户,然后创建一个Application,下载一份 的SDK,接下来就写代码了。
(以上过程请自行google之)

monitor.py:

:
  1. #!/usr/bin/env
  2. # -*- coding: utf-8 -*-
  3. #MIT License
  4. #By : cocobear.cn@gmail.com
  5. #
  6.  
  7. from google.appengine.api import urlfetch
  8. from import *
  9.  
  10. def get():
  11.     print('<html><body>')
  12.     url = 'http://61.236.244.162'
  13.     result = urlfetch.fetch(url)
  14.     if result.status_code == 200:
  15.         print('OK')
  16.     else:
  17.         fetion = ('136xxxx','123456','HTTP')
  18.         i = 0
  19.         while True:
  20.             try:
  21.                 fetion.login(FetionOnline)
  22.                 fetion.send_sms('服务器掉了!')
  23.                 fetion.logout()
  24.             except:
  25.                 if i> 5:
  26.                     break
  27.                 continue
  28.     print('</body></html>')
  29.  
  30. if __name__ == '__main__':
  31.     get()

很简单的代码,使用的函数urlfetch.fetch来访问这个地址,如果失败调用来发短信给自己做通知。

app.yaml:

:
  1. application: pythoning
  2. version: 1
  3. runtime:
  4. api_version: 1
  5.  
  6. handlers:
  7. - url: /console/.*
  8.   script: $PYTHON_LIB/google/appengine/ext/admin
  9.   login: admin
  10.  
  11. - url: /monitor
  12.   script: monitor.py
  13.  
  14. - url: /
  15.   static_files: index.html
  16.   upload: index.html

这里指定url映射的规则,访问pythoning.appspot.com/monitor就会执行monitor.py脚本。application需要填写你申请应用时的名称,也就是这个二级域名pythoning,version:当前代码的版本。

index.html:

:
  1. 首页你可以做别的事,比如放个人主页,然后把自己域名指过来。

cron.yaml:

:
  1. cron:
  2. - description: watch http server
  3.   url: /monitor
  4.   schedule: every 1 minutes
  5.   timezone: Asia/Shanghai

关键的一个文件,对monitor这个url进行定时执行,这里是每分钟执行一次; 如果你是写天气预报,就可以写为 7:00 every day,每天早上7点发一次天气预报。

写完这些以后,运行命令:
ls demos/test
app.yaml cron.yaml index.html monitor.py .py
appcfg.py update demos/test
把你的代码提交到服务器上,你可以在的后台Cron Jobs看到:

/monitor
watch http server every 1 minutes (Asia/Shanghai)
2009/12/15 14:06:50 on time Success

上使用r49版本的,请注释掉from select import select,如果只是像上面做提醒的话最后去掉下面的代码(824行):

:
  1. self.get_personal_info()
  2. if not self.get_contactlist():
  3.     d_print("get contactlist error")
  4.     return False
  5. self.get("compactlist",self.__uri,self.contactlist.keys())
  6. response = self.send()
  7. code = self.get_code(response)
  8. if code != 200:
  9.     return False
  10. #self.get("PGGetGroupList",self.__uri)
  11. #response = self.send()
  12.  
  13. self.get_offline_msg()

这里是获得了好友列表,然后给这些好友发一个上线的通知,如果你不想每次提醒的时飞信上的好友都看到你上线,那么就去掉这些,也会加快发送短信的速度。更进一步的优化,你可以去掉TCP通信的相关代码。

ok, 发挥你的想象力,play with and

标签 :

随机日志

23 楼了已经

  • bones7456写于09年12月15日

    呵呵,这个挺好玩的。

  • 草儿写于09年12月15日

    搞的不错,越来越有意思了

  • david写于09年12月15日

    正是我想要的

  • 小卒写于09年12月15日

    最近1周多,在GAE上的get_offline_msg()不能用了,是飞信协议修改了吗?我的一个应用,如果那样我的一个应用就废了,可可熊有办法吗?

  • 可可熊写于09年12月15日

    嗯,HTTP协议不能那样获得消息了,因为本来就没有官方走HTTP方式的飞信,所以我也没有什么办法。以前那样也是一种凑合的方法。

  • damon写于09年12月15日

    哈哈··· 不错 终于发出来了··

  • evlos写于09年12月15日

    帅呆了 ~ ( ⊙o⊙ )

  • Solrex写于09年12月15日

    Great work!

  • oo写于09年12月23日

    gae
    又发不了飞信啦,每次都错误!!

  • flyingzl写于10年02月02日

    这页面背景可刺激死我的眼睛,呵呵。。

  • flourishing写于10年04月02日

    能支持http proxy 吗

  • flourishing写于10年04月02日

    建议调一下样式,几乎都看不见文章的标题。

  • xbwee写于10年04月11日

    最近在GAE上使用报错,module object has no attribute socket PyFetion.py line 464
    google之,一些人说可能是当前目录下有同名的 ‘socket’文件导致出错,我确定上传的目录中没有这个文件。错误只能是 GAE 的 Python 运行环境了,这麻烦了~~

  • cocobear写于10年04月12日

    注释掉socket那行 在GAE上使用HTTP方式 用不到socket模块

  • xbwee写于10年04月14日

    哈哈,多谢提醒!PyFetion 类默认连接方式是TCP,只要在构造函数中指定为HTTP就可以了

  • sinosure写于10年04月29日

    GAE上也遇到socket问题了,但不知道怎么调整,怎么调整构造函数,能否详细说一下,或者给出一份调整后的版本呢,谢谢了

  • 可可熊写于10年04月29日

    To: sinosure
    直接注释掉import socket,然后使用HTTP模式。

  • sinosure写于10年05月03日

    谢谢指导,搞定了,但好像不稳定,有时候报错:

    (405, 'Http error')
    Traceback (most recent call last):
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 513, in __call__
    handler.post(*groups)
    File "/base/data/home/apps/forumfly2009/1.341680310453677646/helloworld.py", line 513, in post
    fetion.login(FetionOnline)
    File "/base/data/home/apps/forumfly2009/1.341680310453677646/PyFetion.py", line 829, in login
    response = self.send()
    File "/base/data/home/apps/forumfly2009/1.341680310453677646/PyFetion.py", line 400, in send
    response = self.__sendSIPP()
    File "/base/data/home/apps/forumfly2009/1.341680310453677646/PyFetion.py", line 453, in __sendSIPP
    raise PyFetionSocketError(405,'Http error')
    PyFetionSocketError: (405, 'Http error')
    I 05-02 10:26PM 23.591
    This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application.

  • cocobear写于10年05月04日

    405的错误是只有在GAE上面使用才会出现,应该是移动做的针对IP的限制,405一般只能重试。

  • Yao Wei写于10年05月26日

    我在本机上测试是好的,但是一部署到GAE上,立马就有错误,一开始是urllib2的问题,后来我试了google.appengine.api的 urlfetch还是有问题
    不知道有什么解决方法没有。 njustyw@sina.com

  • oppih写于10年06月28日

    你好,我想用PyFetion做一个自动处理接收到的飞信内容的问题,想向你请教怎么做方便,不知道是否有空帮助研究研究?

  • 文写于10年07月06日

    可否提供源码?在PHP上的可以收到但有乱码出现

  • cocobear写于10年07月07日

    源码都贴出来了 :-(

发表评论

在下面加入你的评论,或者 trackback 从你的博客站点。 订阅本文的评论。

:

:

:

«
»