Semo系列文章之二:网文收录小工具 semo-plugin-read

前言

上一篇准备了两年的 Semo,今天正式跟你们见面中,已经首次跟你们介绍了 Semo,相信你们看完以后应该仍是一头雾水,不知道 Semo 究竟是个什么东东,为何要用,有学 Semo 的时间,本身不是也能够撸出一个命令行工具么?因此,本篇仍是不打算讲 Semo 的原理,仍是再讲讲应用吧,今天给你们讲讲另外一个用 Semo 写的插件:semo-plugin-readhtml

背景

相信不少小伙伴对掘金都是大大点赞的,里面有各类大神,大牛写的长文教程,极大的下降了新手入门的门槛,面对一篇又一篇长文,你是否有收藏的冲动呢(好比收藏到有道云笔记)?虽然网上有各类文摘工具,可是仍是想要 Markdown 版本,不像语雀,掘金貌似拿不到原文 Markdown,因此,这就是今天介绍的插件的开发初衷,固然实际开发之后就有点收不住了,:)git

思路

整个开发过程,做者一点冲击核心问题的想法都没有,就是想整合,找最好的工具,解决个人问题。因此,首先要找一个能分析出网页主体 HTML 的包,而后再找一个 HTMLMarkdown 的包,最后,再把 Markdown 转成想要的格式。github

固然提及来简单,可是,每一步都是个坎,今天不具体讲遇到的坑,就跟你们说说这东西怎么用,若是感兴趣能够去看看仓库代码:semo-plugin-read-mono,之后有时间能够拆解一下。web

安装

必需要安装 Semo 命令行工具 @semo/clisemo-plugin-read 这个插件:npm

npm i -g @semo/cli semo-plugin-read
复制代码

可选的,咱们能够安装一些 read 的插件,这里能看出插件分两种,一种是格式相关的,一种是数据源相关的,后面假设这些插件都安装过了。浏览器

semo-plugin-read-extend-domain-jianshu
semo-plugin-read-extend-domain-juejin
semo-plugin-read-extend-domain-mp
semo-plugin-read-extend-domain-zhihu
semo-plugin-read-extend-format-editor
semo-plugin-read-extend-format-epub
semo-plugin-read-extend-format-mobi
semo-plugin-read-extend-format-puppeteer
semo-plugin-read-extend-format-wechat
复制代码

帮助信息

因为还在频繁的开发,因此具体选项可能将来还会有变化。bash

$ semo read help

semo read [url]

Parse and read a url or a md file with your favorate format.

Options:
  --format, -F             Output format, use --available-formats to see all supported formats, default: markdown.
                                                                                                    [默认值: "markdown"]
  --clipboard, -C          Input from clipboard
  --proxy, -P              Proxy images to prevent anti-hotlinking.
  --port                   Web server port.                                                               [默认值: 3000]
  --domain                 Set source input from which domain, without protocol and www.
  --title                  Prepend title, use no-title to disable.
  --footer                 Append footer, use no-footer to disable.                                       [默认值: true]
  --toc                    Include TOC
  --rename, -R             New name, with extension.
  --output, -O             Location for output.
  --available-formats, -A  List all supported formats
复制代码

再看看咱们有哪些格式可使用

$ semo read --available-formats

Supported formats: --format=[FORMAT]

  格式      :  说明                                                           :  别名      
  markdown  :  Markdown 格式                                                  :  md        
  debug     :  查看识别到的中间 HTML 结果                                     :            
  console   :  终端直接输出                                                   :            
  clipboard :  输出到剪切板                                                   :            
  editor    :  Markdown 的编辑器 基于国产的 Vditor                            :            
  epub      :  EPUB 格式,基于 Pandoc                                         :            
  mobi      :  MOBI 格式,基于 Calibre 的 ebook-convert                       :            
  pdf       :  PDF 格式,基于 puppeteer                                       :            
  png       :  PNG 格式,基于 puppeteer                                       :            
  jpeg      :  JPEG 格式,基于 puppeteer                                      :  jpg       
  html      :  Markdown 转 HTML 格式,基于 puppeteer                          :            
  wechat    :  基于 Markdown 的微信公众号文章编辑器,基于国产的 Markdown Nice :
复制代码

看到 markdown, html 这些还好理解,哪些什么 wechat 究竟是什么鬼?这个,后面会给你们展现。微信

把网文存成 Markdown 文件,我要存档

如今有什么静态博客工具,咱们不只能够用来作博客,也能够用来作资料库,里面的每篇文章能够都是大牛的文章(固然这种就不建议你实际部署到网上了,本身看能够),用这个插件能够帮你搞定。markdown

我这里随便找了一篇掘金的文章,你们也能够试试别的:dom

semo read https://juejin.im/post/5ee6c7ae6fb9a047e374ac47 --format=markdown
复制代码

这里的 --format=markdown 因为是默认值,也能够不写,这样执行之后,顺利的话,你就能在当前目录找到以文章 title 命令的 Markdown 文档了。

若是不想存放到当前目录,能够用 --output 指定位置,若是不想每次都指定一遍,你就能够用 Semo 的全局配置来设置了,好比个人配置是:

semo-plugin-read:
  output: /Users/semo/Downloads/webclips
复制代码

也能够用命令行作到这一点:

semo config set semo-plugin-read.output /Users/semo/Downloads/webclips -g
复制代码

其余选项也能够这么搞,只要是你不常常改的选项,并且即便这里设置了,只要命令执行时传的参数仍是优先的。

不存到本地文件,只存到剪切板吧

若是你不是用静态博客工具或者 Github 参数来收集资料,你可能也用不到存储的 Markdown 文件,若是用有道云笔记来存 Markdown 也是很香的,我们能够这样传参:

semo read https://juejin.im/post/5ee6c7ae6fb9a047e374ac47 --format=clipboard
复制代码

若是你们以为每次输入命令时还得输入地址,太麻烦,那么不填也能够,可是须要把地址放到剪切板

semo read --clipboard --format-clipboard
复制代码

这样就是一个从剪切板取地址,处理后再存到剪切板的效果了,另外,这里输入的剪切板不只能够是 URL,弄一段 HTML 也是能够的。

我仍是更喜欢 PDF 怎么办

那必须得安排,这里为了保证生成 PDF 的效果,没有采用浏览器内的得打印保存 PDF 的方案,而是用 Puppeteer 的特性,先渲染再导出的,跟其余方案相比,PDF 的分页通常不会有切割内容断字的状况。

semo read https://juejin.im/post/5ee6c7ae6fb9a047e374ac47 --format=pdf
复制代码

同时,这里也支持生成 png, jpeg 和 html 文档。

我还想再改改再存

说实话,自动解析的效果不是百分之百有效的,因此最好仍是校对和修改一下,若是你手头没有趁手的 'Markdown' 编辑器(虽然这种状况几乎不存在),这里能够给你提供一个

semo read https://juejin.im/post/5ee6c7ae6fb9a047e374ac47 --format=editor --proxy
复制代码

因为掘金的同窗开启了防盗链,本地起的 Web 服务在预览时显示不出来图像,加了 --proxy 就能够了把那些图片都代理一下,就能显示出来了。

我想发微信公众号文章,美化一下

安排,必须安排。其实掘金有至关的小伙伴都已经用 mdnice.com 的编辑器了,这里给你们一个离线版,用法和上面的 editor 相似。

semo read https://juejin.im/post/5ee6c7ae6fb9a047e374ac47 --format=wechat --proxy
复制代码

这里有点儿没弄好,首次打开会白屏,再刷新一下就行了。

这个编辑器仍是很不错的,若是就是想随手谢谢 Markdown,也能够不传 URL

semo read --format=wechat
复制代码

若是嫌每次输入 --format=wechat 太麻烦,能够把这个写到全局配置:

semo config set format wechat -g
复制代码

这样之后,直接 semo read 就开启了一个 Mardown 编辑器,是否是很爽呀?

我比较喜欢用苹果的 Books 软件读 epub 格式的电子书

这里是基于 pandoc 从 Markdown 生成的,若是没安装能够装一下先。

brew install pandoc
semo read https://juejin.im/post/5ee6c7ae6fb9a047e374ac47 --format=editor --epub --toc
复制代码

我比较喜欢 Kindle 来读 mobi 格式的电子书

这里是基于 Calibreebook-convert 生成的,须要先安装 Calibre

semo read https://juejin.im/post/5ee6c7ae6fb9a047e374ac47 --format=editor --mobi
复制代码

这里有的 BUG,ebook-convert 不支持解析远程图片,这个很不方便,因此推荐你们先转换成 epub 格式,而后再把 epub 转成 mobi

ebook-convert a.epub b.mobi
复制代码

比较少用的格式 debugconsole

这两种都是把解析结果输出到命令行,用处不是很大,就不细说了。

关于适用范围和限制

除了掘金,也能够试试别的网页,好比 csdn, 博客园 或者一些大牛的私人博客等等,不支持的主要是那些Ajax 渲染的文章,好比 infoq。另外,能识别的也不必定识别的很完美,须要经过 read 的 domain 插件作解析的预处理和后处理,都是一些正则替换,这部分还有不少工做要作,后面会重点把你们经常使用的几个网站的解析规则弄好,也须要你们的支持和帮助。

最后

虽然做者在这个项目上也投入了不少时间,可是更重要的是验证和展现 Semo 的能力,好比这里能够看出 Semo 能够实现插件,以及插件的插件的效果, 不少时候 Semo 的能力扩展都是用实际的业务场景倒逼出来的,因此欢迎你们使用,和给我提意见。

--- 特别鸣谢在本文中出场的这篇掘金文章,虽然是随便找的,也是缘分

交流群

目前没有弄公众号,微信群什么的,弄了一个钉钉群,你们感兴趣的同窗能够加一下,有问题能够在里面交流。

相关文章
相关标签/搜索