关于PyFetion不能在GAE上使用

最近有同学反映PyFetion不能在GAE上使用,我看了下别人给出的错误,问题不出在PyFetion上,无论是TCP方式还是HTTP方式,使用本机测试都可以正常工作。
应该是移动的飞信服务器屏蔽了GAE的出口IP地址(某同学反应GAE的urlopen使用的是同一IP)。

原因大概是广大GAE的爱好者众多,玩PyFetion的又比较多,所以移动不爽了,就封掉你。

问题出来了,原因也大概知道了,那怎么解决方案呢,下面就给出几个吧:

  1. 强烈要求GAE增加代理支持。
  2. 打电话给10086,然后说你的飞信上不出了,然后给客服MM说你的IP是:[GAE_IP(哪位知道这个IP来补充一下)]。
  3. 脱离GAE,使用自己的服务器。
  4. 继续使用GAE,使用另一服务器做为跳板。

Update(09.4.27):
据gohsy同学反映,GAE上不能使用是因为服务器返回了405错误,而别的fetion实现会忽略405错误,继续进行,而PyFetion遇到这个错误会产生异常。记得以前调PyFetion的时候也遇到过405错误,应该是发送的数据格式不对而造成的,所以我猜想这里是因为网络环境影响造成的数据不完整,从而使得飞信服务器返回405错误。因为在GAE上PyFetion还是可以偶尔发送成功的,所以出错的原因应该不是程序本身。

为了在GAE上能更好的使用,我修改了一下PyFetion,增加了遇到405错误时重试功能,默认重试5次,这样会使得发送的成功率提高很多,但是由于405的出现,重试多次会影响到发送的速度,这一点是无法避免的。更新请到google code查看:http://code.google.com/p/pytool/source/detail?r=30

其实根本的原因我想还是GAE上用PyFetion的人过多造成的:-)

为了在GAE上调PyFetion,在gohsy同学的帮助下,搭建了GAE环境,感觉还不错,做应用挺方便的,不错的东东。

Comments

damon: 忽忽! fetionAPI邮件列表 诞生 http://groups.google.com/group/fetionapi

hawkli: 发现r33版本也不太稳定啊,我上午刚试成功发了一个短信,吃完饭就又收不到了。我试了改了下修订bug的r30版本也一样不成功,在屏显提示上已经send msg ok了。 我估计还是fetion把地址屏蔽了的关系。 还有什么可以稳定运行的招呀,飞信比较可恶。

damon: 那你对 什么感兴趣? 分享你技术的哈 (不要想歪了) 朋友提示出来了 data = self.sock.recv(size,socket.MSG_WAITALL) 改成 data = self.sock.recv(size)

cocobear: 邮件列表的方式比较好,QQ群太麻烦。

nile997: 嗯,直接忽略405错误不可以吗?如果重试5次,时间会比较久,另外还是不能保证成功。

damon: 我的执行出来是这样的 怪 [img]http://www.jiub2b.com/py.jpg[/img] 菜鸟建群 飞信API交流 :76989585

cocobear: 你给出来的是一个不完整的提示。 我对qq群没兴趣。

cocobear: GAE(Google App Engine)

damon: O(∩_∩)O哈哈~ cocobear 还做下名词解释! 服务周到哦!

tatsuya: : ‘module’ object has no attribute ‘error’ args = (“‘module’ object has no attribute ‘error’”,) message = “‘module’ object has no attribute ‘error’” 执行PyFetion的代码后就出这个问题,不知道哪里出问题了,可可熊能不能帮忙看一下,谢谢了

草儿: 呵呵,我现在几乎不怎么用飞信了,有事直接打电话,嘿嘿

可可熊: 把完整的错误贴出来,不然看不懂。

nile997: 啊… 可惜了。 还想玩玩GAE上面的fetion呢 找另外一个服务器做跳板应该怎么做呢? 有没有推荐的服务器啊?

cocobear: 飞信的协议分析百度博客里有一份很详细的,你可以搜一下。 源码的的注释就是所有的说明了,不是很复杂的东西,所以如果你想了解的话就直接看源代码。有问题可以发邮件给我。

aoniao: PyFetion的源文件只是这个PyFetion.py吗?我都不会Python……

蓝色旋风: 谢谢熊大神,我想问下我用JSP怎么调用你的程序,怎么动态传入参数呢?我现在只会这个啊: import PyFetion fetion= PyFetion.PyFetion(“号码”,”密码”) fetion.login(); #fetion.send_sms(“我要发的消息”,to=”号码”)

蓝色旋风: 那我是否应该把这个做成一个dll然后用ASP来调用期中的函数 具体应该怎么做呢,请指教啊,我的邮箱 lsxf_xin@163.com 谢谢!

蓝色旋风: 你写的PyFethon很强啊,因为最近在做毕业设计,需要深入的理解一下你写的这个程序,能否提供一下这个源码的一些解释呢,还有Fetion协议分析能否也提供一下帮助呢,谢谢了!

蓝色旋风: 我的qq:434731902

aoniao: 非常感谢Cocobear大侠,我也是做毕业设计的,可能得调用飞信的接口来进行演示程序,可是刚刚接触Python,不了解PyFetion,我会发邮件向你请教的。到时候就麻烦你了。呵呵……

蓝色旋风: 不知你的邮箱地址是多少 我想问下如何用ASP来调用,如何传参数呢

可可熊: PyFetion目前没有做这样的功能。但是可以加进去。

cocobear: JSP不能直接调用Python的代码。

aoniao: 呵呵,我目前只是要知道,用PyFetion可以接收别人回复来的短信吗?Python我会搞定的…… 谢谢可可熊大哥!

可可熊: 只有一个文件。不会Python我也帮不了你。

damon: 哇 好快哦!~

wind: 虾米是GAE?

idoyo: 占个位置 :)

Edikud: 老大为什么自己不开发个gae blog程序呢?这方面国内还是太少了,好的如徐明micolog程序,但作者已经很少更新了,比较遗憾的,好的程序我相信会有很多人用的…

cocobear: web开发我不善长的,GAE的blog也有不少吧,在Python中文邮件列表里有很多人发过的。

rex: 请教cocobear关于pythonfetion的几个问题: 如何快速查找某飞信号的sip值: 向手机发飞信,可以使用tel:\d{11}的形式;如果发给飞信号,则需要使用sip:\d=@fetion.com.cn;p=\d+的形式。 如果只知道某飞信号,不知其对应的手机号,如何快速地将它对应的sip号码查出来?需要每次调用phone.get_contact_list(),再从里面查找吗? 我的email&gtalk是 rex[at]zhasm[dot]com ,请指正。

rex: 您提及的百度上的协议分析,上面有手机前6位减某数得p=xxx值,但是这只对于知道手机号的有效,对于不知道手机号的,就不怎么灵光了,我目前只能一个个查。

bibcc: 老大,你Google code 上的 PyFetion.py 缩进有问题有几行的缩进用的tab ,下到本地看就乱了,望修正。 支持PyFetion

可可熊: 关于sip号码,一般是一个地区后面的p=xxxx是相同的。 这个p=xxxx就类似邮编一样,如果你能把全国各地的p=xxxx全统计一下那么你就可以利用查表的方式来获取sip号码。 tab缩进我会改一下的,多谢提醒。

rex: 最新的detail?r=43 pyfetion.py,好像不支持GAE。请问哪一款是比较新的,支持GAE的?

rex: 我猜测原因是里面使用了os等模块。将其注释掉,指定utf8 coding,但是仍然无法执行。

可可熊: GAE使用没问题的。

Perry: 请教一个菜鸟问题:源代码中调试输出的部分形如“33[0;31;”的东东应该是ANSI颜色控制码?但是我无论在cmd还是在python的IDLE里运行,貌似都是把这些字符原样输出了……请教博主的环境是什么,可以支持这个的?

可可熊: Linux终端里面控制颜色输出的。

Noe: 对于GAE运行的问题,我也遇到了,但是情况比较诡异。 现象是第一次可以正常运行,之后的就不行了。 因为我是使用easy-twitter-sms调用PyFetion的,有个手动调用cron的路径。程序中加入log,第一次上传程序到gae后,手动执行一次cron,会看到解析地址,发送消息,成功,手机也可以收到。但如果之后再执行一次的话,就不出结果了。 我大概看了看代码,猜想是不是因为发送完短消息后没有logout的原因? 不是很明白gae的cron原理,但感觉似乎是由于生成了多个实例的原因。 希望所说的情况对博主有点帮助

lin: 发消息很奇怪,”<”字符及之后的文字都被扔掉了,是fetion的个性?

PopACai: cocobear的PyFetion库很赞纳。在此感谢一下。。 照着写了一份FETION。 还有一个本地GAE测试通过。结果上传上去后。报出500SERVER ERROR呢?有没有也碰到过? PS:有一些地方提一下BUG(都是很小的) 在获取列表时,我发现当我的列表非合法时PyFetion会崩溃(我有几个拉黑的啥的。)然后会崩溃掉。 删除后可以运行正常。建议try catch。 还有就是在运行一段时间后会POP一个错误的表单。这个我后来TRY CATCH后正常了。 还有就是有时SEND后,在等待FETION_Server时会没有ACK回复(就是发送成功的标记)结果程序假死了。其实这个消息已经发出去了。。 谢谢你了。。最后表示真的写的很不错。很赞,结构也很好,阅读很舒服。除了稍微有时有点费解。其他的都非常漂亮。感谢提供PYFETION。 希望交流:popacai@gmail.com

leungxh: 菜鸟弱弱的问下,那个cli客户端可不可以把手机号,密码保存起来,不然每次使用都要输入一遍,很麻烦,希望老大给讲讲

可可熊: 稍改一下代码就可以的 mobile_no = “136xxxxx” passwd = ‘1234576’

坚持原创技术分享,您的支持将鼓励我继续创作!