This Project is aimed at creating a kindle book generator. Fetching data from internet, then combo all data to a mini .mobi
book, what you have to do is just edit profiles and run build commands.
Data comes in three way:
- spider fetch a uri content, but you need to config the class the article's title and content
- spider fetch a rss source
- from local file
Here is the structure of project:
After preparing data, The program will filter some dirty data, and transfer remote file link to local file, that means it will download the resources.
Finally, using kindleGen generate book. I had put the kindleGen file to /bin/kindlegen, 28M.
First, run this command:
chmod +x bin/**/kindlegen
Try a simple demo:
git clone https://github.com/barretlee/kindleBookMaker.git;
cd kindleBookMaker;
npm install;
node index;
open build/*.mobi;
There are lots of function, simplify to three command.
- generate from rss:
node index --rss https://barretlee.com/rss2.xml
# node index -r https://barretlee.com/rss2.xml
- generate from a uri,
-u URL titleQuery ContentQuery FilterRegExp
:
node index --uri \
https://www.barretlee.com/blog/2016/04/28/mini-query/ \
.post-title \
.post-content \
/<div class="shit-spider"[\s\S]+?<\/div>/
- generate from local directory:
node index --dirctory ./src/demo/
# node index -d ./src/demo/
and three other arguments:
--verbose
,-v
, detail about kindle generation.--help
,-h
, help.-push2kindle
,-p
, push the builded.mobi
file to your 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: '[email protected]',
password: 'your-email-password',
kindle: '[email protected]'
}
};
entry
, can be a String or an Objectbase
, the entry base, where remote file placed.list
, it impacts the order of book article list.
bookInfo
, be attention to thecoverImage
, you should better set a value.ouput
, optional, default is./build
and[name]
.singlePage
, optional, for uri spiderpush2kindle
, optional, thekindle
param is your device matched email, can be edit at here.
- generate from markdown file directly.
- fix push2kindle bug, cannot push
.mobi
format file, i don't konw why.
- https://www.idpf.org/epub/30/spec/epub30-publications.html#sec-item-property-values
- https://www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm
- https://www.aliciaramirez.com/2014/05/how-to-make-a-kindle-ebook-from-scratch/
The MIT License (MIT)
Copyright (c) 2016 小胡子哥