笔记
API 已转移到版本 2,因此自然会引入重大更改。如果您想使用此 API 的早期版本,请参阅最新的稳定版本。
重要的
https://api-aniwatch.onrender.com 仅用于演示 API,并启用速率限制以最大限度地减少带宽消耗。建议根据需要自定义 api 来部署您自己的实例供个人使用。
此 API 只是 hianime.to 的非官方 api,与官方没有任何其他关系。
这个api提供的内容不是我的,也不是我托管的。这些属于各自的所有者。此 api 只是演示如何构建一个抓取网站并使用其内容的 api。
安装
当地的
码头工人
环境
托管您的实例
韦尔塞尔
使成为
文档
获取动漫主页
获取动漫信息
获取搜索结果
获取搜索建议
获取制作人动漫
获取类型动漫
获取类别动漫
获取预计时间表
获取动漫剧集
获取动漫剧集服务器
获取动漫剧集流媒体链接
发展
贡献者
谢谢
支持
执照
明星历史
克隆存储库并移至目录中。
git 克隆 https://github.com/ghoshRitesh12/aniwatch-api.gitcd aniwatch-api
安装所有依赖项。
npm i #或yarn install 或 pnpm i
启动服务器!
npm start #或yarn start 或pnpm start
现在服务器应该在 http://localhost:4000 上运行
Docker 镜像可在 GitHub 容器注册表中获取。
运行以下命令来拉取并运行 docker 映像。
docker pull ghcr.io/ghoshritesh12/aniwatch docker run -p 4000:4000 ghcr.io/ghoshritesh12/aniwatch
上面的命令将在端口 4000 上启动服务器。您可以通过 http://localhost:4000 访问服务器,还可以通过将-p
选项更改为-p <port>:4000
来更改端口。
您还可以添加-d
标志以在分离模式下运行容器。
更多信息可以在.env.example
文件中找到
ANIWATCH_API_PORT
:aniwatch api 的端口号
ANIWATCH_API_WINDOW_MS
:跟踪速率限制请求的持续时间(以毫秒为单位)
ANIWATCH_API_MAX_REQS
: ANIWATCH_API_WINDOW_MS
时间段内的最大请求数
ANIWATCH_API_CORS_ALLOWED_ORIGINS
:允许的来源,用逗号分隔,中间没有空格
ANIWATCH_VERCEL_DEPLOYMENT
:区分 vercel 部署与其他部署所需的,将其设置为 true 任何其他非零值
ANIWATCH_API_HOSTNAME
:将此值设置为您的 api 实例的主机名以启用速率限制,如果您不希望速率限制,则无需设置此值
警告
对于个人部署:
如果您想在应用程序中进行速率限制,请将ANIWATCH_API_HOSTNAME
环境设置为已部署实例的主机名,否则根本不要设置或拥有此环境。如果将此环境设置为不正确的值,您可能会遇到其他问题。
从server.ts
文件中删除第 71 行到第 83 行的 if 块。
在 Vercel 上部署您自己的 Aniwatch API 实例。
笔记
部署到 vercel 时,将名为ANIWATCH_VERCEL_DEPLOYMENT
的环境设置为true
或任何非零值,但此环境必须存在。
在 Render 上部署您自己的 Aniwatch API 实例。
下面列出了 api 公开的端点以及使用 Fetch API 的示例,但您可以使用任何 http 库。
GET
动漫主页/api/v2/hianime/home
const resp = wait fetch("/api/v2/hianime/home");const data = wait resp.json();console.log(data);
{ 成功:真实, 数据:{流派:[“动作”,“汽车总动员”,“冒险”,...],latestEpisodeAnimes:[ {id:字符串,名称:字符串,海报:字符串,类型:字符串,剧集:{子:数字, dub: number,} }, {...},],spotlightAnimes: [ {id: string,name: string,jname: string,poster: string,description: string,rank: number,otherInfo: string[],episodes: { sub: number, dub: number,}, }, {...},],top10Animes: { 今天: [{ Episodes: {sub: number,dub: number, }, id: string ,名称:字符串,海报:字符串,排名:数字},{...},],月份:[...],周:[...]},topAiringAnimes:[ {id:字符串,名称:字符串,jname: 字符串,海报:字符串, }, {...},],topUpcomingAnimes: [ {id: 字符串,名称: 字符串,海报: 字符串,持续时间: 字符串,类型: 字符串,评级: 字符串,剧集: { 子: 数字, 配音: 数字,} }, {...},],trendingAnimes: [ {id: string,name: string,海报: string,rank: number, }, {...},],mostPopularAnimes: [ {id: string,姓名:字符串,海报: 字符串,类型: 字符串,剧集: { 子: 数字, 配音: 数字,} }, {...},],mostFavoriteAnimes: [ {id: 字符串,名称: 字符串,海报: 字符串,类型:字符串,剧集:{ 子:数字,配音:数字,} },{...},],latestCompletedAnimes:[ {id:字符串,名称:字符串,海报:字符串,类型:字符串,剧集:{子:数字,配音:数字,} },{...},], }}
?返回顶部
GET
动漫信息/api/v2/hianime/anime/{animeId}
范围 | 类型 | 描述 | 必需的? | 默认 |
---|---|---|---|---|
animeId | 细绳 | 唯一的动漫 ID(在烤肉串的情况下)。 | 是的 | -- |
const resp = wait fetch("/api/v2/hianime/anime/attack-on-titan-112");const data = wait resp.json();console.log(data);
{ 成功:真实, 数据:{动漫:[信息:{id:字符串,名称:字符串,海报:字符串,描述:字符串,统计数据:{评级:字符串,质量:字符串,剧集:{子:数字,配音:数字},类型:字符串,持续时间:字符串},促销视频:[ {标题:字符串|未定义,来源:字符串 |未定义,缩略图:字符串 |未定义 }, {...},],characterVoiceActor: [ {character: { id: 字符串, 海报: 字符串, 名称: 字符串, 演员: 字符串},voiceActor: { id: 字符串, 海报: 字符串, 名称: 字符串,演员:字符串} },{...},] } 更多信息:{播出:字符串,流派:[“动作”,“神秘”,...],状态:字符串,工作室:字符串,持续时间:字符串...}],mostPopularAnimes:[{剧集:{子:数字,配音:数字,},id:字符串,jname:字符串,名称:字符串,海报:字符串,类型:字符串},{ ...},],推荐动画:[ {id:字符串,名称:字符串,海报:字符串,持续时间:字符串,类型:字符串,评级:字符串,剧集:{子:数字,配音:数字,} }, {...},],latedAnimes: [ {id: string,name: string,poster: string,duration: string,type: string, rating: string,episodes: { sub: number, dub: number,} }, {...},],季节: [ {id: 字符串,名称: 字符串,标题: 字符串,海报: 字符串,isCurrent: 布尔值 }, {...}] }}
?返回顶部
GET
搜索结果# 基本示例/api/v2/hianime/search?q={query}&page={page}# 高级example/api/v2/hianime/search?q={query}&page={page}&genres={genres}&type={type}&sort={sort}&season={season}&language={sub_or_dub}&status={status} &rad={评级}&start_date={yyyy-mm-dd}&end_date={yyyy-mm-dd}&score={分数}
范围 | 类型 | 描述 | 必需的? | 默认 |
---|---|---|---|---|
q | 细绳 | 搜索查询,即您要查找的项目的标题。 | 是的 | -- |
page | 数字 | 结果的页码。 | 不 | 1 |
type | 细绳 | 动漫的类型。例如: movie | 不 | -- |
status | 细绳 | 动画的现状。例如: finished-airing | 不 | -- |
rated | 细绳 | 动漫的评分。例如: r+ 或pg-13 | 不 | -- |
score | 细绳 | 动画评分。例如: good 或very-good | 不 | -- |
season | 细绳 | 动画播出季。例如: spring | 不 | -- |
language | 细绳 | 动画的语言类别。例如: sub 或sub-&-dub | 不 | -- |
start_date | 细绳 | 动画的开始日期(yyyy-mm-dd)。例如: 2014-10-2 | 不 | -- |
end_date | 细绳 | 动画的结束日期(yyyy-mm-dd)。例如: 2010-12-4 | 不 | -- |
sort | 细绳 | 动漫结果的排序顺序。例如: recently-added | 不 | -- |
genres | 细绳 | 动漫的类型,以逗号分隔。例如: isekai,shounen | 不 | -- |
[!TIP] 对于
start_date
和end_date
,必须提及年份。如果您想省略日期或月份,请指定0
。例如:省略日期 -> 2014-10-0,省略月份 -> 2014-0-12,省略两者 -> 2014-0-0
// 基本示例 const resp = wait fetch("/api/v2/hianime/search?q=titan&page=1");const data = wait resp.json();console.log(data);// 高级示例 const resp =等待获取( "/api/v2/hianime/search?q=girls&genres=action,adventure&type=movie&sort=score&season=spring&language=dub&status=finished-airing&lated=pg-13&start_date=2014-0-0&score=good");const data = 等待 resp. json();console.log(数据);
{ 成功:真实, 数据:{动画:[ {id:字符串,名称:字符串,海报:字符串,持续时间:字符串,类型:字符串,评级:字符串,剧集:{子:数字,配音:数字,} },{...} ,],mostPopularAnimes: [ {episodes: { sub: number, dub: number,},id: string,jname: string,name: string,poster: string,type: string }, {...},],currentPage : 1,totalPages: 1,hasNextPage: false,searchQuery: string,searchFilters: { [filter_name]: [filter_value] ...} }}
?返回顶部
GET
搜索建议/api/v2/hianime/search/suggestion?q={查询}
范围 | 类型 | 描述 | 必需的? | 默认 |
---|---|---|---|---|
q | 细绳 | 搜索建议查询。 | 是的 | -- |
const resp = wait fetch("/api/v2/hianime/search/suggestion?q=monster");const data = wait resp.json();console.log(data);
{ 成功:真实, 数据:{建议:[ {id:字符串,名称:字符串,海报:字符串,jname:字符串,moreInfo:[“2022 年 1 月 21 日”,“电影”,“17m”] },{...},] }}
?返回顶部
GET
制作人动漫/api/v2/hianime/ Producer/{name}?page={page}
范围 | 类型 | 描述 | 必需的? | 默认 |
---|---|---|---|---|
name | 细绳 | 动画制作人的名字(以烤肉串为例)。 | 是的 | -- |
范围 | 类型 | 描述 | 必需的? | 默认 |
---|---|---|---|---|
page | 数字 | 结果的页码。 | 不 | 1 |
const resp = wait fetch("/api/v2/hianime/ Producer/toei-animation?page=2");const data = wait resp.json();console.log(data);
{ 成功:真实, 数据:{生产者名称:“东映动画动漫”,动画:[ {id:字符串,名称:字符串,海报:字符串,持续时间:字符串,类型:字符串,评级:字符串,剧集:{子:数字,配音:数字, } }, {...},],top10Animes: { 今天: [{ 剧集: {sub: 数字,dub: 数字, }, id: 字符串, 名称: 字符串, 海报: 字符串, 排名: number},{...}, ], 月: [...], 周: [...]},topAiringAnimes: [ {episodes: { sub: number, dub: number,},id: string,jname :字符串,名称:字符串,海报:字符串,类型:字符串},{...},],当前页:2,总页数:11,hasNextPage:true }}
?返回顶部
GET
类型动漫/api/v2/hianime/genre/{name}?page={page}
范围 | 类型 | 描述 | 必需的? | 默认 |
---|---|---|---|---|
name | 细绳 | 动漫类型的名称(以烤肉串为例)。 | 是的 | -- |
范围 | 类型 | 描述 | 必需的? | 默认 |
---|---|---|---|---|
page | 数字 | 结果的页码。 | 不 | 1 |
const resp = wait fetch("/api/v2/hianime/genre/shaunten?page=2");const data = wait resp.json();console.log(data);
{ 成功:真实, 数据:{genreName:“少年动漫”,动漫:[ {