坑爹的pylibmc官方安装文档

上午才说过redis4you挂掉了,为了保险准备给vps安装memcached支持,最开始准备简单安装python-memcached,简单的easy_installpython-memcached即可,但是在windows机器上下载了python-memcache代码发现这个是纯python实现的,而且看到SAE使用了pylibmc来做python的memcache库。easy_install-mpython-memcached卸载python-memcached(还需要rm/usr/local/python/lib/python2.7/site-packages/python_memcached-1.48-py2.7.egg)后找到pylibmc的安装文档。然后按照文档安装,安装完后importpylibmc却提示「ImportError:libmemcached.so.11:cann...

精彩继续

晒美胸图片站开发过程

上周四花了整整一个下午扒了牧风同学的iphoto主题,直接复制了牧风开源的主题中图片和样式表目录,然后用firebug手动扒的HTML结构。瀑布流用的jquery.masonry而没有直接扒牧风同学的jquery.waterwall「因为牧风同学的js简单混淆了,重新梳理一遍的时间足够我写个简单的瀑布流了」。再用了不到一个小时简单写了一个根据关键词抓取渣浪微博图片的小代码:入库、分页显示、瀑布流。简陋的甚至连一个后台都没有。把抓取图片的URL直接扔给uptimerobot监控起来,这样就可以实现自动抓取图片自动入库了。赶在下班前简单的部署在了SAE上,周五开始就放假休端午节。周六才有时间上网看了一下,发现uptimerobot报了一些5xx错误,但数据也自动抓了几百条。简单暴力的try:except屏蔽掉了异常,然后打包放在了hostloc上下载。周日晚上回京在电脑上才发现有几十人下载,但...

精彩继续

SAE图床增加上传API

自己给自己挖了个坑…前几天才写文章说要给SAE图床增加api方式上传,这拖了几天有朋友就催了一下,正好这几天工作的进度往前赶了赶,挤了点时间把坑填了一点…好久没有用git了,发现怎么push都不能push到github上,即便push时候提示是up-to-date,但在github上看还是旧文件。本来的规划是github上代码都放开源的,bitbucket上放一些不开源自己的小项目,但github玩不转,代码转移到bitbucket上了。地址:bitbucket更多就不介绍了,看项目里的readme好了。

精彩继续

python版SAE图床v0.2

周四花了两个小时把SAE图床做了个简单升级,界面直接使用了SWFUpload的demo页面,比原来的界面要美观了一些。顺便增加了选中多个文件上传的功能,之前只能上传一个文件。代码不再打包放在free.fr上了,这次直接放在了github上,方便之后进行更新,即便以后不再更新也方便其他朋友继续维护。演示地址:SAE源代码地址:GitHub列一下TODOList:增加API方式上传、管理界面计划分离出来放在单独域名,通过api方式上传和管理文件增加缩略图功能BTW:看到有其他朋友开发了通过渣浪微博的发带图片微博接口上传文件,省去了豆子的消耗。但这样图片管理起来并不方便,俺拿了一份作了个演示:渣浪微博图床,但不再计划实现python版本,一则因为渣浪的pythonSDKoauth1.0版本上传的功能是不能用的,二则重复造轮子也没意义。

精彩继续

python版SAE图床

之前写过一篇『使用新浪SAE加速你的网站速度』中文件均是直接放在SAE目录中,如果文件比较多,上传就不是很方便,尤其图片(做图床的都懂的)。php版的图床应该已经有很多了,python版本的图床还不是很多,操刀简单写了一个简陋版。因为是图床,所以文件选择了存储在Storage中而不是像之前一样直接存储静态文件。前提:拥有一个python版SAE是必须的。俺用的框架是bottle,没有使用SAE默认的0.9.6,而是参考了『chinakr』同学的做法使用了0.11这个开发版,原因无他:俺是更新控。上传使用了swfupload而没有使用浏览器默认的上传文件方式。默认使用的Storage名称是images,可以在setting.py文件中修改代码下载地址:http://chairo.free.fr/down/images-upload.zip截图(图片已经是在SAE中了:),长的比较丑,还待美化...

精彩继续

网站多线程自动扒皮工具(python版)

做为一个程序猿工种来说,最头疼的就是做一个『美观、大方……』的页面了,前端同学一下午能出好几张页面,程序猿同学一下午也最多出半张页面,还是丑的不堪入目的半张。在论坛也经常看到有人说『xx站点皮肤不错,求皮肤或者求扒皮等』,正好俺前一阵有写一个简单的多线程采集数据的小脚本,就整理下写了个简单的扒皮工具。其实工具并非原创,新写的这个工具里好多代码是直接从『obmem』写的一个扒皮工具中直接copy过来的。重复造轮子只是想梳理一下代码,obmem的版本有近250行代码,俺的新版本只有不到200行,而且obmem兄弟的多线程是固定设置,俺的是根据需要下载的文件数量自动调整线程数量。文件数量比较多的时候还是线程多一些会速度快一些,不过不足的是线程太多容易被服务器判断成是cc攻击……直接放出代码地址:https://gist.github.com/2276690已知Bug:某些情况会出现乱码,但这个不...

精彩继续

使用python第三方框架requests多线程获取数据

以前一直使用python的urllib2来抓取页面采集内容,偶然发现python有一个非常好用的封装好的库requests可以省去很多事。具体安装和使用教程可以直接参考官方文档:http://au81.com/KhfDe7。简单的写了一个通过requests多线程获取页面数据的代码。不贴所有代码了,代码下载:https://gist.github.com/2215568如图:

精彩继续

Python的staticmethod和classmethod装饰器用法、区别

Python的staticmethod和classmethod装饰器会迷惑一些人,有的人总会纠结什么时候用怎么用。俺写了个简单的例子,很清楚就能看出来这几种方法的区别。什么时候用怎么用就不用再多说了吧。#-*-coding:utf-8-*-classA(object):deffoo(self,x):print"executingfoo(%s,%s)"%(self,x)@classmethoddefclass_foo(cls,x):print"executingclass_foo(%s,%s)"%(cls,x)cls().foo(x)@staticmethoddefstatic_foo(x):print"executingstatic_foo(%s)"%xa=A()a.foo(1)print'1'a.class_foo(1)print'2'A.class_foo(1)print'3'a.st...

精彩继续

Python版本短网址还原脚本

看了别人写的一个PHP版本的短网址还原代码,感慨下PHP的强大,但这么简单的一个功能写了好长一段代码。PHP版本代码如图:尝试用Python重写了一下,发现其实这个功能只需要四行代码就可以实现。再次感叹下Python的方便:#-*-coding:utf-8-*-importurllib2,socketrequest=urllib2.urlopen(urllib2.Request(url='http://t.cn/zOyhXrZ',headers={'User-Agent':'Mozilla/8.0(compatible;MSIE8.0;Windows7)'}))socket.setdefaulttimeout(5)printrequest.url

精彩继续