Express学习项目:如何查找Jikan API的有效Anime数字JSON端点?
嘿,我正好有类似的经验,来帮你搞定这个问题!你想要找出jikan.me上所有返回有效动漫数据的/anime/[数字]端点,对吧?下面是几个实用的方案:
方案1:批量请求+有效性校验(最直接的方法)
既然这个API没有提供现成的有效ID列表,那我们可以写个脚本循环请求不同数字的端点,然后判断返回内容是否有效。因为你用的是Express(Node.js生态),直接用Node.js写脚本最方便:
示例代码(用node-fetch)
const fetch = require('node-fetch'); const fs = require('fs'); async function findValidAnimeIds(startId = 1, endId = 200) { const validIds = []; for (let id = startId; id <= endId; id++) { try { const apiUrl = `https://api.jikan.me/anime/${id}`; const response = await fetch(apiUrl); // 第一步:先检查HTTP状态码,200才有可能是有效内容 if (response.status !== 200) { console.log(`ID ${id}:状态码${response.status},跳过`); continue; } // 第二步:解析JSON,检查是否包含有效动漫的关键字段(比如title、image_url) const animeData = await response.json(); if (animeData.title && animeData.image_url) { validIds.push(id); console.log(`✅ 找到有效ID:${id}(标题:${animeData.title})`); } else { console.log(`ID ${id}:返回空内容或无效数据,跳过`); } } catch (error) { console.error(`❌ 请求ID ${id} 出错:${error.message}`); } // 重要:加延迟避免触发API限流,公开API一般都有请求频率限制 await new Promise(resolve => setTimeout(resolve, 1000)); } // 把结果存到本地文件,方便后续使用 fs.writeFileSync('./valid-anime-ids.json', JSON.stringify(validIds, null, 2)); console.log(`\n🎉 任务完成!共找到${validIds.length}个有效ID,已保存到valid-anime-ids.json`); return validIds; } // 调用示例:检查ID 1到200的端点 findValidAnimeIds(1, 200);
方案2:先确认API是否有批量列表接口
有些公开API会提供类似/anime的端点,直接返回所有动漫的ID和基础信息,这样就不用一个个去试了。你可以再仔细看看jikan.me的文档(如果有的话),有没有这种批量获取的接口——如果有的话,这肯定是效率最高的方法。
关键注意事项
- API限流问题:一定要加请求延迟!如果短时间内发太多请求,很可能会被API服务器拉黑IP,建议至少每秒1次请求,或者根据API返回的限流响应头调整。
- 并发优化:如果要检查上千个ID,单循环太慢,可以改成并发请求(比如一次同时发3-5个请求),但要控制并发数,别给服务器造成太大压力。
- 结果缓存:找到有效ID后一定要存到本地文件或数据库,下次就不用重复请求了。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

