logo NodeSeekbeta

[教程]用vps搭建一言api接口

一、什么是一言

简单来说就是:一个api接口,每次可以返回一句话。常见于网页底部.
3d77303f70181537a13a1cb70cce3976.png
动漫也好、小说也好、网络也好,不论在哪里,我们总会看到有那么一两个句子能穿透你的心。我们把这些句子汇聚起来,形成一言网络,以传递更多的感动。如果可以,我们希望我们没有停止服务的那一天。
简单来说,一言指的就是一句话,可以是动漫中的台词,也可以是网络上的各种小段子。 或是感动,或是开心,有或是单纯的回忆。来到这里,留下你所喜欢的那一句句话,与大家分享,这就是一言存在的目的。

——选自「一言」简介
项目组官网

为何要自行部署

因为官方提供api是公益性质,速率限制很苛刻,近期更明显,经常请求稍快,就被拉黑一段时间。

搭建方法

docker直接部署

此方案需要先预先安装好Redis,项目将直接使用本地redis。

docker run -e edis.host=127.0.0.1 -e redis.port=6379  # - e redis.password=xxx(如没设密码请删除此属性) \
-v /path/to/your/data/dir:/usr/src/app/data \ #可以改成自定义目录
-p 8000:8000 \
--network host \
hitokoto/api

docker-compose 部署

此处提供docker-compose文件,自行探索

version: '3'
networks:
  hitokoto_api:
    driver: bridge

services:
  hitokoto_api:
    networks:
      - hitokoto_api
    image: hitokoto/api:release
    container_name: hitokoto_api
    hostname: hitokoto_api
    environment:
      NODE_ENV: production
      # 服务配置
      url: https://v1.hitokoto.cn # 请修改为您想要部署的域名
      api_name: sh-01-X23Hwoc # 改一个好听的标识吧
      requests.hosts: "['v1.hitokoto.cn']" # 改成你想统计的主机名列表
      redis.host: redis # Redis 连接地址,如果您使用本文件提供的 Redis 的话您无需修改此项
      redis.port: 6379 # Redis 连接端口
      # redis.password:
      # redis.database: 0
    ports:
      - 8000:8000
    links: 
      - redis
    restart: unless-stopped
    volumes: 
      - ./etc/api:/usr/src/app/data
    
  redis:
    networks:
      - hitokoto_api
    image: redis
    restart: unless-stopped
    container_name: redis
    hostname: redis
    volumes:
      - ./etc/redis.conf:/etc/redis/redis.conf # 一定要记得把 redis.conf 先放在这个位置哦
      - ./data/redis:/data
    command: redis-server /etc/redis/redis.conf
    # ports:
    #  - 6379:6379 # 如果有必要请取消注释本行

使用方法

直接使用:x.x.x.x:8000即可。
或者使用nginx反代也可以,以下为参考nginx反代配置:


#PROXY-START/

location ^~ /
{
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
    # proxy_hide_header Upgrade;

    add_header X-Cache $upstream_cache_status;

    #Set Nginx Cache
    
    
    set $static_fileyCr0FUky 0;
    if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
    {
    	set $static_fileyCr0FUky 1;
    	expires 1m;
        }
    if ( $static_fileyCr0FUky = 0 )
    {
    add_header Cache-Control no-cache;
    }
}

#PROXY-END/

接口参数定义

请参考官方文档:链接

接入网站教程

请在需要处加入以下代码(自行替换里面的api链接):

  1. 标准版
<p id="hitokoto">
  <a href="#" id="hitokoto_text">:D 获取中...</a>
</p>
<script>
  fetch('https://v1.hitokoto.cn')
    .then(response => response.json())
    .then(data => {
      const hitokoto = document.querySelector('#hitokoto_text')
      hitokoto.href = `https://hitokoto.cn/?uuid=${data.uuid}` ##请替换api链接
      hitokoto.innerText = data.hitokoto
    })
    .catch(console.error)
</script>
  1. 简洁版
    这个版本是我稍作修改的,将显示这种格式:泪锋之剑,当弃即弃。云裂之剑,当立则立。——明日方舟
<p id="hitokoto"> 加载中...</a>
<script>
  var xhr = new XMLHttpRequest();
  xhr.open('get', 'https://hitokoto.cn/?c=b');
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) {
      var data = JSON.parse(xhr.responseText);
      var hitokoto = document.getElementById('hitokoto');
      var from = document.getElementById('fromfrom');
      hitokoto.innerText = data.hitokoto + " —— " +data.from;
    }
  }
  xhr.send();
</script>

参考:
一言项目文档:链接
一言开源库:链接

12
12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有15411位seeker

🎉欢迎新用户🎉