可可熊的窝

Tag Archives: PyFetion

PyFetion 2010

IN:Python   Tags: ,    Comments:50

年初就看到飞信更新新的版本,但是原来的版本还是照常能用,就一直没理它,最近2008版本的协议据说很多地方用不了,抽空更新了一下PyFetion。移动官方于2010年9月15号发布了飞信2010正式版,所以新的PyFetion也将基于这个版本实现。

网上飞信的实现很多,不过很多要不是不开源,要不是实现过于麻烦;用 Python写这个飞信,的目的是为了方便一些用户订制,把飞信的功能折腾进自己的程序里、部署在服务器上做一些好玩的东西。

很多网上的飞信实现了http://xxx.xx.xx/api?p=136xxxxxxxx&pw=xxxx&t=136xxx&sms=hello这样的WEB接口, 为了安全起见大家在使用这样的接口的时候还是要多加留心。其实在dreamhost之类支持Python的主机上部署一个Python的应用还是很方便的,GAE上使用HTTP方式也是可以的。

svn更新记录:

http://code.google.com/p/pytool/source/detail?r=83

打包下载:

http://code.google.com/p/pytool/downloads/list

大概试了一下登录,发送消息,收消息都可以。还有不太完善的地方我会慢慢修正。

09-21
2010

PyFetion更新

IN:Python   Tags: ,    Comments:10

更新说明:

原引援引移动官方网站的说明:

尊敬的用户:
为了提升飞信系统安全性,于2010年7月25日起,飞信平台将停止对3.3及以下的低版本PC客户端提供支持,您将无法使用3.3及以下的低版本PC客户端登录飞信。您可以访问飞信官网下载频道http://feixin.10086.cn/download/下载并安装最新版本PC客户端后再次尝试登录。
对此给您带来的不便我们深表歉意,期待您一如既往的关注飞信!

飞信官方网站
2010-07-19

原引我飞信发布说明:

PyFetion?新版本发布,协议根据移动09.11.04的飞信版本:Fetion2008 3.5.2(安全加强版)

也就是说08版本的飞信还是能用的,(大家可以试着用08版的官方客户端登录一下)包括原有的登录验证方式,之所以这段时间不能用是移动增加了一个新的登录验证地址:https://uid.fetion.com.cn/ssiportal/SSIAppSignInV2.aspx,移动官方是使用XML的方式来传递这个参数,他们是新下传了一个ssi-app-sign-in-v2,我的程序没有很详细的分析XML,所以出错,现在解决的办法就是把PyFetion.py里面的
self.__sipc_url = “https://uid.fetion.com.cn/ssiportal/SSIAppSignIn.aspx”
改为:
self.__sipc_url = “https://uid.fetion.com.cn/ssiportal/SSIAppSignInV2.aspx”

一切正常。

收到好多邮件,还有博客上的留言,不过最近其它的事情比较多,而且很多人直接说都得换新协议了,所以怕没时间整,今天抽空看了下,发现没那么严重,我一向认为移动还是没腾讯那么狠的。

请移步:http://code.google.com/p/pytool/source/detail?r=79

PS:
amoblin同学修改的主要是针对Linux平台,所以我另外放了一个目录。
tanjelly同学的修改我就删掉了,新的协议似乎整的加密算法太多了,其实安全这个东西,没那么严重:-)

PS:
刚测试发现登录的时候密码简单要求输入验证码,以前只有官方客户端才要求输入,现在看来是强制了,我一会儿再改一下代码,把验证码存起来。但是还是建议改一具复杂点的密码,不然每次输入验证码可就惨了。

09-16
2010

更新百度搜藏导出工具

IN:Python   Tags: ,    Comments:23

可以支持分类(或者叫标签)的导出了。
PyFetion在google code页面加了一个下载连接,方便没有svn时直接下载代码;使用的是r49的版本

这似乎是一篇微博…

12-15
2009

GAE上使用PyFetion做一个应用

IN:Python, 编程相关   Tags: , ,    Comments:25

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

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

monitor.py:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#MIT License
#By : cocobear.cn@gmail.com
#

from google.appengine.api import urlfetch
from PyFetion import *

def get():
    print('<html><body>')
    url = 'http://61.236.244.162'
    result = urlfetch.fetch(url)
    if result.status_code == 200:
        print('OK')
    else:
        fetion = PyFetion('136xxxx','123456','HTTP')
        i = 0
        while True:
            try:
                fetion.login(FetionOnline)
                fetion.send_sms('服务器掉了!')
                fetion.logout()
            except:
                if i > 5:
                    break
                continue
    print('</body></html>')

if __name__ == '__main__':
    get()

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

app.yaml:

application: pythoning
version: 1
runtime: python
api_version: 1

handlers:
- url: /console/.*
  script: $PYTHON_LIB/google/appengine/ext/admin
  login: admin

- url: /monitor
  script: monitor.py

- url: /
  static_files: index.html
  upload: index.html

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

index.html:

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

cron.yaml:

cron:
- description: watch http server
  url: /monitor
  schedule: every 1 minutes
  timezone: Asia/Shanghai

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

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

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

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

self.get_personal_info()
if not self.get_contactlist():
    d_print("get contactlist error")
    return False
self.get("compactlist",self.__uri,self.contactlist.keys())
response = self.send()
code = self.get_code(response)
if code != 200:
    return False
#self.get("PGGetGroupList",self.__uri)
#response = self.send()

self.get_offline_msg()

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

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

12-15
2009

PyFetion 0.2 发布

IN:Life   Tags: ,    Comments:52

PyFetion 0.2版本发布,协议根据移动09.11.04的飞信版本:Fetion2008 3.5.2(安全加强版)

http://code.google.com/p/pytool/
更新内容包含:

  1. 增加查看飞信好友是否隐身功能
  2. 增加登录时状态的选择[隐身 在线 忙碌 离开]
  3. 日志改用Python的logging模块
  4. 增加对好友状态改变的处理( 如上线等)
  5. 重写TCP方式中的底层通信函数
  6. 使用对列保存接收到的多余消息( 例如发短信时本来应该返回200 OK 却先来了个BN通知消息,以前这样会出错,现在底层会把BN消息放在队列中,返回200 OK)
  7. 修改了一些异常处理方式
  8. 增加登出,删除好友函数
  9. 改写get_contactlist函数,使用一个dict保存当前的好友列表
  10. 增加一个receive函数 做客户端的时候可以在一个线程中主调用该函数,所有的消息都会yield出来(请参考fetion.py)
  11. 修正向PC发送消息的命令,飞信新增加了一个CatMsg的命令
  12. 增加接收从最新版本PC端发送的消息功能;这个比较麻烦新版本飞信对每一个新会话使用fork出一个线程的方式;
  13. John先给服务器说我要开个新会话,服务应答一个消息说,你去这个IP吧,带着这个密钥
    于是John就连到了这个IP,并使用这个密钥登录,接着发一个包含Bob的uri的邀请命令;
    服务器把这个通知(包含IP 密钥和邀请者John的uri)给Bob,Bob收到服务器的通知后也用同样的密钥登录该IP
    这时John收到Bob进入会话的消息,他就开始正式发消息了

  14. 许多清理了修正
  15. 调整类的结构
  16. 改用MIT License
  17. 增加了一个CLI的飞信客户端 跨平台支持
  18. Fedora8 Python2.5.1测试;Windowx XP Python2.6.4测试;Win7 Python2.6.2测试;Mac 10.5.7 Python2.5.1
  19. 我忘记在这里列出来的

./fetion.py
————————基于PyFetion的一个CLI飞信客户端————————-

命令不区分大小写中括号里为命令的缩写

help[?] 显示本帮助信息
ls[l] 列出好友列表
status[st] 改变飞信状态 参数[0隐身 1离开 2忙碌 3在线]
参数为空显示自己的状态
msg[m] 发送消息 参数为序号或手机号 使用quit退出
sms[s] 发送短信 参数为序号或手机号 使用quit退出
参数为空给自己发短信
find[f] 查看好友是否隐身 参数为序号或手机号
add[a] 添加好友 参数为手机号或飞信号
del[d] 删除好友 参数为手机号或飞信号
cls 清屏
quit[q] 退出对话状态
exit[x] 退出飞信

fetion.py特色:

  1. 多线程支持,同时收发消息
  2. 添加,删除,好友,判断好友是否隐身功能
  3. 占用资源少,我正写这博客的时候官方的飞信占我96.8M的内存
  4. 跨平台支持
  5. 扩展性好,加两行代码就可以实现从手机发命令关机等功能
  6. 其它我没发现的
12-12
2009
Page 1 of 212
loading...