<?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; Python</title>
	<atom:link href="http://cocobear.info/blog/category/my-programming/python/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>使用Django Admin做一个简单的应用</title>
		<link>http://cocobear.info/blog/2011/03/16/make-app-with-django-admin/</link>
		<comments>http://cocobear.info/blog/2011/03/16/make-app-with-django-admin/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 06:29:44 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=872</guid>
		<description><![CDATA[使用Django 的admin做一个简单的应用： 一、安装WSGI 官方推荐使用WSGI模式，而不是mod_python方式在Apache上运行Django。拿Fedora为例，直接: yum install mod_wsgi 就可以完成WSGI的安装 二、配置Apache 安装好mod_wsgi后，Apache的服务器配置里面会自动加入mod_wsgi的调用，所以只需要配置Django相关的部分： #add for mod_wsig Alias /media &#8220;/usr/lib/python2.5/site-packages/django/contrib/admin/media/&#8221; AllowOverride All Options None Order allow,deny Allow from all WSGIScriptAlias /mmq /var/www/Django/mmq/apache/django.wsgi 这里我们假定项目名为mmq，位置在/var/www/Django/mmq 服务器访问的根目为/mmq(比如你访问这个应用需要使用地址:http://127.0.0.1/mmq/mmq/) Alias /media是指定了Django访问静态文件的位置，因为我这里用到Django admin，所以需要把它指向Django admin静态文件的位置；当然你自己项目里面的模版文件会自动覆盖上面的设置。比如你可以mmq\templates\admin在这个位置创建一个index.html文件来自定义自己的admin主界面。 三、配置Django项目 刚才我们在http.conf文件中指定了一个django运行的根脚本，现在我们需要创建这个脚本： django.wsgi: import os import sys sys.path.append(&#8216;/var/www/Django&#8217;) os.environ['DJANGO_SETTINGS_MODULE'] = &#8216;mmq.settings&#8217; import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() urls.py配置： from django.conf.urls.defaults import * [...]]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2011/03/16/make-app-with-django-admin/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<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>Google Map</title>
		<link>http://cocobear.info/blog/2009/08/04/google-map/</link>
		<comments>http://cocobear.info/blog/2009/08/04/google-map/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 01:22:56 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[map]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=723</guid>
		<description><![CDATA[Google Map的算法分析见:http://www.codeproject.com/KB/scrapbook/googlemap.aspx Google Map使用http://mt[0-3].google.cn/mt/v=cn1.11&#038;hl=zh-CN&#038;x=%d&#038;y=%d&#038;z=%d&#038;s=Galile这样的URL来表示一个放大等级中最小的地图分块。 mt0&#8212;-mt3是四个Google Map的服务器 v=cn1.11 是当前地图的版本 一直在变化中 x,y,z分别代表当前分块所在位置和放大等级，Z=19为最大的放大等级，目前很多城市都可以查看到该等级下的地图 在某个放大等级z下，整个地球被分成2^z分块 x,y可以根据经纬度来计算;x的计算比较好理解(longitude->经度)： longitude=180+longitude #修正经度值到0-360 因为经度的表示是从-180&#8212;>180 longTileSize=360.0/(pow(2,zoom)) #计算每个分块所占的角度数 tilex = longitude/longTileSize #计算当前经度所在的分块位置 y的计算要牵扯到墨卡托投影这个地图算法，比较麻烦没看懂。不过并不影响使用，相应的代码上面已经给出来了，然后就可以用Python下载地图分块，使用PIL库把分块合并。 代码见Google Code (这个是西安地图)： #GMap2Png(108.80824,34.37075,109.10316,34.15366,16) 参数为你需要确定的图片左上角的经纬度和右下角的经纬度 最后一个是放大的等级 使用的时候需要注意如果你选择的经纬度范围较大，那么放大等级就不能太大，不然要生成一个巨大图片，PIL会报MemoryError的错误。 还有些问题我在CPyUG记录了下来，不过没使用好的解决方案。]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2009/08/04/google-map/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>多资源、多线程、断点续传</title>
		<link>http://cocobear.info/blog/2009/06/02/multi-thread-and-broken-point-resume-technology/</link>
		<comments>http://cocobear.info/blog/2009/06/02/multi-thread-and-broken-point-resume-technology/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 09:22:59 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=697</guid>
		<description><![CDATA[我要做一个支持多资源、多线程、断点续传的小工具，基于Python。Windows下有迅雷、FlashGet、QQ旋风（相当地泛滥），Linux下也有D4X,Axel ,aria2，那为什么还要写这样一个工具呢？ (1) 上面都不是Python写的。 (2) Linux下的下载工具都不能主动获取资源，而现在迅雷和FlashGet之所以快就是因为他们有资源。 (3) Linux下几个工具多线程、断点续传做的不太好。aria2似乎不错，不过我没编译过去，支持那么多协议，觉得有点臃肿。 其实从原理上讲，迅雷不过就是一个HTTP/FTP的多线程断点下载工具，现在做大了就来抢BT、电驴的用户，把这两个协议也加了进去。 前段时间看过axel，它的实现太简单了，只是固定的产生N个线程，然后把文件分成N块交给这些线程去下载。从迅雷的配置文件和下载的日志中可以看出来迅雷对下载文件的分块和线程的使用是有自己独有的方式（它线程下载的数据块有时很大4M，有时很小32K，即使在同一个线程中也是这样），我没办法知道迅雷是怎么做这个工作。所以我只能通过猜测和自己的一些想法来做这个工作。尽可能的保证合理的分块和线程使用。 创建一个下载管理器，包括配置信息，任务列表，一个具有速度值与使用次数的URL列表。 首先得到下载文件的大小(filesize)，然后根据配置以及获得的URL数(N)对文件进行分块。 设置一个最小的分块值 MinPiece = 1024*128 （最小分块大于filesize的5%） 设置一个最大的分块值 MaxPiece = 1024*1024*200 if filesize < = MinPiece: 不进行分块。选第一个地址进行下载，如果该地址下载超时则使用其它地址下载。（是否可以考虑使用N个地址同时下载？） elif: 把文件分为N块，每块大小为Piece。 if Piece < MinPiece 把文件分为N-1块，Until Piece > MinPiece if Piece > MaxPiece 把文件分为N+1块，Until Piece < MaxPiece 生成任务列表，一个任务包括:URL,filename,range[start,pos,end] 任务列表中对任务进行标记，DONE，RUNNING,PAUSE,STOP(需要这么多吗？) 根据获得的资源数产生N线程的线程池。 逐步向线程池中增加线程：前提是所有线程成功运行，则增加一个线程。 每个URL对应一个线程的上限数（5），总使用线程数固定（35） 线程运行时检查是否有空闲线程，如果有，则把自己的任务分割（分割的办法使用折半方式，同时要保证分块大于MinPiece），放在任务列表中，同时修改自己的任务的分段信息。 加入任务列表时从URL列表中选一个速度较快的URL，且该URL线程数未达到上限。（如何判断是否达到服务器支持连接数上限？如果针对某个URL创建新连接失败则标记该URL为不可再连接） 线程运行时检查缓冲区的大小，当大于write_buffer_size时则写文件（大于文件的10%时也写？），并且写记录文件，更新URL列表中的速度值，做这些操作时要使用锁机制。这个write_buffer_size根据不同的文件对应不同的大小（2M--->16M迅雷使用8-256）。写文件时可以直接seek到需要写入的位置，如果操作系统不支持这种方式，则先用0填充文件。 线程对失效的URL进行标记，对不支持断点续传的URL进行标记。考虑GBK,UTF-8编码。 线程完成时与停止时做写文件操作与上面操作相同。 [...]]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2009/06/02/multi-thread-and-broken-point-resume-technology/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>pythunder又写了一遍</title>
		<link>http://cocobear.info/blog/2009/05/04/rewrite-pythunder/</link>
		<comments>http://cocobear.info/blog/2009/05/04/rewrite-pythunder/#comments</comments>
		<pubDate>Mon, 04 May 2009 08:25:31 +0000</pubDate>
		<dc:creator>可可熊</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[pythunder]]></category>

		<guid isPermaLink="false">http://cocobear.info/blog/?p=628</guid>
		<description><![CDATA[前几天在Python中文件邮件列表里看到讨论使用Python实现迅雷，后来又在Ubuntu论坛看到一个贴子，实现了获取迅雷服务器上的侯选资源（不是开源的）。突然就对这个迅雷协议很感兴趣，在别人分析的基础上用Python写了个小工具，与Ubuntu论坛上那个作用是一样的，获取迅雷服务器上的侯选资源。 迅雷有多个资源服务器，有的资源服务器返回完全一样，有的返回某些一样，这样可以指定多个服务器，获取更多的资源，同时也可以防止某个服务器不能正常响应。 用webpy写了个演示面面： http://cocobear.info/demo/pythunder/?url=http://3.duote.com/xunleidt.exe 不知道开源了会不会产生麻烦？ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;解释下标题&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; 前几天拿U盘做产量的时候没把代码备份出来，所以原本已经写好了今天又写了一遍，幸好代码很短:-)]]></description>
		<wfw:commentRss>http://cocobear.info/blog/2009/05/04/rewrite-pythunder/feed/</wfw:commentRss>
		<slash:comments>27</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>
	</channel>
</rss>

