详细的更新请到google code 查看。
- get_info()函数参数处理who遗失的情况;
- 向服务器以HTTP方式提交密码时使用urllib.quote()编码;
- 修改send_msg()函数;
- 清理代码中直接退出的exit函数;
- 重写__tcp_recv()函数,以前这里有可能会丢失数据,比如好友列表过长;
- 增加隐身登录功能,login(True)表示隐身登录。
以前还有人提到增加隐身登录,我看了下08 PC版的飞信,只能是先登录,然后再设置隐身模式,这样的话增加设置隐身模式就没必要了。
至于登出飞信更是没必要了。
09.02.23 Update:
- 上次的代码get_uri被我改出错了,修正了一下;
- 修改了使用手机号直接发送的方式,因为目前可以使用tel: 13888888888的方式发送短信,不用从联系人中一个一个找了;不过以前似乎这种方式不行;
- 修正了获取联系人信息的XML数据,可以完整的获取联系人;
已经移植了你的代码到GAE上,目前只实现了发短信。
http://gaefetion.appspot.com/
没想到你还在继续更新着,我还以为你都停下了呢。
挺不错呢~
只是如何保持一直在线状态呢?总不能每次发短信都得登录一下吧
volans, 能共享一下你在GAE上的移植么. 好像GAE里不能使用socket包,所以错误信息如下
File “/base/data/home/apps/aa/1.331593899342273539/main.py”, line 41, in get
phone.login()
File “/base/data/home/apps/aa/1.331593899342273539/PyFetion.py”, line 88, in login
self.__register(self.__ssic,self.__domain)
File “/base/data/home/apps/aa/1.331593899342273539/PyFetion.py”, line 204, in __register
response = self.__SIPC.send()
File “/base/data/home/apps/aa/1.331593899342273539/PyFetion.py”, line 315, in send
self.__tcp_init()
File “/base/data/home/apps/aa/1.331593899342273539/PyFetion.py”, line 424, in __tcp_init
self.__sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
AttributeError: ‘module’ object has no attribute ’socket’
hehe, 好像只要在实例化PyFetion时,选HTTP登录方式就可以在GAE上用了. 这下我可以给朋友发短信提醒了
不错,鼓励可可熊,坚持更新
$ ./PyFetion.py 12345
corrent your mobile NO. and password
上面的提示中corrent是什么意思?这个怎么用?给个范例萨。
BTW:我没有用过飞信,这个发短信要钱不?
To:iefan
一直保持在线我没考虑,因为没打算发大量的短信,如果要发很多短信,建议使用定时短信。
至于实现保持在线,只是定时发一发keepalive消息。
To: Mei
我不理解你为什么要在命令行后加参数,我给出的例子里面就不是那样写的啊。
To:Jove
GAE上应该不能直接使用底层的socket,所以只能使用HTTP的方式;HTTP方式速度有点慢,传输的数据多一些,如果你有DH主机的话直接在上面用Python很方便。
Jove,如你所说,改成http方式就可以了,没做过多别的修改。
可可熊:为什么获得好友列表只能获得飞信用户呢?没有飞信号码的那些好友将不能返回……
没有飞信号码的好友?
我不太理解,飞信好友中还有没有飞信号码的好友吗?
有的人没有使用飞信业务,但他同意你加他为你的飞信好友了,这些人在你的列表里只有手机号,而没有飞信号码。用官方的飞信软件的好友类表里是有这些人的,图标是绿色(而申请了飞信业务,有飞信号码的好友是灰色)
不知道这样描述你是否明白,或者你看看你的好友列表。
To:volans
http://code.google.com/p/pytool/source/detail?r=22
已经更新。
请查看398+
多谢反馈。
在windows下面,用Python 2.6, 原代码中
data = self.sock.recv(size,socket.MSG_WAITALL)
这一行应该用下列代码替换,否则会报告no attribute ‘MSG_WAITALL’错误。
buffer=”" while len(buffer)<size:
data = self.sock.recv(size-len(buffer))
if not data:
break
buffer+=data
To:xinqianli
2.6版本的我没有试过,但是2.6如果用这种方式很容易卡在那里。
没有仔细去研究到底是什么原因,先记一下,有机会再瞧瞧。
多谢了。
To 可可熊
我对python不熟悉,只是对fetion有点兴趣,学习了一下你的代码 ^_^
可能你主要在unix-like平台测试的,windows下面socket不支持MSG_WAITALL选项,似乎python库也没有考虑提供封装,因此要根据消息长度自己算len吧
我已经算过长度了,在recv里面使用了size,这个参数可以不加,我似乎做得有些画蛇添足。
这一块似乎不太稳定,因为飞信服务器有时候返回好友列表的时候中间会隔不短的一段时间,弄的我很郁闷。在Windows下你可以先把这个参数去掉。
windows下 _tcp_recv方法里如果socket超时,raise PyFetionSocketError(e.read())报错,socket.timeout似乎没有read方法
学习! 什么时候把这个修改成能在智能手机上使用就好了
非常谢可可熊,用了你的pyfetion,写了一个简单的应用,每天早上7点天气预报短信到我的手机上,部署到了GAE上。
代码放到了http://code.google.com/p/weathermobile/
谢谢你!
呵呵,希望能有更多利用飞信的好东东.
nav.fetion.com.cn不能访问了,唉是不是被封了啊,还有什么办法么?
恩,对,ptfetion似乎不能用了啊。
昨天晚上成功测试发送!
马上就停电了
郁闷
125.69.45.214 – - [24/Apr/2009:20:38:44 -0700] “GET / HTTP/1.1″ 500 0 – “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld),gzip(gfe)”E 04-24 08:38PM 44.702
:
Traceback (most recent call last):
File “/base/data/home/apps/djybbs/1.333029036534336496/PyFetion.py”, line 642, in
main()
File “/base/data/home/apps/djybbs/1.333029036534336496/PyFetion.py”, line 639, in main
time.sleep(Timeout2);
[...] 最近有同学反映PyFetion不能在GAE上使用,我看了下别人给出的错误,问题不出在PyFetion上,无论是TCP方式还是HTTP方式,使用本机测试都可以正常工作。 应该是移动的飞信服务器屏蔽了GAE的出口IP地址(某同学反应GAE的urlopen使用的是同一IP)。 [...]
你好,我在linux下使用PyFetion有问题,短信发送不出去,在windows下能发送出去,然后我看到代码上有这个配置: 是不是platform需要修改为linux下的,还是其他的原因呢。谢谢!
platform=”W5.1″ 这个是否说明运行平台是在windows下,如果我是在linux下又该如何修改呢?
Linux下使用没有问题,代码是跨平台的。
不需要修改什么吗,我现在就是遇到这个问题了,windows下能发送,linux就不能发送了。你的意思代码完全不需要修改吗?
你遇到问题,你要说明是什么样的,给出具体的描述,不然别人没办法了解你的情况。
谢谢你的提醒,我现在测试又通过了,问题不在代码上。再请教一个问题呢,那些关于飞信的XML,有参考资料吗。
XML相关的资料很多的,这是标准格式,你看相关的文档就行了。
刚才下载了你最新的r41的代码,好像里面有tab和space混用的情况。
你好,我又来了,我想问个问题就是我现在有个应用,就是想通过指定端口来发送短信,不知道这个是不是直接在电话号码后面跟上端口号就行了呢?
我也在GAE上搭建了一个https://fetionlib.appspot.com/
可以群发、定时发送、加好友和程序调用等。