Skip to content

Commit

Permalink
fix(route): 调整影视资源采集路由 (#16101)
Browse files Browse the repository at this point in the history
* fix(route): 调整影视资源采集路由

* 限制可选域名

* 微调
  • Loading branch information
hualiong authored Jul 11, 2024
1 parent 157e098 commit 32ae3c1
Show file tree
Hide file tree
Showing 7 changed files with 183 additions and 192 deletions.
72 changes: 72 additions & 0 deletions lib/routes/maccms/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import { Result, Vod } from '@/routes/maccms/type';
import { DataItem, Route } from '@/types';
import ofetch from '@/utils/ofetch';
import path from 'node:path';
import { parseDate } from '@/utils/parse-date';
import { art } from '@/utils/render';
import timezone from '@/utils/timezone';
import { getCurrentPath } from '@/utils/helpers';

const render = (vod: Vod, link: string) => art(path.join(getCurrentPath(import.meta.url), 'templates', 'vod.art'), { vod, link });

export const route: Route = {
path: '/:domain/:type?/:size?',
categories: ['multimedia'],
example: '/maccms/moduzy.net/2',
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
parameters: {
domain: '采集站域名,可选值如下表',
type: '类别ID,不同采集站点有不同的类别规则和ID,默认为 0,代表全部类别',
size: '每次获取的数据条数,上限 100 条,默认 30 条',
},
name: '最新资源',
maintainers: ['hualiong'],
description: `
:::tip
每个采集站提供的影视类别ID是不同的,即参数中的 \`type\` 是不同的。**可以先访问一次站点提供的采集接口,然后从返回结果中的 \`class\` 字段中的 \`type_id\`获取相应的类别ID**
:::
| 站名 | 域名 | 站名 | 域名 | 站名 | 域名 |
| ------------------- | ------------------------------------------------ | ---------------- | -------------------------------------------------- | -------------- | ----------------------------------------------- |
| 魔都资源网 | [moduzy.net](https://moduzy.net) | 华为吧影视资源站 | [hw8.live](https://hw8.live) | 360 资源站 | [360zy.com](https://360zy.com) |
| jkun 爱坤联盟资源网 | [ikunzyapi.com](https://ikunzyapi.com) | 奥斯卡资源站 | [aosikazy.com](https://aosikazy.com) | 飞速资源采集网 | [www.feisuzyapi.com](http://www.feisuzyapi.com) |
| 森林资源网 | [slapibf.com](https://slapibf.com) | 天空资源采集网 | [api.tiankongapi.com](https://api.tiankongapi.com) | 百度云资源 | [api.apibdzy.com](https://api.apibdzy.com) |
| 红牛资源站 | [www.hongniuzy2.com](https://www.hongniuzy2.com) | 乐视资源网 | [leshiapi.com](https://leshiapi.com) | 暴风资源 | [bfzyapi.com](https://bfzyapi.com) |`,
handler: async (ctx) => {
const { domain, type = '0', size = '30' } = ctx.req.param();
if (!list.has(domain)) {
throw new Error('非法域名!');
}

const res = await ofetch<Result>(`https://${domain}/api.php/provide/vod`, {
parseResponse: JSON.parse,
query: { ac: 'detail', t: type, pagesize: Number.parseInt(size) > 100 ? 100 : size },
});

const items: DataItem[] = res.list.map((each) => ({
title: each.vod_name,
image: each.vod_pic,
link: `https://${domain}/vod/${each.vod_id}/`,
guid: each.vod_play_url?.match(/https:\/\/.+?\.m3u8/g)?.slice(-1)[0],
pubDate: timezone(parseDate(each.vod_time, 'YYYY-MM-DD HH:mm:ss'), +8),
category: [each.type_name, ...each.vod_class!.split(',')],
description: render(each, `https://${domain}/vod/${each.vod_id}/`) + each.vod_content,
}));

return {
title: `最新${type !== '0' && items.length ? items[0].category![0] : '资源'} - ${domain}`,
link: `https://${domain}`,
allowEmpty: true,
item: items,
};
},
};

const list = new Set(['moduzy.net', 'hw8.live', '360zy.com', 'ikunzyapi.com', 'aosikazy.com', 'www.feisuzyapi.com', 'slapibf.com', 'api.tiankongapi.com', 'api.apibdzy.com', 'www.hongniuzy2.com', 'leshiapi.com', 'bfzyapi.com']);
9 changes: 9 additions & 0 deletions lib/routes/maccms/namespace.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import type { Namespace } from '@/types';

export const namespace: Namespace = {
name: '通用影视采集站视频采集接口路由',
description: `
:::tip
该路由适用于各大影视采集站对外提供的统一CMS视频采集接口,API 类似于 \`https://网站域名/api.php/provide/vod\`
:::`,
};
File renamed without changes.
102 changes: 102 additions & 0 deletions lib/routes/maccms/type.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
export type Result = {
code: number;
msg: string;
page: string;
pagecount: number;
limit: string;
total: number;
list: Array<Vod>;
class?: Array<Class>;
};

export type Class = {
type_id: number;
type_pid: number;
type_name: string;
};

export type Vod = {
vod_id: number;
vod_name: string;
type_id: number;
type_name: string;
vod_en: string;
vod_time: string;
vod_remarks: string;
vod_play_from: string;
type_id_1?: number;
group_id?: number;
vod_sub?: string;
vod_status?: number;
vod_letter?: string;
vod_color?: string;
vod_tag?: string;
vod_class?: string;
vod_pic?: string;
vod_pic_thumb?: string;
vod_pic_slide?: string;
vod_pic_screenshot?: string;
vod_actor?: string;
vod_director?: string;
vod_writer?: string;
vod_behind?: string;
vod_blurb?: string;
vod_pubdate?: string;
vod_total?: number;
vod_serial?: string;
vod_tv?: string;
vod_weekday?: string;
vod_area?: string;
vod_lang?: string;
vod_year?: string;
vod_version?: string;
vod_state?: string;
vod_author?: string;
vod_jumpurl?: string;
vod_tpl?: string;
vod_tpl_play?: string;
vod_tpl_down?: string;
vod_isend?: number;
vod_lock?: number;
vod_level?: number;
vod_copyright?: number;
vod_points?: number;
vod_points_play?: number;
vod_points_down?: number;
vod_hits?: number;
vod_hits_day?: number;
vod_hits_week?: number;
vod_hits_month?: number;
vod_duration?: string;
vod_up?: number;
vod_down?: number;
vod_score?: string;
vod_score_all?: number;
vod_score_num?: number;
vod_time_add?: number;
vod_time_hits?: number;
vod_time_make?: number;
vod_trysee?: number;
vod_douban_id?: number;
vod_douban_score?: string;
vod_reurl?: string;
vod_rel_vod?: string;
vod_rel_art?: string;
vod_pwd?: string;
vod_pwd_url?: string;
vod_pwd_play?: string;
vod_pwd_play_url?: string;
vod_pwd_down?: string;
vod_pwd_down_url?: string;
vod_content?: string;
vod_play_server?: string;
vod_play_note?: string;
vod_play_url?: string;
vod_down_from?: string;
vod_down_server?: string;
vod_down_note?: string;
vod_down_url?: string;
vod_plot?: number;
vod_plot_name?: string;
vod_plot_detail?: string;
};
80 changes: 0 additions & 80 deletions lib/routes/moduzy/index.ts

This file was deleted.

17 changes: 0 additions & 17 deletions lib/routes/moduzy/namespace.ts

This file was deleted.

95 changes: 0 additions & 95 deletions lib/routes/moduzy/type.ts

This file was deleted.

0 comments on commit 32ae3c1

Please sign in to comment.