Kindle 电子书生成工具
2016-05-22 00:00
525 查看
摘要: Kindle 电子书的构建工具,从互联网上抓取数据,合并整合都生成一本小巧的 .mobi 电子书。而使用这个工具,你只需要编辑下配置文件,或者直接运行命令行工具
本项目旨在写一个 Kindle 电子书的构建工具,从互联网上抓取数据,合并整合都生成一本小巧的
项目地址:https://github.com/barretlee/kindleBookMaker
基本原理:根据 OPF 规范生成 KF8 格式的
通过抓取单个 uri 的内容,配合 title 和 content DOM 选择器,获取文章的标题和内容
通过抓取 RSS 源获取内容
使用本地数据,比如 hexo build 目录下的 html 文件
下图为该工具的一个结构图:
抓到数据后,工具会帮助分析过滤数据,尤其对 hexo 生成的文件做了特殊的处理,后续也会添加几个扩展功能(比如之间转换 markdown 文件),如果 html 中包含了远程内容——CSS、图片等——程序会全部抓取过来。
最后,使用官方提供了 kindleGen 工具构建,我已经把这个文件放到了 /bin/kindlegen下,大约 28M,有点大。
提供了很多方法可以调用,不过都通过命令行的方式简化了:
从 RSS 源构建:
从单个 URI 构建,
从本地构建
还有另外三个参数:
找到 kindle 帐号偶尔不接受我推送
http://www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm
http://www.aliciaramirez.com/2014/05/how-to-make-a-kindle-ebook-from-scratch/
本项目旨在写一个 Kindle 电子书的构建工具,从互联网上抓取数据,合并整合都生成一本小巧的
.mobi电子书。而使用这个工具,你只需要编辑下配置文件,或者直接运行命令行工具。
项目地址:https://github.com/barretlee/kindleBookMaker
基本原理:根据 OPF 规范生成 KF8 格式的
.mobi电子书
项目结构
数据有这么几个来源:通过抓取单个 uri 的内容,配合 title 和 content DOM 选择器,获取文章的标题和内容
通过抓取 RSS 源获取内容
使用本地数据,比如 hexo build 目录下的 html 文件
下图为该工具的一个结构图:
抓到数据后,工具会帮助分析过滤数据,尤其对 hexo 生成的文件做了特殊的处理,后续也会添加几个扩展功能(比如之间转换 markdown 文件),如果 html 中包含了远程内容——CSS、图片等——程序会全部抓取过来。
最后,使用官方提供了 kindleGen 工具构建,我已经把这个文件放到了 /bin/kindlegen下,大约 28M,有点大。
使用方法
可以下载代码之后,尝试运行下已经提供了一个 DEMO(封面图片就懒得换了,是我自己的头像):git clone https://github.com/barretlee/kindleBookMaker.git; cd kindleBookMaker; npm install; node index; open build/*.mobi; |
从 RSS 源构建:
node index --rss http://barretlee.com/rss2.xml # node index -r http://barretlee.com/rss2.xml[/code] |
-u URL titleQuery ContentQuery FilterRegExp, 其中 titleQuery 为文章标题的 css query,ContentQuery 为文章主要内容的 css query,FilterRegExp 为正则过滤:
node index --uri \ http://www.barretlee.com/blog/2016/04/28/mini-query/ \ .post-title \ .post-content \ /<div class="shit-spider"[\s\S]+?<\/div>/ |
node index --dirctory ./src/demo/ # node index -d ./src/demo/ |
--verbose,
-v, 查看 kindle 构建的详细细节,因为编译也可能出错
--help,
-h, 帮助说明
-push2kindle,
-p, 将构建的
.mobi文件推送你设定的 kindle 账户上
配置
var moment = require('moment'); module.exports = { // entry: './src/KF8-Demo', entry: { base: './src/KF8-Demo', list: [] }, bookInfo: { title: "Barret Lee's Personal Website", lang: "zh", creator: "Barret Lee", copyright: "Barret Lee", publisher: "", coverImage: 'coverImage.png' }, /*option*/ output: { base: './build', format: '[name]-' + moment().format('YYYYMMDD') }, /*option for uri*/ singlePage: { title: 'div.title', description: 'div.content', reg: function(data) { return data.replace(/<div class="shit-spider"[\s\S]+?<\/div>/, ''); } }, /*option*/ push2kindle: { email: 'barret.china@gmail.com', password: 'your-email-password', kindle: 'barretlee.com@kindle.cn' } }; |
entry, 可以为一个 String 或者 Object
base, 入口地址,下载的文件都会放在这里
list, list 参数,会影响最后生成的电子书的文章排序
bookInfo, 注意设置
coverImage,它为书籍封面图片
ouput, 可选参数, 默认值为
./build和
[name]
singlePage, 可选参数, 从 URI 爬取数据时会用到
push2kindle, 可选参数,
kindle参数为你设备对应的推送邮箱, 可以在 这里 设置
Todo
直接从 Markdown 文件生成内容找到 kindle 帐号偶尔不接受我推送
.mobi文件的原因,意思就是有的时候推送未成功
参考文献
http://www.idpf.org/epub/30/spec/epub30-publications.html#sec-item-property-valueshttp://www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm
http://www.aliciaramirez.com/2014/05/how-to-make-a-kindle-ebook-from-scratch/
相关文章推荐
- php 一致性hash
- Android 之动态加载代码
- How to make your vim support scala syntax highligh
- [leetcode]【数组】33. Search in Rotated Sorted Array
- 如何用正则表达式匹配包括换行符的任意字符?
- web前端实习
- Android Studio使用Lambda
- IDEA导入Maven项目(Spring+Mybatis)后登录报错:找不到对应的Dao方法
- web应用中的路径
- 从bookstore项目中学到的(1)
- EL表达式
- 标签导航和树形结构导航整合使用步骤
- 应用程序设置与配置
- UISplitViewController 分屏控制器
- TextKit 文本编辑
- UITableView初识(1)
- UITableView--多组数据显示
- C Primer Plus 第5章 运算符、表达式和语句 5.7 一个示例程序
- 数据库定时备份原理,代码
- FTP方式的文件上传和下载的Java代码