Adds support for cover image and title

This commit is contained in:
Nemo 2020-01-15 19:13:56 +05:30
parent e4849f728b
commit 7906f151e6
2 changed files with 285 additions and 271 deletions

View File

@ -13,9 +13,12 @@ const getArticle = async url => {
} }
}; };
module.exports = (url, epubPath, language="en-US") => { module.exports = (url, epubPath, title, coverURL, language="en-US") => {
getArticle(url).then(res => { getArticle(url).then(res => {
let xml = `<dc:title id="epub-title-1">${res.title}</dc:title>
title = title ? title : res.title;
let xml = `<dc:title id="epub-title-1">${title}</dc:title>
<dc:date>${res.published}</dc:date> <dc:date>${res.published}</dc:date>
<dc:language>${language}</dc:language> <dc:language>${language}</dc:language>
<dc:identifier>${url}</dc:identifier> <dc:identifier>${url}</dc:identifier>
@ -26,10 +29,9 @@ module.exports = (url, epubPath, language="en-US") => {
fs.writeFileSync(html, res.content); fs.writeFileSync(html, res.content);
fs.writeFileSync(metadata, xml); fs.writeFileSync(metadata, xml);
const imageUrl = coverURL ? coverURL : res.image;
const imageUrl = res.image; const dl = new DownloaderHelper(imageUrl, "/tmp", {
const dl = new DownloaderHelper(res.image, "/tmp", {
fileName: "epub-to-image.jpg" fileName: "epub-to-image.jpg"
}); });

544
index.js
View File

@ -3,269 +3,281 @@ var argv = require("yargs").argv;
const generateEPUB = require("./generate"); const generateEPUB = require("./generate");
require("yargs") // eslint-disable-line require("yargs") // eslint-disable-line
.usage("$0 --output [output] <url>") .usage("$0 --output [output] --title [title] <url>")
.help("h") .help("h")
.command( .command(
"$0 <url>", "$0 <url>",
"Generate EPUB file from URL", "Generate EPUB file from URL",
yargs => { yargs => {
yargs yargs
.positional("url", { .positional("url", {
describe: "The URL to download", describe: "The URL to download",
type: "string" type: "string"
}) })
.option("output", { .option("output", {
alias: "o", alias: "o",
type: "string", type: "string",
default: "url-to-epub.epub", default: "url-to-epub.epub",
description: "Output file to save EPUB" description: "Output file to save EPUB"
}) })
.option("language", { .option("title", {
alias: "l", alias: "t",
type: "string", type: "string",
default: "en-US", default: null,
description: "A valid language tag", description:
choices: [ "Title of the book, if not the same as the page title"
"af", })
"af-ZA", .option("cover-url", {
"ar", type: "string",
"ar-AE", default: null,
"ar-BH", description: "Image URL to download as cover"
"ar-DZ", })
"ar-EG", .option("language", {
"ar-IQ", alias: "l",
"ar-JO", type: "string",
"ar-KW", default: "en-US",
"ar-LB", description: "A valid language tag",
"ar-LY", choices: [
"ar-MA", "af",
"ar-OM", "af-ZA",
"ar-QA", "ar",
"ar-SA", "ar-AE",
"ar-SY", "ar-BH",
"ar-TN", "ar-DZ",
"ar-YE", "ar-EG",
"az", "ar-IQ",
"az-AZ", "ar-JO",
"az-Cyrl-AZ", "ar-KW",
"be", "ar-LB",
"be-BY", "ar-LY",
"bg", "ar-MA",
"bg-BG", "ar-OM",
"bs-BA", "ar-QA",
"ca", "ar-SA",
"ca-ES", "ar-SY",
"cs", "ar-TN",
"cs-CZ", "ar-YE",
"cy", "az",
"cy-GB", "az-AZ",
"da", "az-Cyrl-AZ",
"da-DK", "be",
"de", "be-BY",
"de-AT", "bg",
"de-CH", "bg-BG",
"de-DE", "bs-BA",
"de-LI", "ca",
"de-LU", "ca-ES",
"dv", "cs",
"dv-MV", "cs-CZ",
"el", "cy",
"el-GR", "cy-GB",
"en", "da",
"en-AU", "da-DK",
"en-BZ", "de",
"en-CA", "de-AT",
"en-CB", "de-CH",
"en-GB", "de-DE",
"en-IE", "de-LI",
"en-JM", "de-LU",
"en-NZ", "dv",
"en-PH", "dv-MV",
"en-TT", "el",
"en-US", "el-GR",
"en-ZA", "en",
"en-ZW", "en-AU",
"eo", "en-BZ",
"es", "en-CA",
"es-AR", "en-CB",
"es-BO", "en-GB",
"es-CL", "en-IE",
"es-CO", "en-JM",
"es-CR", "en-NZ",
"es-DO", "en-PH",
"es-EC", "en-TT",
"es-ES", "en-US",
"es-GT", "en-ZA",
"es-HN", "en-ZW",
"es-MX", "eo",
"es-NI", "es",
"es-PA", "es-AR",
"es-PE", "es-BO",
"es-PR", "es-CL",
"es-PY", "es-CO",
"es-SV", "es-CR",
"es-UY", "es-DO",
"es-VE", "es-EC",
"et", "es-ES",
"et-EE", "es-GT",
"eu", "es-HN",
"eu-ES", "es-MX",
"fa", "es-NI",
"fa-IR", "es-PA",
"fi", "es-PE",
"fi-FI", "es-PR",
"fo", "es-PY",
"fo-FO", "es-SV",
"fr", "es-UY",
"fr-BE", "es-VE",
"fr-CA", "et",
"fr-CH", "et-EE",
"fr-FR", "eu",
"fr-LU", "eu-ES",
"fr-MC", "fa",
"gl", "fa-IR",
"gl-ES", "fi",
"gu", "fi-FI",
"gu-IN", "fo",
"he", "fo-FO",
"he-IL", "fr",
"hi", "fr-BE",
"hi-IN", "fr-CA",
"hr", "fr-CH",
"hr-BA", "fr-FR",
"hr-HR", "fr-LU",
"hu", "fr-MC",
"hu-HU", "gl",
"hy", "gl-ES",
"hy-AM", "gu",
"id", "gu-IN",
"id-ID", "he",
"is", "he-IL",
"is-IS", "hi",
"it", "hi-IN",
"it-CH", "hr",
"it-IT", "hr-BA",
"ja", "hr-HR",
"ja-JP", "hu",
"ka", "hu-HU",
"ka-GE", "hy",
"kk", "hy-AM",
"kk-KZ", "id",
"kn", "id-ID",
"kn-IN", "is",
"ko", "is-IS",
"ko-KR", "it",
"kok", "it-CH",
"kok-IN", "it-IT",
"ky", "ja",
"ky-KG", "ja-JP",
"lt", "ka",
"lt-LT", "ka-GE",
"lv", "kk",
"lv-LV", "kk-KZ",
"mi", "kn",
"mi-NZ", "kn-IN",
"mk", "ko",
"mk-MK", "ko-KR",
"mn", "kok",
"mn-MN", "kok-IN",
"mr", "ky",
"mr-IN", "ky-KG",
"ms", "lt",
"ms-BN", "lt-LT",
"ms-MY", "lv",
"mt", "lv-LV",
"mt-MT", "mi",
"nb", "mi-NZ",
"nb-NO", "mk",
"nl", "mk-MK",
"nl-BE", "mn",
"nl-NL", "mn-MN",
"nn-NO", "mr",
"ns", "mr-IN",
"ns-ZA", "ms",
"pa", "ms-BN",
"pa-IN", "ms-MY",
"pl", "mt",
"pl-PL", "mt-MT",
"ps", "nb",
"ps-AR", "nb-NO",
"pt", "nl",
"pt-BR", "nl-BE",
"pt-PT", "nl-NL",
"qu", "nn-NO",
"qu-BO", "ns",
"qu-EC", "ns-ZA",
"qu-PE", "pa",
"ro", "pa-IN",
"ro-RO", "pl",
"ru", "pl-PL",
"ru-RU", "ps",
"sa", "ps-AR",
"sa-IN", "pt",
"se", "pt-BR",
"se-FI", "pt-PT",
"se-NO", "qu",
"se-SE", "qu-BO",
"sk", "qu-EC",
"sk-SK", "qu-PE",
"sl", "ro",
"sl-SI", "ro-RO",
"sq", "ru",
"sq-AL", "ru-RU",
"sr-BA", "sa",
"sr-Cyrl-BA", "sa-IN",
"sr-SP", "se",
"sr-Cyrl-SP", "se-FI",
"sv", "se-NO",
"sv-FI", "se-SE",
"sv-SE", "sk",
"sw", "sk-SK",
"sw-KE", "sl",
"syr", "sl-SI",
"syr-SY", "sq",
"ta", "sq-AL",
"ta-IN", "sr-BA",
"te", "sr-Cyrl-BA",
"te-IN", "sr-SP",
"th", "sr-Cyrl-SP",
"th-TH", "sv",
"tl", "sv-FI",
"tl-PH", "sv-SE",
"tn", "sw",
"tn-ZA", "sw-KE",
"tr", "syr",
"tr-TR", "syr-SY",
"tt", "ta",
"tt-RU", "ta-IN",
"ts", "te",
"uk", "te-IN",
"uk-UA", "th",
"ur", "th-TH",
"ur-PK", "tl",
"uz", "tl-PH",
"uz-UZ", "tn",
"uz-Cyrl-UZ", "tn-ZA",
"vi", "tr",
"vi-VN", "tr-TR",
"xh", "tt",
"xh-ZA", "tt-RU",
"zh", "ts",
"zh-CN", "uk",
"zh-HK", "uk-UA",
"zh-MO", "ur",
"zh-SG", "ur-PK",
"zh-TW", "uz",
"zu", "uz-UZ",
"zu-ZA" "uz-Cyrl-UZ",
] "vi",
}) "vi-VN",
.example( "xh",
'$0 -o articulated-restraint.epub "https://www.tor.com/2019/02/06/articulated-restraint-mary-robinette-kowal/"' "xh-ZA",
) "zh",
.demandOption(["url"]); "zh-CN",
}, "zh-HK",
argv => { "zh-MO",
generateEPUB(argv.url, argv.output); "zh-SG",
} "zh-TW",
).argv; "zu",
"zu-ZA"
]
})
.example(
'$0 --title "Articulated Restraint" -o articulated-restraint.epub "https://www.tor.com/2019/02/06/articulated-restraint-mary-robinette-kowal/"'
)
.demandOption(["url"]);
},
argv => {
generateEPUB(argv.url, argv.output, argv.title, argv['cover-url'], argv.language);
}
).argv;