Node.js脚本监听OneDrive并发布文章到Hexo

部署好博客之后,博主一直在想办法简化发布文章的过程。上一篇介绍了自己编写的简易本地监听器来发布文章,有效果但也不算很方便,因为使用sftp上传文章总归有些繁琐。本文将介绍博主新编写的Node.js工具,不仅可以监听本地文件,更可以监听OneDrive网盘指定目录,并实现自动发布。算是上一个工具的进化版,可以大幅简化博客发布文章的流程,毕竟只需要将写好的文章上传至网盘,或本地的OneDrive目录即可。

下载安装

源码地址:Github

你可以在想要存放的目录克隆或者下载本项目

git clone https://github.com/SpereShelde/hexo-auto-deployer.git

或者

wget -O hexo-auto-deployer.zip 'https://github.com/SpereShelde/hexo-auto-deployer/archive/master.zip'

unzip hexo-auto-deployer.zip

配置文件

运行前需要编写安装目录下的配置文件config.js

method目前可选两种方法。

  • local方法为监听本地目录,与上一篇博文介绍的工具一样
  • oneDrive方法为监听OneDrive网盘目录,更为方便

OneDrive 配置

如果你选择oneDrive方式,请参考下方内容填写配置文件。

想操作OneDrive,必须创建Azure应用。

redirect_uri, client_idclient_secret 三项的默认值即为博主创建的应用的对应值。小白如果图方便可以直接使用,目前没有已知风险,如果有,烦请评论区告知博主。如果希望完全掌控,可以选择自己创建Azure应用。

OneDrive - 创建Azure应用(可选)

使用你的微软账号登录Azure: https://portal.azure.com 搜索进入 应用注册页面然后点击新注册。填入名称(随意),类型(随意),和重定向URI(一般填http://localhost/即本地地址即可,此项为配置文件中的redirect_uri)。

创建之后,概述页面的 应用程序(客户端)ID 即配置文件中的client_id

在身份验证页面创建密码。密码的 即配置文件中的client_secret。请及时保存,此值只显示一次。

在API权限页面为应用添加权限。

OneDrive - code

code可以用于登录您的OneDrive账号,因此需要您手动授权。为此您需要访问下方页面,按提示登录和授权并最终跳转到空白页面,此时不要关闭页面,复制地址栏中的 code= 之后以及的内容。

注意:企业版OneDrive用户在这一步中地址栏的最后可能包含&session_state=xxxxxx,请手动去除。即复制 code= 之后、&session_state之前的内容。

然后将复制的code填入配置文件中的code一栏

上文用到的URL:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=c7596fb8-beee-4b96-ac86-5277779f4820&response_type=code&scope=offline_access+files.readwrite+files.read+files.read.all+files.readwrite.all&redirect_uri=http://localhost/onedrive-login

注意:此地址为博主创建的应用。如果自己创建了Azure应用,需要如下更改此地址(别忘了删除{}):

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={应用程序(客户端)ID}&response_type=code&scope=offline_access+files.readwrite+files.read+files.read.all+files.readwrite.all&redirect_uri={重定向URI}

OneDrive - blogs

此项为监听的博客,如果本地部署了多个博客需要部署,可以添加多组配置。

其中

  • blogPath 为本地博客根目录
  • localPostsPath 为博客文章目录
  • remotePostsPath 为OneDrive中存放博客文章的目录
  • cycle 为监听间隔,单位为秒

Local 配置

如果你选择 local 方式,请参考下方内容填写配置文件。

Local - blogs

此项为监听的博客,如果本地部署了多个博客需要部署,可以添加多组配置。

其中

  • blogPath 为本地博客根目录
  • localPostsPath 为博客文章目录

此方法不需要添加监听间隔,会在检测到文件更新后立即部署博客。

运行

编写好配置文件之后,使用命令 npm start 或者node hexoAutoDeploy.js 即可运行

推荐在Screen中运行: screen -R auto

原理

原理没有过多的讲解,有需要的读者可以阅读源码。

Local 方法的原理

参考上一篇博文 的介绍

OneDrive 方法的原理

  • 通过OneDrive提供的API进行登录操作并获取令牌
  • 不断设置延迟任务刷新登陆状态和令牌
  • 设置循环任务不断查询指令目录下的文件状态
    • 如果有新文件则获取下载直链并下载
    • 如果有文件被更新,即OneDrive中某文件的修改时间比本地对应文件靠后,则获取下载直链并下载
    • 如果有文件被删除,则删除本地对应文件
    • 如果有以上三种情况发生则执行系统命令重新部署Hexo

评论