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

标签 :

10 楼了已经

  • 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日

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

发表评论

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

:

:

:

«
»