UNPKG

mediumcli

Version:

Medium for Hackers - A CLI to Medium Stories

87 lines (73 loc) 2.31 kB
'use strict'; var rp = require('request-promise'); var cheerio = require('cheerio'); var htmlToText = require('html-to-text'); var Stream = require('string-stream'); var pager = require('default-pager'); var html2commonmark = require('html2commonmark'); var marked = require('marked'); var TerminalRenderer = require('marked-terminal'); marked.setOptions({ // Define custom renderer renderer: new TerminalRenderer() }); // var url = 'https://medium.com/@googleforwork/one-googler-s-take-on-managing-your-time-b441537ae037'; function getTextFromHtml(html) { return htmlToText.fromString(html); } function getMarkdownFromHtml(html) { //return toMarkdown(html); var converter = new html2commonmark.JSDomConverter({             rawHtmlElements: [],             ignoredHtmlElements: ['body', 'div', 'section', 'figure', 'figcaption'],             interpretUnknownHtmltrue         }); var renderer = new html2commonmark.Renderer(); var ast = converter.convert(html); var markdown = renderer.render(ast);  return markdown; } function printArticle(content) { var readStream = new Stream(content); readStream.pipe(pager(function () { console.log('(END)'); })); } function printMarkdown(content) { console.log(marked(content)); } function parseContent(options) { var $ = cheerio.load(options.html); var articleMarkup = $('.postArticle-content').html(); var content = options.markdown ? getMarkdownFromHtml(articleMarkup) : getTextFromHtml(articleMarkup); return content; } function requestContent(url) { return rp(url); } // Show Content to user function showContent(options) { requestContent(options.url).then(function (body) { var content = parseContent({html: body, markdown: options.markdown}); options.markdown ? printMarkdown(content) : printArticle(content); }, function () { console.log('Oops! Something went wrong!'); }); } // function validateUrl (url) { // if (urlParser.parse(url).host === 'medium.com') { // return true; // } // return false; // } function show(options) { // Stop validating url as medium now allows custom urls // if (!validateUrl(url)) { // console.log('Sorry! Only Medium articles are allowed!'); // return; // } showContent(options); } module.exports = { show: show };