自动推送新博客的泛用实现方案

简介: 自动推送新博客的泛用实现方案

👉️ 原文 URL: https://www.inevitable.tech/posts/a1b574bb/

✍️ 作者: 琉璃

📝Description:

这是一个适合大多数人的解决方案。它可以帮助你自动推送新博客给你的读者。有效提高网站的访问量。

这是一个适合大多数人的解决方案。它可以帮助你自动推送新博客给你的读者。有效提高网站的访问量。

Intro

前情回顾

Hexo 使用 Web Push Notification 浏览器通知推送 中,我们讲到了 Web push notification 的好处,以及如何配置 Webpushr。 在 Auto web push notification 中,我们讨论了自动推送通知的特殊解决方案。这个方案对于工具链有很多的局限性。网站源码必须在 Github 上,网站需要托管在 Netilfy 上,必须使用 hexo-abbrlink 这个插件。

在本篇文章中,我将给出一个更加泛用的解决方案。这次不再有那么的前提条件。唯一的前提条件是你需要注册 Webpushr, 将你的网站加入到 Webpushr 中。你并不需要将 Webpushr 的 SDK 加入你的网站。这个插件会为你搞定一切。

如果你想使用其他的通知推送服务,请提交 Issue 或者 PR。我们可以为其增加兼容性改进。

原理

想法

这一次我们只需要安装 hexo-web-push-notification 就可以解决所有问题。甚至 SDK 的集成也自动化了。

自动集成 SDK 很简单。将 SDK 代码直接插入渲染好的 HTML 中即可。

通知部分的想法与 Auto web push notification 一样。我们生成 newPost.jsonnewPost.json 包含了最新文章的信息。接着我们对比本地 newPost.json 与在线网站上的 newPost.json。如果文章的 ID 有变化,那么我们就对读者进行通知推送。

实现

除开简单的 SDK 自动集成,插件主要分为两部分。第一部分生成 newPost.json。第二部分处理通知推送。

使用 Hexo Event,我们让第一部分在 hexo generate 之后执行。第二部分在 hexo deploy 之前执行。这个时候网站还没有进行更新。

第一部分

第一部分所做的事情很简单。找到最新发布的文章,根据其信息生成 newPost.json 到本地 public/newPost.json。以下是 newPost.json 的范例:

{
  "title": "Auto web push notification",
  "id": "posts/afd56cf2/",
  "date_published": "02/24/2020",
  "summary": " 如何自动通知读者有更新了?即只要正常更新博客,读者便可以在第一时间收到关于新文章的通知。",
  "url": "https://www.inevitable.tech/posts/afd56cf2/",
  "tags": ["hexo", "push notifications", " 自动化 ", "CI"],
  "categories": [" 开发 "]
}
JSON

这一次,id 直接使用文章的路径。不管你怎么魔改 hexo,文章的路径永远具有唯一性。因此这次的解决方案适用范围更加广泛。

相比上一次的直接从源文件中读取数据进行处理。这一次的数据来自 Hexo API,加强了适用性。不管你的源文件长成什么样,只要 Hexo 能读懂,这个插件就能正常工作。

第二部分

第二部分将本地 newPost.json 于网站上的 newPost.json 进行比对。如果文章 ID 不一样,那么便是作者进行了更新(没考虑过作者删除最新文章的可能性)。这个时候便触发通知推送。推送内容包含文章标题,链接以及节选。节选便是 Summary 部分。

安装和使用

想要自动推送通知,你得先得处理好 Webpushr。你需要注册一个账号,加入你的网站,配置好 Safari 推送的证书,自定义请求通知弹窗的样式。具体可以参考 Hexo 使用 Web Push Notification 浏览器通知推送中,

接下来的事情全交给 hexo-web-push-notification

安装这个插件,只需要执行 npm i hexo-web-push-notification --save

使用这个插件前记得添加以下配置到位于 hexo 根目录的 _config.yml

webPushNotification:
  webpushrKey: "your webpushr rest api key"
  webpushrAuthToken: "your webpushr authorize token"
  trackingCode: "AEGlpbdgvBCWXqXI6PtsUzobY7TLV9gwJU8bzMktrwfrSERg_xnLVbjpCw8x2GmFmi1ZcLTz0ni6OnX5MAwoM88"
DTS

trackingCode 可能有点难找。打开 webpushr,进入到配置网站的主页。打开 Setup>TrackingCode。tracking code 长这个样子:

<!-- start webpushr tracking code -->
<script>(function(w,d, s, id) {w.webpushr=w.webpushr||function(){(w.webpushr.q=w.webpushr.q||[]).push(arguments)};var js, fjs = d.getElementsByTagName(s)[0];js = d.createElement(s); js.id = id;js.src = "https://cdn.webpushr.com/app.min.js";
fjs.parentNode.appendChild(js);}(window,document, 'script', 'webpushr-jssdk'));
webpushr('init','AEGlpbdgvBCWXqXI6PtsUzobY7TLV9gwJU8bzMktrwfrSERg_xnLVbjpCw8x2GmFmi1ZcLTz0ni6OnX5MAwoM88');</script>
<!-- end webpushr tracking code -->
JS

最后第二行的 AEGlpbdgvBCWXqXI6PtsUzobY7TLV9gwJU8bzMktrwfrSERg_xnLVbjpCw8x2GmFmi1ZcLTz0ni6OnX5MAwoM88 便是你的 trackingCode

更多安装指南请参考 README.md

后记

这是我第一次发行 NPM 包。我本来使用 Github 的包管理服务。但过程实在是有些麻烦。众所周知,发行包的第一步是 npm adduser。如果是发行到 NPM 上,直接输入用户名和密码就行。但是如果是发行到 Github 上,密码得使用 Personal Access Token。生成 Personal Access Token 有点小麻烦。

包的名称似乎必须得是 Scoped。也就是包的名称必须得是作者名字开头。

成功发行到 Github 后,我遇到了不能下载的问题。使用 npm i 显示找不到我的包。可能运行 npm i 的时候,npm 在 NPM 上面找包,而不是 Github 上面找包。

鉴于以上并不是特别良好的体验,我想要删除这个包,将其在 NPM 上发行。看了一圈文档和别人的答案,删除包的唯一方法就是删除这个仓库。

最后,还是 NPM 香。

相关文章
|
6月前
|
消息中间件 安全 物联网
MQTT常见问题之新增自定义主题后平台侧收不到发布的数据如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
Kubernetes 网络协议 前端开发
k8s更新策略-系列文章第一篇:蓝绿发布
k8s更新策略-系列文章第一篇:蓝绿发布
|
3月前
|
Prometheus DataWorks 安全
DataWorks产品使用合集之如何完成更新完自动推送到外部系统触发更新
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
2月前
|
API
草料重磅功能上新!可跨分区移动或复制账号下内容
支持将 分区 下的内容移动或复制到其他分区。适用于将原初始分区下的内容按业务划分,移动到其他分区。或者当物品流转或业务变更时,可以及时将码及数据移动到对应分区。
|
3月前
|
Kubernetes 监控 测试技术
在K8S中,如何实现上线发布流程(灰度发布)?
在K8S中,如何实现上线发布流程(灰度发布)?
|
3月前
|
敏捷开发 测试技术 API
阿里云云效产品使用合集之怎么配置扫描触发方式
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
敏捷开发 数据可视化 Devops
阿里云云效产品使用合集之如何禁止代码域CODEOWNER有合并请求时发送邮件
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
11月前
|
数据库
【博客项目】—用户新增功能(九)
【博客项目】—用户新增功能(九)
|
存储 开发工具 git
二十四.SpringCloudConfig源码-配置拉取流程
这篇文章是接上一篇的,因为文章太长看起来太累,所以就分了一下
|
Prometheus Kubernetes Cloud Native
Flagger(应用自动发布)介绍和原理剖析
## 简介 [Flagger](https://github.com/weaveworks/flagger)是一个能使运行在k8s体系上的应用发布流程全自动(无人参与)的工具, 它能减少发布的人为关注时间, 并且在发布过程中能自动识别一些风险(例如:RT,成功率,自定义metrics)并回滚. ## 主要特性 ![features](https://intranetproxy.ali
4484 0