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_id
和 client_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:
注意:此地址为博主创建的应用。如果自己创建了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