前言
最近使用的 Hexo 主题 hexo-theme-anzhiyu 默认的随机一言接口被限流了, 根据官方文档在家里的服务器上搭建了一个, 目前用于我的博客.
部署
根据 官方文档 使用 docker-compose 部署:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| services: hitokoto_api: image: hitokoto/api:release container_name: hitokoto_api hostname: hitokoto_api environment: NODE_ENV: production url: https://你的域名 api_name: blog redis.host: 你的 redis ip redis.port: 你的 redis 端口 redis.password: 你的 redis 密码 redis.database: 你的 redis 数据库 ports: - 8888:8000 restart: unless-stopped volumes: - ./data:/usr/src/app/data
|
配置文件:
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
| name: "hitokoto" url: "https://v1.hitokoto.cn" api_name: "demo_prprpr" server: host: 127.0.0.1 port: 8000 compress_body: true redis: host: 127.0.0.1 port: 6379 password: "" database: 0 sentences_ab_switcher: a: 1 b: 2 remote_sentences_url: https://cdn.jsdelivr.net/gh/hitokoto-osc/sentences-bundle@latest/ workers: 1 extensions: netease: true requests: enabled: false hosts: - sslapi.hitokoto.cn telemetry: performance: false error: false usage: false debug: false
|
上面官方的配置文件我只将 requests
和 telemetry
关闭了, 因为我并不需要这些功能.
部署后自己访问 ip:port 测试是否正常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 保存 { "id": 9241, "uuid": "a444bb92-9800-4b8e-a3ab-054ade2e78a2", "hitokoto": "生活和漫画里面的那种热血还是不一样的。", "type": "h", "from": "影视飓风", "from_who": "Tim", "creator": "wssb", "creator_uid": 14374, "reviewer": 4756, "commit_from": "web", "created_at": "1679128135", "length": 19 }
|
如果没问题就是域名配置了, 这部分就忽略了
Hexo 配置
安知鱼有 2 个地方会用到随机一言:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| footer: list: enable: true ... subTitle: enable: true ... source: 4 ...
|
1 2 3 4 5 6 7 8 9 10 11 12
| subtitle: enable: true source: 4 ...
|
原来配置的 source
只有 3 个选择, 这里新增一个, 然后修改 themes/anzhiyu/layout/includes/third-party/footerBarSubtitle.pug
文件:
直接拷贝下面的代码到指定位置即可:
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
| when 4 script. function subtitleType () { fetch('https://你绑定的域名') .then(response => response.json()) .then(data => { if (!{effect}) { const from = '出自 ' + data.from const sub = !{JSON.stringify(subContent)} sub.unshift(data.hitokoto, from) window.typed = new Typed('#footer-type-tips', { strings: sub, startDelay: !{startDelay}, typeSpeed: !{typeSpeed}, loop: !{loop}, backSpeed: !{backSpeed}, }) } else { document.getElementById('footer-type-tips').innerHTML = data.hitokoto } }) }
if (!{effect}) { if (typeof Typed === 'function') { subtitleType() } else { getScript('!{url_for(theme.asset.typed)}').then(subtitleType) } } else { subtitleType() }
|
最后 Hexo 三连击即可显示效果, 比官方的快的多.