<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>可可熊的窝 &#187; PyFetion</title>
	<atom:link href="http://cocobear.info/blog/tag/pyfetion/feed/" rel="self" type="application/rss+xml" />
	<link>http://cocobear.info/blog</link>
	<description>K.I.S.S</description>
	<lastBuildDate>Sat, 10 Dec 2011 16:11:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>PyFetion 2010</title>
		<link>http://cocobear.info/blog/2010/09/21/pyfetion-2010/</link>
		<comments>http://cocobear.info/blog/2010/09/21/pyfetion-2010/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 07:14:13 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[PyFetion]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=857</guid>
		<description><![CDATA[年初就看到飞信更新新的版本，但是原来的版本还是照常能用，就一直没理它，最近2008版本的协议据说很多地方用不了，抽空更新了一下PyFetion。移动官方于2010年9月15号发布了飞信2010正式版，所以新的PyFetion也将基于这个版本实现。 网上飞信的实现很多，不过很多要不是不开源，要不是实现过于麻烦；用 Python写这个飞信，的目的是为了方便一些用户订制，把飞信的功能折腾进自己的程序里、部署在服务器上做一些好玩的东西。 很多网上的飞信实现了http://xxx.xx.xx/api?p=136xxxxxxxx&#038;pw=xxxx&#038;t=136xxx&#038;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 大概试了一下登录，发送消息，收消息都可以。还有不太完善的地方我会慢慢修正。]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2010/09/21/pyfetion-2010/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
		<item>
		<title>PyFetion更新</title>
		<link>http://cocobear.info/blog/2010/09/16/update-pyfetion-2/</link>
		<comments>http://cocobear.info/blog/2010/09/16/update-pyfetion-2/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 09:35:22 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[PyFetion]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=850</guid>
		<description><![CDATA[更新说明： 原引援引移动官方网站的说明： 尊敬的用户： 为了提升飞信系统安全性，于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 = &#8220;https://uid.fetion.com.cn/ssiportal/SSIAppSignIn.aspx&#8221; 改为： self.__sipc_url = &#8220;https://uid.fetion.com.cn/ssiportal/SSIAppSignInV2.aspx&#8221; 一切正常。 收到好多邮件，还有博客上的留言，不过最近其它的事情比较多，而且很多人直接说都得换新协议了，所以怕没时间整，今天抽空看了下，发现没那么严重，我一向认为移动还是没腾讯那么狠的。 请移步：http://code.google.com/p/pytool/source/detail?r=79 PS： amoblin同学修改的主要是针对Linux平台，所以我另外放了一个目录。 tanjelly同学的修改我就删掉了，新的协议似乎整的加密算法太多了，其实安全这个东西，没那么严重:-) PS： 刚测试发现登录的时候密码简单要求输入验证码，以前只有官方客户端才要求输入，现在看来是强制了，我一会儿再改一下代码，把验证码存起来。但是还是建议改一具复杂点的密码，不然每次输入验证码可就惨了。]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2010/09/16/update-pyfetion-2/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>最近PyFetion不能登录-已更新</title>
		<link>http://cocobear.info/blog/2010/08/03/update-pyfetion/</link>
		<comments>http://cocobear.info/blog/2010/08/03/update-pyfetion/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 03:18:29 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[编程相关]]></category>
		<category><![CDATA[PyFetion]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=842</guid>
		<description><![CDATA[tanjelly同学更新了PyFetion，原因是移动对认证方式的一些小的变化，并不是以前的协议完全不可以用了。具体的细节可以参考上面的连接。 google code的Issue怎么没有邮件通知呢？还是别人发邮件我才知道的:-(]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2010/08/03/update-pyfetion/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>更新百度搜藏导出工具</title>
		<link>http://cocobear.info/blog/2009/12/15/update-cang2html/</link>
		<comments>http://cocobear.info/blog/2009/12/15/update-cang2html/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 14:35:26 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[PyFetion]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/2009/12/15/%e6%9b%b4%e6%96%b0%e7%99%be%e5%ba%a6%e6%90%9c%e8%97%8f%e5%af%bc%e5%87%ba%e5%b7%a5%e5%85%b7/</guid>
		<description><![CDATA[可以支持分类(或者叫标签)的导出了。 PyFetion在google code页面加了一个下载连接，方便没有svn时直接下载代码;使用的是r49的版本 这似乎是一篇微博&#8230;]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2009/12/15/update-cang2html/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>GAE上使用PyFetion做一个应用</title>
		<link>http://cocobear.info/blog/2009/12/15/app-use-pyfetion-on-gae/</link>
		<comments>http://cocobear.info/blog/2009/12/15/app-use-pyfetion-on-gae/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 06:22:14 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[编程相关]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[PyFetion]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=759</guid>
		<description><![CDATA[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('&#60;html&#62;&#60;body&#62;') 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: [...]]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2009/12/15/app-use-pyfetion-on-gae/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>PyFetion 0.2 发布</title>
		<link>http://cocobear.info/blog/2009/12/12/pyfetion-02-release/</link>
		<comments>http://cocobear.info/blog/2009/12/12/pyfetion-02-release/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 12:14:05 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[PyFetion]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=743</guid>
		<description><![CDATA[PyFetion 0.2版本发布，协议根据移动09.11.04的飞信版本：Fetion2008 3.5.2(安全加强版) http://code.google.com/p/pytool/ 更新内容包含： 增加查看飞信好友是否隐身功能 增加登录时状态的选择[隐身 在线 忙碌 离开] 日志改用Python的logging模块 增加对好友状态改变的处理( 如上线等) 重写TCP方式中的底层通信函数 使用对列保存接收到的多余消息( 例如发短信时本来应该返回200 OK 却先来了个BN通知消息，以前这样会出错，现在底层会把BN消息放在队列中，返回200 OK) 修改了一些异常处理方式 增加登出，删除好友函数 改写get_contactlist函数，使用一个dict保存当前的好友列表 增加一个receive函数 做客户端的时候可以在一个线程中主调用该函数，所有的消息都会yield出来(请参考fetion.py) 修正向PC发送消息的命令，飞信新增加了一个CatMsg的命令 增加接收从最新版本PC端发送的消息功能;这个比较麻烦新版本飞信对每一个新会话使用fork出一个线程的方式; John先给服务器说我要开个新会话，服务应答一个消息说，你去这个IP吧，带着这个密钥 于是John就连到了这个IP，并使用这个密钥登录，接着发一个包含Bob的uri的邀请命令; 服务器把这个通知(包含IP 密钥和邀请者John的uri)给Bob，Bob收到服务器的通知后也用同样的密钥登录该IP 这时John收到Bob进入会话的消息，他就开始正式发消息了 许多清理了修正 调整类的结构 改用MIT License 增加了一个CLI的飞信客户端 跨平台支持 Fedora8 Python2.5.1测试;Windowx XP Python2.6.4测试;Win7 Python2.6.2测试;Mac 10.5.7 Python2.5.1 我忘记在这里列出来的 ./fetion.py &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;基于PyFetion的一个CLI飞信客户端&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 命令不区分大小写中括号里为命令的缩写 help[?] 显示本帮助信息 ls[l] 列出好友列表 status[st] 改变飞信状态 参数[0隐身 [...]]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2009/12/12/pyfetion-02-release/feed/</wfw:commentRss>
		<slash:comments>52</slash:comments>
		</item>
		<item>
		<title>关于PyFetion不能在GAE上使用</title>
		<link>http://cocobear.info/blog/2009/04/25/pyfetion-can-not-use-in-gae/</link>
		<comments>http://cocobear.info/blog/2009/04/25/pyfetion-can-not-use-in-gae/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 09:56:36 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[编程相关]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[PyFetion]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=617</guid>
		<description><![CDATA[最近有同学反映PyFetion不能在GAE上使用，我看了下别人给出的错误，问题不出在PyFetion上，无论是TCP方式还是HTTP方式，使用本机测试都可以正常工作。 应该是移动的飞信服务器屏蔽了GAE的出口IP地址（某同学反应GAE的urlopen使用的是同一IP）。 原因大概是广大GAE的爱好者众多，玩PyFetion的又比较多，所以移动不爽了，就封掉你。 问题出来了，原因也大概知道了，那怎么解决方案呢，下面就给出几个吧: 强烈要求GAE增加代理支持。 打电话给10086，然后说你的飞信上不出了，然后给客服MM说你的IP是:[GAE_IP(哪位知道这个IP来补充一下)]。 脱离GAE，使用自己的服务器。 继续使用GAE，使用另一服务器做为跳板。 解释一下，GAE不能直接访问飞信服务器了，可以在另一个地方，比如cocobear.info/PyFetion.py?phone=13838381438&#038;pwd=383838&#038;msg=^_^ 做这样的一个的接口，然后使用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环境，感觉还不错，做应用挺方便的，不错的东东。]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2009/04/25/pyfetion-can-not-use-in-gae/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>更新PyFetion &amp;&amp; getsong</title>
		<link>http://cocobear.info/blog/2009/03/24/upgrade-pyfetion-and-getsong/</link>
		<comments>http://cocobear.info/blog/2009/03/24/upgrade-pyfetion-and-getsong/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 15:16:19 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[getsong]]></category>
		<category><![CDATA[PyFetion]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=585</guid>
		<description><![CDATA[给PyFetion加入了HTTP代理的支持，HTTP发送方式中。TCP发送方式也可能会加上吧，使用SocksiPy这个库吧，有时间再说。 改PyFetion的时候发现urllib2的一个问题： 先看下面这段代码： import urllib2 headers = [(&#34;Content-Type&#34;,&#34;application/oct-stream&#34;),] opener = urllib2.build_opener() opener.addheaders = headers urllib2.install_opener(opener) print &#34;after install_opener&#34; ret = opener.open('http://www.dict.cn',data=&#34;word=ss&#34;) print ret.read() 抓包发现发送的内容为： POST / HTTP/1.1 Accept-Encoding: identity Content-Length: 7 Host: www.dict.cn Content-Type: application/x-www-form-urlencoded Connection: close word=ss 这里我在代码里已经指定了HTTP的header: Content-Type，但是发出去的时候却被改变了。 通过分析urllib2的代码，找到： if request.has_data(): # POST data = request.get_data() if not request.has_header('Content-type'): request.add_unredirected_header( 'Content-type', 'application/x-www-form-urlencoded') if [...]]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2009/03/24/upgrade-pyfetion-and-getsong/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>PyFetion更新</title>
		<link>http://cocobear.info/blog/2009/02/20/upgrade-pyfetion/</link>
		<comments>http://cocobear.info/blog/2009/02/20/upgrade-pyfetion/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 06:40:37 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[编程相关]]></category>
		<category><![CDATA[PyFetion]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=523</guid>
		<description><![CDATA[详细的更新请到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数据，可以完整的获取联系人；]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2009/02/20/upgrade-pyfetion/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>PyFetion发布</title>
		<link>http://cocobear.info/blog/2008/12/31/pyfetion-release/</link>
		<comments>http://cocobear.info/blog/2008/12/31/pyfetion-release/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 03:09:50 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[fetion]]></category>
		<category><![CDATA[PyFetion]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=434</guid>
		<description><![CDATA[本来想着继续完善后再放出来，不过看到别人已经有做出来的，俺就不重复劳动了，前篇文章已经提到了基本的功能，这里也就不重复了。 我需要的功能差不多了，最近事多也就不改了，各位需要使用飞信聊天的的话建议用官方的，或者期待我第一个链接提到的。做开发的话俺还是用自己的比较清楚，当然别人的如果开放的话也可以参考一下。 这里写个简单的文档吧： [Python] def main(argv=None): try: phone = PyFetion(&#8220;138888888&#8243;,&#8221;888888&#8243;,&#8221;TCP&#8221;) #创建一个PyFetion类的对象，参数是手机号，密码，和登录的方式，TCP 或者 HTTP #登录时也可以选择06或者08协议，在代码的最上面自己修改 except PyFetionInfoError,e: print &#8220;corrent your mobile NO. and password&#8221; return -1 #处理获取配置信息错误，只有在手机号状态异常或者密码错误时会出现 phone.login() #向服务器做登录请求 #phone.get_offline_msg() #获取离线消息，没实现:-) #phone.add(&#8220;13888888888&#8243;) #添加好友 参数为手机号 如果对方没有注册飞信则会添加该手机为好友 #phone.get_info() #获取自己飞信号的基本信息 #phone.get_contact_list() #获取联系人列表 返回的是一个XML串 我没做处理 #phone.send_sms(&#8220;Hello, &#8220;,long=True) #最关键的一个功能 发送短信 该函数的原型为send_sms(self,msg,to=None,long=False): #分别为消息内容，发送对象，是否使用长短信格式(支持180字) #phone.send_msg(&#8220;hello&#8221;,&#8221;13888888888&#8243;) #发送IM消息 发送对客户端上 s = &#8220;2008-12-31 02:39:00.&#8221; for i [...]]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2008/12/31/pyfetion-release/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
	</channel>
</rss>

