Hui’s Thinkpad Header Image

kxw2ebook: 科学网博客文章下载导出器

花了一个晚上写了一个Python程序,kxw2ebook,可以把科学网博客上的文章下载为电子书并导出到Wordpress里。因为我对科学网的编辑推荐不感冒,所以写这个程序也算是为科学网的作者提供另一个选择。

下载、源代码、使用说明和FAQ等都放在了google code上

http://code.google.com/p/kxw2ebook/

原理大概是这样的:

1. 首先从博客“所有文章”页面下载所有的文章链接
2. 下载文章
3. 通过正则表达式提取文章的主题内容等写入html和xml文件(wordpress导入时需要用)

通过修改脚本中的正则表达式匹配字符串,这个脚本也可以用于其他的博客系统。

几个比较有趣的地方:

1. 科学网似乎用了一种pager叫AspNetPager,在kxw2ebook试图获得多页数据时必须request如下古怪的post data

__EVENTTARGET=right_1%24AspNetPager1&__EVENTARGUMENT=DDDDDDD&__VIEWSTATE=%2FwEPDwUKMTE5MDI4MTYxNw9kFgIC...

我本来以为通过简单的url参数就可以,后来用firefox的LiveHttpHeaders插件截获浏览器请求才知道javascript的__doPostBack()函数会产生这样的浏览器行为。

2. 用pyinstaller将python脚本“编译”成了在windows可以直接运行无需安装python解释环境的standalone程序,通过UPX进行了压缩,但还是有2.5M,作为一个只有console的程序,尺寸是不是太大了。

3. 在测试期间“发现了”GFW,当程序试图下载下面的页面时,

http://www.sciencenet.cn/blog/user_content.aspx?id=25746

连接被重置。不知道GFW对国内的朋友访问国内网站是否有影响,大家可以试试。

将帖子导出到Wordpress还是比较成功的,但目前还无法导出评论。下面是个导出的例子:

科学网博客上的原址:

http://www.sciencenet.cn/blog/科学网编辑部.htm

导出到wordpress.com的效果

http://kxw2ebook.wordpress.com

导出到72pines.com的效果

http://kxw2ebook.72pines.com

阅读(860 次)

【翻唱】胆小鬼

PS:这首是用新话筒录得,condensor的麦克风真的很好,普通的话筒没办法比。

MP3版本下载 (用128kbps格式重新压缩了文件,大小4.7M):

http://toys.huichen.org/fanchang/danxiaogui.mp3

另有lossless的m4a版本下载 (文件大小34M):

http://toys.huichen.org/fanchang/danxiaogui.m4a

阅读(492 次)

【翻唱】樱花草

载入中……

阅读(592 次)

Google Application Engine 试用

收到了GAE(Google Application Engine)的邀请函,在其主页上注册了一个帐号,试用了一下。

GAE是google基于其Bigtable和GFS开发的网站开发环境,目前只支持Python语言。GAE的目的主要有两个:

1. 提供一个易于上手的网站开发环境。开发人员不需要自己搭建网络服务器,DNS和数据库等软件,只要使用google提供的API即可用Python开发CGI脚本。

2. 解决网站的可扩展性问题(scalability)。就是当有成千上万甚至数百万每天的用户请求时GAE能根据连接数自动将任务负载均衡到各个计算节点,同时对数据库的存储和操作也可以自动并行化。用户根本无需使用特殊的API即可自动实现可扩展性。由于GAE的实现是基于和Google搜索引擎类似的硬件和软件,网络和节点的维护由google完成,用户无需操心。

这两个想法显然是很前卫的。GAE也是所谓的云计算(cloud computing),它和Amazon EC2的区别在于EC2的用户对节点有绝对的控制权(root),但EC2并不是一个网站开发环境。

我比较喜欢GAE的这些特性:

1. 支持Python。没有哪种语言比Python更容易上手也更容易维护,另外Python的扩展库也非常丰富。

2. GAE SDK中的uploader用起来很简单,而且自带了一个webserver可以让开发人员在本地建立虚拟的GAE环境进行调试。

3. API中有访问者帐号认证的模块,但仅仅限于google account。

4. 数据库的查询命令和SQL很类似。

目前GAE还处于preview release阶段,功能上还有很多不足。下面是我找到的一些缺陷:

1. GAE中的Python版本删除了一些库和库函数。比如不支持写文件和socket编程,不支持C/C++写的extension,很多os库中的函数都不能用了。从安全角度这可以理解。

2. 不支持多线程。

3. API还比较少,文档比较简陋。

4. GAE的后台管理 (console window)很简陋,特别是管理数据库的页面基本上和没有没区别(比如无法通过表单选择某个table中的所有记录然后删除)。

5. 数据库操作的执行效率目前还很差。从一个数据表单中取出5000条记录居然需要3.3秒; 插入100条数据需要3.4秒; 一次删除4000多条数据会超时产生出错网页。

我用GAE写了一个benchmark网站,在这里:

http://benchmarkgae.appspot.com

其中对数据库,网络速度和排序算法进行了测试。还有对Scalability的测试,其中静态存储的可扩展性:

#_of_concurrency speedup
1 1
10 10.0
100 87.2

排序CGI程序的可扩展性:

#_of_concurrency speedup
1 1
10 9.64
100 63.9

前者比后者要好些,但并行程度都较低。

benchmark的源代码可以从上面的网站下载到。

总之,GAE还处于测评阶段,功能欠缺较多,并不适合用来编写较复杂的网站。

阅读(1189 次)

翻唱

这是老婆翻唱的第一首歌《知了》

载入中……

是用那种聊天用的简易麦克风,效果不太好,打算改天买个好的Mic和amplifier再试试。

Wordpress的这个coolplayer插件挺酷的,不过放出来的声音有些“嗡嗡”地走型。下载mp3到本地听效果会好些。

阅读(612 次)