语雀-Hexo 同步写作(yuque-hexo)

前情提要

于 CentOS 部署同步写作 yuque-hexo

部署阶段

一、自有服务器解决思路

1.安装 yuque-hexo

npm i -g yuque-hexo

进一步了解可查阅 官方文档地址

2.配置 package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
"yuqueConfig": {
"postPath": "source/_posts/yuque",
"cachePath": "yuque.json",
"lastGeneratePath": "./last-generate-timestamp.txt",
"baseUrl": "https://www.yuque.com/api/v2",
"login": "catooilg",
"repo": "kb",
"onlyPublished": false,
"onlyPublic": false,
"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxx" /*语雀token*/
"imgCdn": {
"concurrency": 0,
"imageBed": "oss",
"enabled": true,
"bucket": "icould",
"region": "oss-cn-shenzhen",
"prefixKey": "hexo-content/imgaes",
}
},
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server",
"sync": "yuque-hexo sync",
"clean:yuque": "yuque-hexo clean"
}

注意 imgCdn 里面也包含其他图床

腾讯云图床

1
2
3
4
5
6
7
8
9
10
"yuqueConfig": {
"imgCdn": {
"concurrency": 0,
"imageBed": "cos",
"enabled": true,
"bucket": "image",
"region": "ap-guangzhou",
"prefixKey": "blog-images"
}
}

七千牛

1
2
3
4
5
6
7
8
9
10
11
"yuqueConfig": {
"imgCdn": {
"concurrency": 0,
"imageBed": "qiniu",
"enabled": true,
"bucket": "test-letttgaco",
"region": "Zone_z2",
"host": "https://img.domain.cc",
"prefixKey": "blog-images"
}
}

Github 图床

1
2
3
4
5
6
7
8
9
10
"yuqueConfig": {
"imgCdn": {
"concurrency": 1,
"imageBed": "github",
"enabled": true,
"bucket": "LetTTGACO",
"host": "cdn.jsdelivr.net",
"prefixKey": "blog-images"
}
}

又拍云

1
2
3
4
5
6
7
8
9
10
"yuqueConfig": {
"imgCdn": {
"concurrency": 0,
"imageBed": "upyun",
"enabled": true,
"bucket": "letttgaco",
"host": "https://upyun.1874.cool",
"prefixKey": "blog-images"
}
}

如何获取语雀 Token?点击 个人头像 -> 设置 -> Token 即可获取

同时注册环境变量,为图床进一步配置

临时注册变量可以使用<font style="color:#24292E;">export </font>SECRET_ID<font style="color:#24292E;">=xxx</font><font style="color:#24292E;">export </font>SECRET_KEY=xxx

永久注册变量可以 vim 修改/etc/profile 并 source 重载即可

如何获取各厂商图床 ID 和 KEY?清查阅云厂商密钥配置教程

各云厂商密钥配置教程

最后验证printenv

3.启动同步

npx yuque-hexo clean

第一次启动同步可以不选择清空缓存

SECRET_ID=$SECRET_ID SECRET_KEY=$SECRET_KEY npx yuque-hexo sync

4.启动 hexo

hexo clean && hexo g

二、部署在 Github/Gitee 解决思路

1.大纲

  • 在语雀中新建一个知识库,知识库里配置 Web Hook。
  • 在阿里云上创建函数计算模型**,**通过语雀的 Web Hook 去触发这个函数
  • 函数中配置了 Travis-CI(中介体读取 github/gitee 的库) 的 token,repoid,强制让 travis-ci 重新 restart 一次

2.安装与配置

与其上方一样

3.创建 serverless 云函数计算

先开通阿里云开通函数计算,新建 HTTP 函数,运行环境选择 PHP7.2

按自己实际编写函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
function main_handler($event, $context) {
// 解析语雀post的数据
$update_title = '';
if($event->body){
$yuque_data= json_decode($event->body);
$update_title .= $yuque_data->data->title;
}
// default params
$repos = 'xxxx'; // 你的仓库id 或 slug
$token = 'xxxxxx'; // 你的登录token
$message = date("Y/m/d").':yuque update:'.$update_title;
$branch = 'master';
// post params
$queryString = $event->queryString;
$q_token = $queryString->token ? $queryString->token : $token;
$q_repos = $queryString->repos ? $queryString->repos : $repos;
$q_message = $queryString->message ? $queryString->message : $message;
$q_branch = $queryString->branch ? $queryString->branch : 'master';
echo($q_token);
echo('===');
echo ($q_repos);
echo ('===');
echo ($q_message);
echo ('===');
echo ($q_branch);
echo ('===');
//request travis ci
$res_info = triggerTravisCI($q_repos, $q_token, $q_message, $q_branch);

$res_code = 0;
$res_message = '未知';
if($res_info['http_code']){
$res_code = $res_info['http_code'];
switch($res_info['http_code']){
case 200:
case 202:
$res_message = 'success';
break;
default:
$res_message = 'faild';
break;
}
}
$res = array(
'status'=>$res_code,
'message'=>$res_message
);
return $res;
}

/*
* @description travis api , trigger a build
* @param $repos string 仓库ID、slug
* @param $token string 登录验证token
* @param $message string 触发信息
* @param $branch string 分支
* @return $info array 回包信息
*/
function triggerTravisCI ($repos, $token, $message='yuque update', $branch='master') {
//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, 'https://api.travis-ci.org/repo/'.$repos.'/requests');
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//设置post方式提交
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
//设置post数据
$post_data = json_encode(array(
"request"=> array(
"message"=>$message,
"branch"=>$branch
)
));
$header = array(
'Content-Type: application/json',
'Travis-API-Version: 3',
'Authorization:token '.$token,
'Content-Length:' . strlen($post_data)
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
//执行命令
$data = curl_exec($curl);
$info = curl_getinfo($curl);
//关闭URL请求
curl_close($curl);
return $info;
}
?>

特此再声明一下:

$repo 是你在 Github / Gitte 的仓库 ID 一般是全数字 除非是自己自定义;不太清楚的可以通过 Postmen 请求

https://api.travis-ci.org/owner/你的 Github 账号/repos 获取,记得授权获取到 GitHub 的权限,Gitte 暂不支持。请求的时候请求头添加三个属性,

Authorization : token 你的 travis-ci token

Travis-API-Version : 3

User-Agent : API Explorer

返回结果 repo 就是你的仓库 ID

$token 就是 travis-ci 的 Token,记得授权获取到 GitHub / Gitte 的权限

4.测试函数

在阿里云点击运行函数,发现无报错即可成功同步语雀文章到自己博客。

作者

Catooilg

发布于

2020-07-24

更新于

2025-02-10

许可协议

评论