#工具箱
刚刚看到 蜗牛大佬 fork了一个 Lyunvy 大佬写的 neodb-shelf-api 用于获取NeoDB数据,看了一下使用、安装,比以前我参考的各位大佬通过Github Action缓存数据的方案可要好用太多了。
看了一下实现过程,忽然冒出了「可以通过Cloudflare Worker来获取吗?」
因为前几天才分享过一个用Worker转发RSS数据的脚本,当时评论区木木大佬说可以有很多用法,所以刚刚脑子里忽然就蹦出这个想法来。
遂试着用ChatGPT糊了一个脚本,好像很真行...?
使用方法:在CF里新建一个Worker,将以下代码复制粘贴进去,并将代码里的token的值改成你的,然后带上对应的参数访问Worker的地址即可。
代码如下;
export default {
async fetch(request, env, ctx) {
const urlParams = new URLSearchParams(request.url.slice(request.url.indexOf('?') + 1))
let cg = urlParams.get('cg')
const type = urlParams.get('type')
// 设置你的NeoDB Token
const token= 'v02safasAqweqdDVYqUjtEm'
// 检查参数是否为空,如果为空则查询所有数据
if (!cg) {
cg = 'book,movie,tv,music,game,podcast'
}
// 查询完成类型 ['wishlist', 'progress', 'complete']:
if(!type){
return new Response('type参数不能为空', { status: 400, headers: { 'Content-Type': 'text/plain;charset=UTF-8'}})
}
// 将分类字符串拆分为数组
const categories = cg.split(',')
// 存储获取的数据
const responseData = {}
// 循环请求每个分类的数据
for (const category of categories) {
const categoryData = []
let page = 1
while (true) {
const apiUrl = `https://neodb.social/api/me/shelf/complete?category=${category}&type=${type}&page=${page}`
try {
// 发送请求获取数据,并添加鉴权头部
const response = await fetch(apiUrl, {
headers: {
'Authorization': `Bearer ${token}`
}
})
// 检查响应状态码
if (response.status !== 200) {
throw new Error('请求失败')
}
// 读取响应内容
const pageData = await response.json()
// 将当前页的数据添加到 categoryData 中
categoryData.push(pageData)
// 检查是否还有更多页数据
if (page >= pageData.pages) {
break
} else {
page++
}
} catch (err) {
return new Response('请求错误', { status: 500, headers: { 'Content-Type': 'text/plain' }})
}
}
// 将每个分类的完整数据添加到 responseData 中
responseData[category] = categoryData
}
// 返回所有分类数据给原始请求
return new Response(JSON.stringify(responseData), { status: 200, headers: { 'Content-Type': 'application/json' }})
},
};
加入评论