[Django]ZipBook项目

这是我新开发的一个项目,你可以在 Google 上找到 ZipBook

这是一个有意思的项目。最新看网上的小说挺多,而且我希望有文本格式的格式下载,这样就可以在手机中看了。小说的下载方式挺多的,不过我想以自已的方式来下载和加工。原本想做成一个UliPad的插件,不过想一想做成个web也许更有意思,于是花了两天时间做了一个雏型。

它主要的功能就是让你输入一本小说的目录页面的URL,然后它就可以进行分析目录,然后自动下载每个章节。下载后会提取纯文本存到数据库中。在页面上你可以点击下载将整个小说以zip包的方式下载到本地,除了提供分章节的文本方式还提供将所有内容存到一个文本中的功能。

主要技术处理:

1. 页面分析

不同的站网,结构,内容编排都是不同的。因此在项目中有一个plugins目录,它用来存放每个可以处理网站的解析模块。在plugins的__init__.py中定义了域名与可处理的模块名的关系。因此并不是所有的网站都支持的。对于一个不支持的网站你只要在plugins中写一个新的模块。这个模块需要提供三个方法:parse_title用来从目录页得到小说名,parse_page用来从内容页得到文本的内容,parse_index,得到目录的详细信息。有了这些信息,zipbook就可以自动下载了。首先是根据目录url下载得到小说名和目录结构,然后再通过多线程分别下载整个目录结构。

2. 生成Zip文件

使用我以前写的zfile.py模块,不过原模块不支持将字符串直接写入zip文件,于是做了下扩展。使用这个模块写zip文件比较简单。然后就是HttpResponse的处理,基本可以参照Django Step by Step中关于csv下载的处理。只要注意把mime类型和下载的文件名搞对就行了。其实可以使用mimetypes模块的guess_type来猜mime类型。

难度到是没有。但有一个比较麻烦的就是如果在一个请求中进行处理的话,处理时间很长,前端页面长时间就不动了。原来想通过Comet来实现,不过没有看到Django中如何做,所以就放弃了。后来想通过ajax去轮询,不过后台需要是异步处理,我想到的是写一个独立的守护,或通过后台执行,不过在windows下可能不方便就没有试,所以处理时间比较长。想实现进度显示碍于技术没有实现。

Todos:

1. 因为所有章节都已经有了,所以可以做一个显示的界面。现在是只能下载看,不能在web上看。

2. 因为考虑到是生成txt,所以不能处理有些电子书就是图片的情况。如果要支持,只能是生成html格式了。同时还要考虑图片与链接的关系。

3. 增加更多的站点的支持。

4. 没有做界面,很丑陋,需要弄得好看些。

5. 书的tag支持

update 2007/06/11

当前显示界面

你可能感兴趣的:(多线程,数据结构,Ajax,django,Comet)