O’Reilly 是有名的动物书出版公司,当然他们也不仅仅出电子书还有很多别的业务。O’Reilly 在线学习平台上有他们所有出版过的图书都是原版的,但是仅提供在线阅读,虽然也有 App,但是想在 kindle 上看提高阅读体验。
于是抽时间练习练习 Golang 写了个程序,生成 mobi 格式的电子书。Github 地址 oreilly_kindle_book 。
使用说明
- 目前仅支持 macOS、linux, windows 改改应该也可以,但是我手头没有 windows 测不了,或者编个 Docker image 也 ok。
- 需要 O’Reilly 在线学习平台的账号,这是必须的。
- 安装 kindlegen,mobi 的生成就靠它。
oreilly_kindle_book 编译
基于 golang 1.13 开发,目前没有上传二进制包,自行编译吧。
推荐 clone 之后直接 make && make install
。
1 |
|
当然 go get
也可以
1 |
|
oreilly_kindle_book 使用
非常简单
1 |
|
完成后 mobi 会生成在当前目录下。
技术总结
咱要 kindle 用,首先研究下 mobi 的生成。有两个特定格式的文件,一个 ncx (组织目录),一个 opf (组织所有文件),按格式来就能生成。开始梳理需要的资源看看可行性。完事准备写程序都爬下来,生成所需的格式,用 kindlegen 测试生成 mobi,大问题没有小问题不少,挨个解决。最后发现实现登录也不难索性加上了。编写过程中看了很多 go 原生包也使用了不少。
golang 需要注意的点不完全总结:
go func(){}()
实际执行的时间与其所属语句执行时间是不一样的。- 通过
chan
控制并发。 - 大量字符串拼接不要用
+
时间与空间上都复杂。可用使用strings.Builder{}
字节切片的概念。 os.Exit()
结束程序后,defer
不会执行。- 有问题多看看官方文档比什么都强 :)。