diff --git a/bin/article b/bin/article new file mode 100755 index 0000000..d08e623 --- /dev/null +++ b/bin/article @@ -0,0 +1,53 @@ +#!/bin/bash +# Downloads and converts an article to EPUB + +ok="yes" +if ! command -v mercury-parser >/dev/null; then + echo 'Could not find mercury-parser. Get it from:' >&2 + echo ' https://mercury.postlight.com/web-parser/' >&2 + ok="no" +fi + +if ! command -v jq >/dev/null; then + echo 'Could not find jq. Get it from:' >&2 + echo ' https://stedolan.github.io/jq/' >&2 + ok="no" +fi + +if ! command -v pandoc >/dev/null; then + echo 'Could not find pandoc. Get it from:' >&2 + echo ' https://pandoc.org/' >&2 + ok="no" +fi + +if [ "$ok" != "yes" ]; then + exit 1 +fi + +if [ -z "$1" ]; then + echo 'You must specify at least one URL.' >&2 + exit 1 +fi + +echo "Parsing $1" >&2 +json=$(mercury-parser $1) +title=$(echo $json | jq -r '.title // "Untitled"') +author=$(echo $json | jq -r '.author // "Unknown"') +pubdate=$(echo $json | jq -r '.date_published') +description=$(echo $json | jq -r '.excerpt // ""') +description="${description}

${1}" +content=$(echo $json | jq -r .content) +shift +for url in "$@"; do + echo "Parsing and appending $url" >&2 + content="${content}$(mercury-parser $url | jq -r .content)" + description="${description}
${url}" +done +filename="${author} - ${title}.epub" +pandoc -f html -o "${filename}" \ + --metadata title="${title}" \ + --metadata author="${author}" \ + --metadata date="${pubdate}" \ + --metadata description="${description}" \ + <(echo $content) \ + && echo "Wrote ${filename}" >&2