diff --git a/source/_posts/从memos的webhook开始.md b/source/_posts/从memos的webhook开始.md new file mode 100644 index 00000000..6d5f378a --- /dev/null +++ b/source/_posts/从memos的webhook开始.md @@ -0,0 +1,119 @@ +--- +title: 从memos的webhook开始 +date: 2024-06-18 11:10:10 +tags: +- memos +- webhook +categories: +- 分享 +cover: +--- +## 说在前面 +memos的`webhook`功能从v0.18 版本开始加入. +`webhook`也为`memos`带来了不一样的玩法. + +前段时间从`Typecho`主题`icefox`上直接`CTRL`+`C`了CSS布局,做了一个基于`memos`的单页面,类微信朋友圈. + +然后使用`webhook`自动保存json到本地目录,快速加载. 解决跨域问题 + +## 使用bash获取memos.json + +创建一个`memos.sh`文件 +```bash +#!/bin/bash + +# API地址 +API_URL="https://memos.ee/api/v1/memos" + +# 过滤参数 +FILTER="visibilities == ['PUBLIC'] && creator == 'users/1'" +PAGE_SIZE="200" + +# Authorization 头部 +AUTH_HEADER="Bearer token" + +# 目标文件 +OUTPUT_FILE="/config/memos.json" + +# 使用 curl 发送 GET 请求并将结果保存到文件 +curl -G "${API_URL}" \ + --data-urlencode "filter=${FILTER}" \ + --data-urlencode "pageSize=${PAGE_SIZE}" \ + -H "Authorization: ${AUTH_HEADER}" \ + -H "Accept: application/json" \ + -o "${OUTPUT_FILE}" + +# 检查是否成功 +if [ $? -eq 0 ]; then + echo "JSON 数据已成功保存到 ${OUTPUT_FILE}" +else + echo "获取 JSON 数据失败" +fi +``` +这个脚本用于获取最近200条的memos + +自行更改以上的`API_URL` `token` 以及过滤参数 + +## 使用webhook功能 + +### 部署webhook镜像 +此处使用一个`webhook`的DOCKER镜像 + +此Docker镜像是我根据官方dockerfile增加了中文支持编译而成. +推荐使用docker-compose部署 编辑`docker-compose.yaml`内容为 + +```yaml +services: + webhook: + image: jkjoy/webhook + container_name: webhook + command: -verbose -hooks=hooks.yml -hotreload + environment: + - TZ=Asia/Chongqing #中国时区 + - LANG=C.UTF-8 #中文支持 + volumes: + - ./:/config:rw + ports: + - 9000:9000 + restart: always +``` +创建`hooks.yml`文件并编辑内容为 +```yaml +- id: memos + execute-command: "/config/memos.sh" + command-working-directory: "/" +``` +然后运行 +``` +docker compose up -d +``` +即可 +### 使用Webhook + +hooks.yaml为webhook的配置文件 + +其中的execute-command为容器中的可执行脚本目录 +webhook的访问地址格式为 `服务器 ip:端口/hooks/id` +访问http://127.0.0.1:9000/hooks/memos +即可触发执行`bash /config/memos.sh` + +在memos的webhook设置中填入`http://127.0.0.1:9000/hooks/memos`的webhook地址, +即可 +### 以宝塔为例 +创建一个名为 `api.domain.com`的网站 +在网站的根目录下创建 `docker-compose.yaml` `hooks.yaml` `memos.sh` 的文件 +运行 +``` +docker compose up -d +``` +创建一个反向代理 +使 127.0.0.1:9000 代理到 api.domain.com 的 /webhook/ 目录 +访问api.domain.com/webhook/hooks/memos +此时会在网站根目录下生成`memos.json` +访问api.domain.com/memos.json +此时在memos的webhook地址中填入`api.domain.com/webhook/hooks/memos` +实现在memos更新时自动更新memos.json文件 + +## 演示 + +https://memos.jkjoy.cn \ No newline at end of file