2009年12月12日

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

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

  1. 增加查看飞信好友是否隐身功能
  2. 增加登录时状态的选择[隐身 在线 忙碌 离开]
  3. 日志改用的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
————————基于的一个CLI飞信客户端————————-

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

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

fetion.py特色:

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

随机日志

52 楼了已经

  • a写于09年12月12日

    感谢cocobear的辛勤劳作,向你表示由衷的敬意!
    你的PyFetion真的很棒!

  • 草儿写于09年12月12日

    希望pyfetion越来越强大,虽然现在不用飞信了,还是顶一个。

  • taotao写于09年12月12日

    可可熊真勤劳^^

  • taotao写于09年12月12日

    谢谢之余想问下这个支不支持群发短信的呢?

  • 1写于09年12月13日

    在python2.6测试成功,期待可以移植到python3.1

    我自己试过用2to3来转换,转换后由于python3默认定义所有字符串就是unicode,而且严格区分bytes与str对象,后来实在搞不惦哈

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

    To:taotao
    群发短信就是一个一个的发短信,你可以写个循环 for i in []: send_sms(‘hi’,i)

    To:1
    python 3.1改动还比较大,我没有环境测试。等这个版本的一些问题解决了我会折腾下3.1

  • 小卒写于09年12月13日

    太好了,先收下了。

  • Tweets that mention 可可熊的窝 » Blog Archive » PyFetion 0.2 发布 -- Topsy.com写于09年12月13日

    [...] This post was mentioned on Twitter by 康爷, York Wong. York Wong said: [GReader] PyFetion 0.2 发布 http://tinyurl.com/yejzcnr [...]

  • taotao写于09年12月13日

    To:可可熊
    En, it’s ok, thank you!

  • taotao写于09年12月13日

    请问可可熊,现在2009的协议是不是GAE就真不能用了呢?

  • Homer写于09年12月13日

    支持一下作者的辛勤工作~ 辛苦了~

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

    To:taotao

    GAE上使用HTTP方式,我测试过HTTP方式,发送短信 消息是没问题的,不过我没有在GAE上测试。
    你可以测试一下。
    HTTP方式的变化不大

  • 阿神写于09年12月13日

    nice work. keep up!

  • taotao写于09年12月13日

    select不要就行了吧,但是好像uudi系列函数工作不太正常,所以没搞定。。。

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

    select只有使用TCP方式才需要用到,uuid以前似乎正常。或者自己写一个这样的函数。

  • BackFire写于09年12月14日

    我这里python fetion.py输入手机号和密码之后,就一直显示滚动的“—>”
    为啥?

  • 剑23写于09年12月14日

    好友列表序号对应有问题,显示的序号对应有些正确,但有些对不上

  • cocobear写于09年12月14日

    To: 剑23
    刚修正了这个问题,感谢反馈。

  • taotao写于09年12月14日

    我错了,uuid是对的,但是在登录的第二步会返回500错误。我不知道这是是不是GAE对urllib重载导致的。出错的地方就在5次retry那,因为不是405错误,所以直接raise跳出了。

  • cocobear写于09年12月14日

    500错误是飞信服务器那边的问题,我试过了,可以登录,发短信
    不过也遇到过500错误,飞信服务器不太稳定,前几天有一段时间就干脆登录不上去了。

  • yorks写于09年12月14日

    能改成手机终端登录吗?

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

    To:yorks
    首先你手机得有一个shell,然后得支持Python。
    我的手机太老了,不行。

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

    To:BackFire
    你可以看下PyFetion.log 卡在哪儿了,估计是你网络的问题。

  • 匆匆写于09年12月15日

    真不错。上一个星期还看PyFetion呢,这周就更新了:)
    BTW:好像用退格键删中文会有问题,好像只删了半个中文。。。
    Exception in thread Thread-4:
    Traceback (most recent call last):
    File “/usr/lib64/python2.6/threading.py”, line 522, in __bootstrap_inner
    self.run()
    File “./fetion.py”, line 90, in run
    self.cmd(raw_input(self.hint))
    File “./fetion.py”, line 107, in cmd
    self.phone.send_sms(toUTF8(arg))
    File “./fetion.py”, line 344, in toUTF8
    return str.decode((os.name == ‘posix’ and ‘utf-8′ or ‘cp936′)).encode(‘)
    File “/usr/lib64/python2.6/encodings/utf_8.py”, line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
    UnicodeDecodeError: ‘utf8′ codec can’t decode byte 0xe8 in position 3: uned end of data

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

    To:匆匆
    删除中文有没问题啊,这个是raw_input这个函数,你自己手动试下这个函数,你看出错吗?

  • CODY写于09年12月15日

    用CLS客户端,接收信息的速度特别慢,有时候还收不到,这是什么原因?

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

    To:CODY
    接收从PC来的信息会慢一点,有5秒的延时;
    收不到是收不到哪儿的信息呢?有没有具体的日志

  • CODY写于09年12月16日

    原因已经查明,你在self._sock.recv中没有设置超时,导致卡死在那里。
    加了setTimeOut后就不会卡死了。。。

  • zengleo写于09年12月17日

    这个真棒,一直关注可可熊博客~ 呵呵!

  • yorks写于09年12月18日

    “”"To:yorks
    首先你手机得有一个shell,然后得支持Python。
    我的手机太老了,不行。”"”

    其实我是想了解一下fetion手机版的协议?不知道如何下手!

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

    协议应该都是一样的吧。我不太清楚手机上协议和PC上的区别。
    但是你用这样的协议在手机上实现了,也应该可以使用飞信的,除非你走的是移动的网络,然后移动直接判断你手机号那种方式。

  • 非金属写于09年12月19日

    这么多人关注…

  • yorks写于09年12月19日

    “”"协议应该都是一样的吧。我不太清楚手机上协议和PC上的区别。
    但是你用这样的协议在手机上实现了,也应该可以使用飞信的,除非你走的是移动的网络,然后移动直接判断你手机号那种方式。”"”
    移动有根据移动的网络(IP??)来判断登录方式?但是从您给出的协议上看,看不出移动是如何判断的?所以我想手机版的协议和PC版的协议应该不同,这仅仅猜测,无法验证呢。。。

  • 辉写于09年12月30日

    运行Fetion.py时出现错误Traceback (innermost last):
    File “fetion.py”, line 7, in ?
    File “F:\bea\workplace\Test\.cachedir\packages\PyFetion\PyFetion.py”, line 97
    class SIPC():
    ^
    SyntaxError: invalid syntax
    是怎么回事啊,我在eclipse上装的Jython
    不懂Python 帮下忙谢谢

  • cocobear写于09年12月30日

    你的版本是多少,好像不支持这class。

  • 辉写于09年12月31日

    是JDK吗 JDK是1.6 用的JyDT支持Jython2.1

  • cocobear写于09年12月31日

    Python版本低了,要2.5以上。

  • 辉写于09年12月31日

    我下了个Jython2.5 运行fetion.py又出现下面的错误啊Traceback (most recent call last):
    File “fetion.py”, line 450, in
    sys.exit(main())
    File “fetion.py”, line 399, in main
    mobile_no = raw_input(toEcho(“13810389680”))
    File “fetion.py”, line 347, in toEcho
    return str.decode(‘utf-8′).encode((os.name == ‘posix’ and ‘utf-8′ “”"or ‘cp936′”"”))
    TypeError: expected a str

  • cocobear写于10年01月01日

    如果你是从浏览器里面复制的代码,可能会出错的,直接下载代码,或者使用SVN.

  • 柠檬园主写于10年01月11日

    可可熊,我是从SVN上当的PYF下来,
    目前还在本地开发测试,但为什么只能发送给自己?给飞信好友发都收不到,并且也不返回错误,这个是飞信服务器的问题吗?代码如下:
    phone = PyFetion.PyFetion(“13XXXXXXXX”,”XXXXXXXX”,”HTTP”)
    #try:
    phone.login()
    #只能发送给飞信好友(或自己)
    phone.send_sms(msg) #发给自己
    phone.send_sms(msg,”15XXXXXXX20″) #发给好友
    phone.logout()

  • cocobear写于10年01月12日

    给好友发短信,使用sip:xxx
    这种方式,而不是直接使用手机号,移动目前不支持手机号那种方式。

  • 柠檬园主写于10年01月12日

    原来是因为飞信改协议了。
    不过按下面这个博客,他已经解决了。
    {“2009年12月9日中国移动飞信服务器升级,变更了登录地址和部分协议。升级后的协议无法直接给接收方手机号(tel)发送短信,只能给飞信号(sip uri)、自己的手机号发送短信。本人通过重新抓包,对飞信协议进行分析,修改了sms.api.bz接口代码,通过将接收方手机号(tel)转换为 user-id,再通过user-id转换为飞信号(sip uri),进行短信发送,一切OK。”}
    地址:http://blog.s135.com/fetion_api/

  • 柠檬园主写于10年01月13日

    用get_contactlist方法得到的好友列表里是这样的
    {‘sip:888888888@fetion.com.cn;port=8888′:['nickname','13888888888','0','B'],’sip…..}
    这样的格式,然后我在LOGIN的时候将这个LIST转换出另一个辞典
    {’13888888888′,’sip:88888888@fetion.com.cn;port=8888′}
    再判断要发送的手机号,如果不是本机(登录手机号)并且号码在这个DICT里,就取出SIP来。然后在send的时候把原来和to由tel:13888888888改成了sip:888888888,但后怎么再login取出来的contactlist辞典里,value的list里的第二项总是空,也就没办法测试是否能成功了。郁闷。

  • 柠檬园主写于10年01月13日

    搞定了,就是按上面的办法。
    在login里增加下面for k,v开始的部分
    #self.get_personal_info()
    if not self.get_contactlist():
    d_print(“get contactlist error”)
    return False
    for k,v in self.contactlist.items():
    print v
    print k[:13]
    if k[:4]==’sip:’ and len(v[1])==11 and v[1].isdigit():
    self.num2sip[v[1]] = k[:13]

    send_msg下的这个判断
    elif flag != “CatMsg” and len(to) == 11 and to.isdigit():
    下面改成:
    if to != self.mobile_no and to in self.num2sip.keys():
    to = self.num2sip[to]
    else:
    to = “tel:”+to

    当然num2sip = {}要在class前面先定义一下。

  • cocobear写于10年01月13日

    你可以参考fetion.py
    从手机号获取对应的uri 使用Uri发送短信就可以了。

  • nsnake写于10年03月12日

    不知道他的手机号到url是怎么转换的

  • tina写于10年06月03日

    你好,试了下查看好友隐身的功能。一输入就卡住了 只能重启pyfetion 试了很多人 都不行 请问这是为什么呢

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

    可能对方的版本的原因,我是在旧的版本上测试的。

  • 韩世界15680180146写于10年06月19日

    我下了你的新版本,就2个文件。这个应该是LINUX下用的吧。有WINDOWS下的版本吗???

  • 天文也写于10年07月25日

    https://uid.fetion.com.cn/ssiportal/SSIAppSignIn.aspx
    不可用了?请楼主确认!

  • smilepig写于10年07月26日

    @天文也
    飞信换协议了又~~~等可可熊更新吧~~

  • frank写于10年08月02日

    最近开始不能用了,是不是uri变了还是什么,麻烦更新下,谢谢。

发表评论

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

:

:

:

«
»