NeoDBAPI
neodb.social 是一个致力于为联邦宇宙居民提供一个自由开放互联的书籍、电影、音乐和游戏收藏评论空间。NeoDB 的源代码来自 NiceDB,NiceDB 由里瓣社区众筹开发。
使用方法
环境变量配置
ACCESSTOKEN
USE_REDIS,USE_I2C
是否使用redis和提取主题色功能
填true
,则后几项必填
redis数据可先不填,后面有更快的方法
IMG2COLOR
见@anzhiyu-c/img2color-go
填入类似于https://xxx.top/api?img=
的链接
KV_URL,KV_REST_API_URL,KV_REST_API_TOKEN,KV_REST_API_READ_ONLY_TOKEN
然后随便填入名字
找到.env,直接复制粘贴进去
(真的可以直接粘贴,不需要一个一个输入)
如果部署时没有填链接
域名配置
如果需要国内访问,需添加自己的域名
访问https://xxx.top/?type=complete&category=movie&page=2&theme=true
得到返回即部署成功
传入
同官方
参数 | 是否必要 | 类型 | 默认值 | 可选 |
---|---|---|---|---|
type | 是 | str | 无 | wishlist / progress / complete |
category | 否 | str | 全部 | book/movie/tv/music/game/podcast/performance |
page | 否 | int | 1 | 1-最大页数 |
返回
同官方
1 | { |
示例
见@石姐姐
代码讲解
点击打开代码讲解(为不懂的人准备) color:cyan
app.py
导入模块和库:
1
2
3
4
5
6from flask import Flask, request
import requests
import json
from os import environ
from redis_color import get_theme_color, kv, process_item
import threadingflask
:导入 Flask 模块,用于创建 Web 应用程序。requests
:用于发送 HTTP 请求。json
:用于处理 JSON 数据。os.environ
:用于获取环境变量。
创建 Flask 应用:
1
app = Flask(__name__)
- 创建了一个名为
app
的 Flask 应用。
- 创建了一个名为
定义了一个路由和视图函数:
1
2
def getdata():- 定义了一个路由为
/
,并指定了请求方法为 GET。
- 定义了一个路由为
获取环境变量中的 ACCESSTOKEN:
1
token = environ.get('ACCESSTOKEN')
- 使用
environ.get()
获取环境变量中名为ACCESSTOKEN
的值。
- 使用
设置请求头:
1
2
3
4
5headers = {
'accept': 'application/json',
'Authorization': f'Bearer {token}',
'Referer': 'http://redish101.top',
}- 定义了一个字典
headers
包含了请求头信息。
- 定义了一个字典
获取请求参数:
1
2
3
4cate = request.args.get('category')
page = request.args.get('page')
type = request.args.get('type')
theme = request.args.get('theme')- 使用 Flask 的
request.args.get()
方法获取请求中的参数。
- 使用 Flask 的
判断参数是否完整:
1
if token and type:
- 确保
token
和type
不为空。
- 确保
发起请求:
1
response = requests.get(f"https://neodb.social/api/me/shelf/{type}?category={cate}&page={page}", headers=headers)
- 使用
requests.get()
发起一个 GET 请求。
- 使用
解析响应:
1
data = json.loads(response.text)
- 使用
json.loads()
解析响应数据。
- 使用
判断是否使用缓存:
1
if environ.get('USE_REDIS'):
- 确保环境变量中有
USE_REDIS
。
- 判断是否使用主题色提取:
1
if environ.get('USE_I2C') and theme == "true":
- 确保环境变量中有
USE_I2C
并且请求参数中的theme
为 “true”。
- 使用多线程处理提取主题色:
1
2
3
4
5
6for i in data['data']:
thread = threading.Thread(target=process_item, args=(i,))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
- 创建了多个线程用于处理每个数据项。
判断是否使用缓存并返回结果:
1
2
3
4
5if kvdata and str(data['count']) == str(kvcount):
return json.loads(kvdata)
else:
# ...(设置缓存等操作)
return data其他处理和返回信息。
启动应用程序:
1
2if __name__ == '__main__':
app.run()- 如果当前脚本被直接执行,则启动应用程序。
redis_color.py
这段代码是一个用于处理主题颜色的功能模块。让我逐段解释:
- 导入模块和库:
1 | from functools import lru_cache |
这里首先导入了需要用到的模块和库,包括了:
lru_cache
:这是一个装饰器,用于对函数的返回值进行缓存,可以提高函数的执行效率。KV
:这是一个用于操作 vercel_kv 的模块,与redis相似。dotenv
:用于从环境变量文件(比如.env
文件)中加载环境变量。requests
:用于发送 HTTP 请求。json
:用于处理 JSON 数据的模块。os.environ
:用于获取系统的环境变量。
- 加载环境变量:
1 | dotenv.load_dotenv() |
这一行代码从环境变量文件中加载环境变量,使其可以在程序中使用。
- 初始化 KV 对象和设置请求头:
1 | kv = KV() |
这部分代码初始化了一个 KV
对象,同时设置了一些用于 HTTP 请求的请求头。
- 定义获取主题颜色的函数:
1 |
|
这是一个用于获取主题颜色的函数。@lru_cache(maxsize=None)
是一个装饰器,它会缓存函数的返回值,以提高函数的执行效率。
- 处理获取主题颜色的逻辑:
1 | theme_color = kv.get(uuid) |
这部分代码首先尝试从缓存中获取主题颜色,如果缓存中存在,就直接返回。如果不存在,就尝试从主题色api获取主题颜色。
- 定义处理单个项目的函数:
1 | def process_item(item): |
这个函数接收一个项目作为参数,并从项目中提取出 UUID 和封面图片的 URL。然后使用之前定义的获取主题颜色的函数,将得到的主题颜色添加到项目的属性中。
–由ChatGPT生成–
- 感谢你赐予我前进的力量