mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 19:01:15 +00:00
add some vod collection site
This commit is contained in:
179
javascript/anime/src/zh/aosikazy.js
Normal file
179
javascript/anime/src/zh/aosikazy.js
Normal file
@@ -0,0 +1,179 @@
|
||||
const mangayomiSources = [{
|
||||
"name": "奥斯卡资源站",
|
||||
"lang": "zh",
|
||||
"baseUrl": "https://aosikazy1.com",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "https://aosikazy1.com/template/m1938pc3/image/favicon.ico",
|
||||
"typeSource": "single",
|
||||
"isManga": false,
|
||||
"isNsfw": true,
|
||||
"version": "0.0.1",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "anime/src/zh/aosikazy.js"
|
||||
}];
|
||||
|
||||
class DefaultExtension extends MProvider {
|
||||
dict = new Map([
|
||||
[" ", " "],
|
||||
[""", '"'],
|
||||
["<", "<"],
|
||||
[">", ">"],
|
||||
["&", "&"],
|
||||
["⋅", "·"],
|
||||
]);
|
||||
text(content) {
|
||||
if (!content) return "";
|
||||
const str =
|
||||
[...content.matchAll(/>([^<]+?)</g)]
|
||||
.map((m) => m[1])
|
||||
.join("")
|
||||
.trim() || content;
|
||||
return str.replace(/&[a-z]+;/g, (c) => this.dict.get(c) || c);
|
||||
}
|
||||
async request(url) {
|
||||
const preference = new SharedPreferences();
|
||||
return (await new Client({ 'useDartHttpClient': true }).get(preference.get("url") + "/api.php/provide/vod?ac=detail" + url, { "Referer": preference.get("url") })).body;
|
||||
}
|
||||
getHeaders(url) {
|
||||
throw new Error("getHeaders not implemented");
|
||||
}
|
||||
async getPopular(page) {
|
||||
// let genres = [];
|
||||
// const gen = JSON.parse(await this.request("&ac=list"));
|
||||
// gen.class.forEach((e) => {
|
||||
// genres.push({
|
||||
// type_name: "SelectOption",
|
||||
// value: e.type_id,
|
||||
// name: e.type_name
|
||||
// });
|
||||
// });
|
||||
// console.log(genres)
|
||||
const res = JSON.parse(await this.request(`&pg=${page}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async getLatestUpdates(page) {
|
||||
const h = (new Date().getUTCHours() + 9) % 24;
|
||||
const res = JSON.parse(await this.request(`&pg=${page}&h=${h || 24}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async search(query, page, filters) {
|
||||
var categories;
|
||||
for (const filter of filters) {
|
||||
if (filter["type"] == "categories") {
|
||||
categories = filter["values"][filter["state"]]["value"];
|
||||
}
|
||||
}
|
||||
const res = JSON.parse(await this.request(`&wd=${query}&t=${categories ?? ""}&pg=${page}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async getDetail(url) {
|
||||
let desc = "无";
|
||||
const anime = JSON.parse(await this.request(url)).list[0];
|
||||
const blurb = this.text(anime.vod_blurb);
|
||||
const content = this.text(anime.vod_content);
|
||||
desc = desc.length < blurb?.length ? blurb : desc;
|
||||
desc = desc.length < content.length ? content : desc;
|
||||
const urls = anime.vod_play_url
|
||||
.split("#")
|
||||
.filter((e) => e)
|
||||
.map((e) => {
|
||||
const s = e.split("$");
|
||||
return { name: s[0], url: s[1] };
|
||||
});
|
||||
return {
|
||||
name: anime.vod_name,
|
||||
imageUrl: anime.vod_pic,
|
||||
description: desc,
|
||||
episodes: urls
|
||||
};
|
||||
}
|
||||
// For anime episode video list
|
||||
async getVideoList(url) {
|
||||
return [{
|
||||
url: url,
|
||||
originalUrl: url,
|
||||
quality: "HLS"
|
||||
}];
|
||||
}
|
||||
// For manga chapter pages
|
||||
async getPageList() {
|
||||
throw new Error("getPageList not implemented");
|
||||
}
|
||||
getFilterList() {
|
||||
return [{
|
||||
type: "categories",
|
||||
name: "影片類型",
|
||||
type_name: "SelectFilter",
|
||||
values: [
|
||||
// { type_name: "SelectOption", value: "1", name: "电影" },
|
||||
// { type_name: "SelectOption", value: "2", name: "连续剧" },
|
||||
// { type_name: "SelectOption", value: "3", name: "综艺" },
|
||||
{ type_name: "SelectOption", value: "", name: "全部" },
|
||||
{ type_name: "SelectOption", value: "20", name: "国产视频" },
|
||||
{ type_name: "SelectOption", value: "21", name: "中文字幕" },
|
||||
{ type_name: "SelectOption", value: "22", name: "国产传媒" },
|
||||
{ type_name: "SelectOption", value: "23", name: "日本有码" },
|
||||
{ type_name: "SelectOption", value: "24", name: "日本无码" },
|
||||
{ type_name: "SelectOption", value: "25", name: "欧美无码" },
|
||||
{ type_name: "SelectOption", value: "26", name: "强奸乱伦" },
|
||||
{ type_name: "SelectOption", value: "27", name: "制服诱惑" },
|
||||
{ type_name: "SelectOption", value: "28", name: "国产主播" },
|
||||
{ type_name: "SelectOption", value: "29", name: "激情动漫" },
|
||||
{ type_name: "SelectOption", value: "30", name: "明星换脸" },
|
||||
{ type_name: "SelectOption", value: "31", name: "抖阴视频" },
|
||||
{ type_name: "SelectOption", value: "32", name: "女优明星" },
|
||||
{ type_name: "SelectOption", value: "33", name: "视频一区" },
|
||||
{ type_name: "SelectOption", value: "34", name: "视频二区" },
|
||||
{ type_name: "SelectOption", value: "35", name: "网曝黑料" },
|
||||
{ type_name: "SelectOption", value: "36", name: "视频三区" },
|
||||
{ type_name: "SelectOption", value: "37", name: "伦理三级" },
|
||||
{ type_name: "SelectOption", value: "38", name: "AV解说" },
|
||||
{ type_name: "SelectOption", value: "39", name: "SM调教" },
|
||||
{ type_name: "SelectOption", value: "40", name: "萝莉少女" },
|
||||
{ type_name: "SelectOption", value: "41", name: "极品媚黑" },
|
||||
{ type_name: "SelectOption", value: "42", name: "女同性恋" },
|
||||
{ type_name: "SelectOption", value: "43", name: "网红头条" },
|
||||
{ type_name: "SelectOption", value: "44", name: "视频四区" },
|
||||
{ type_name: "SelectOption", value: "45", name: "人妖系列" },
|
||||
{ type_name: "SelectOption", value: "46", name: "韩国主播" },
|
||||
{ type_name: "SelectOption", value: "47", name: "VR视角" }
|
||||
]
|
||||
}];
|
||||
}
|
||||
getSourcePreferences() {
|
||||
return [
|
||||
{
|
||||
"key": "url",
|
||||
"listPreference": {
|
||||
"title": "Website Url",
|
||||
"summary": "",
|
||||
"valueIndex": 0,
|
||||
"entries": ["aosikazy1", "aosikazy2", "aosikazy3", "aosikazy4", "aosikazy5", "aosikazy6", "aosikazy7", "aosikazy8", "aosikazy9", "aosikazy10"],
|
||||
"entryValues": ["https://aosikazy1.com", "https://aosikazy2.com", "https://aosikazy3.com", "https://aosikazy4.com", "https://aosikazy5.com", "https://aosikazy6.com", "https://aosikazy7.com", "https://aosikazy8.com", "https://aosikazy9.com", "https://aosikazy10.com"],
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
}
|
||||
179
javascript/anime/src/zh/ffzy.js
Normal file
179
javascript/anime/src/zh/ffzy.js
Normal file
@@ -0,0 +1,179 @@
|
||||
const mangayomiSources = [{
|
||||
"name": "非凡资源",
|
||||
"lang": "zh",
|
||||
"baseUrl": "http://ffzy.tv",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "http://ffzy.tv/template/default/img/favicon.png",
|
||||
"typeSource": "single",
|
||||
"isManga": false,
|
||||
"isNsfw": false,
|
||||
"version": "0.0.1",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "anime/src/zh/ffzy.js"
|
||||
}];
|
||||
|
||||
class DefaultExtension extends MProvider {
|
||||
dict = new Map([
|
||||
[" ", " "],
|
||||
[""", '"'],
|
||||
["<", "<"],
|
||||
[">", ">"],
|
||||
["&", "&"],
|
||||
["⋅", "·"],
|
||||
]);
|
||||
text(content) {
|
||||
if (!content) return "";
|
||||
const str =
|
||||
[...content.matchAll(/>([^<]+?)</g)]
|
||||
.map((m) => m[1])
|
||||
.join("")
|
||||
.trim() || content;
|
||||
return str.replace(/&[a-z]+;/g, (c) => this.dict.get(c) || c);
|
||||
}
|
||||
async request(url) {
|
||||
const preference = new SharedPreferences();
|
||||
return (await new Client({ 'useDartHttpClient': true }).get(preference.get("url") + "/api.php/provide/vod?ac=detail" + url, { "Referer": preference.get("url") })).body;
|
||||
}
|
||||
getHeaders(url) {
|
||||
throw new Error("getHeaders not implemented");
|
||||
}
|
||||
async getPopular(page) {
|
||||
// let genres = [];
|
||||
// const gen = JSON.parse(await this.request("&ac=list"));
|
||||
// gen.class.forEach((e) => {
|
||||
// genres.push({
|
||||
// type_name: "SelectOption",
|
||||
// value: e.type_id,
|
||||
// name: e.type_name
|
||||
// });
|
||||
// });
|
||||
// console.log(genres)
|
||||
const res = JSON.parse(await this.request(`&pg=${page}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async getLatestUpdates(page) {
|
||||
const h = (new Date().getUTCHours() + 9) % 24;
|
||||
const res = JSON.parse(await this.request(`&pg=${page}&h=${h || 24}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async search(query, page, filters) {
|
||||
var categories;
|
||||
for (const filter of filters) {
|
||||
if (filter["type"] == "categories") {
|
||||
categories = filter["values"][filter["state"]]["value"];
|
||||
}
|
||||
}
|
||||
const res = JSON.parse(await this.request(`&wd=${query}&t=${categories ?? ""}&pg=${page}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async getDetail(url) {
|
||||
let desc = "无";
|
||||
const anime = JSON.parse(await this.request(url)).list[0];
|
||||
const blurb = this.text(anime.vod_blurb);
|
||||
const content = this.text(anime.vod_content);
|
||||
desc = desc.length < blurb?.length ? blurb : desc;
|
||||
desc = desc.length < content.length ? content : desc;
|
||||
const urls = anime.vod_play_url
|
||||
.split("#")
|
||||
.filter((e) => e)
|
||||
.map((e) => {
|
||||
const s = e.split("$");
|
||||
return { name: s[0], url: s[1] };
|
||||
});
|
||||
return {
|
||||
name: anime.vod_name,
|
||||
imageUrl: anime.vod_pic,
|
||||
description: desc,
|
||||
episodes: urls
|
||||
};
|
||||
}
|
||||
// For anime episode video list
|
||||
async getVideoList(url) {
|
||||
return [{
|
||||
url: url,
|
||||
originalUrl: url,
|
||||
quality: "HLS"
|
||||
}];
|
||||
}
|
||||
// For manga chapter pages
|
||||
async getPageList() {
|
||||
throw new Error("getPageList not implemented");
|
||||
}
|
||||
getFilterList() {
|
||||
return [{
|
||||
type: "categories",
|
||||
name: "影片類型",
|
||||
type_name: "SelectFilter",
|
||||
values: [
|
||||
{ type_name: "SelectOption", value: "", name: "全部" },
|
||||
// {type_name:"SelectOption",value:"1",name:"电影片"},
|
||||
// {type_name:"SelectOption",value:"2",name:"连续剧"},
|
||||
// {type_name:"SelectOption",value:"3",name:"综艺片"},
|
||||
{ type_name: "SelectOption", value: "4", name: "动漫片" },
|
||||
{ type_name: "SelectOption", value: "6", name: "动作片" },
|
||||
{ type_name: "SelectOption", value: "7", name: "喜剧片" },
|
||||
{ type_name: "SelectOption", value: "8", name: "爱情片" },
|
||||
{ type_name: "SelectOption", value: "9", name: "科幻片" },
|
||||
{ type_name: "SelectOption", value: "10", name: "恐怖片" },
|
||||
{ type_name: "SelectOption", value: "11", name: "剧情片" },
|
||||
{ type_name: "SelectOption", value: "12", name: "战争片" },
|
||||
{ type_name: "SelectOption", value: "13", name: "国产剧" },
|
||||
{ type_name: "SelectOption", value: "14", name: "香港剧" },
|
||||
{ type_name: "SelectOption", value: "15", name: "韩国剧" },
|
||||
{ type_name: "SelectOption", value: "16", name: "欧美剧" },
|
||||
{ type_name: "SelectOption", value: "20", name: "记录片" },
|
||||
{ type_name: "SelectOption", value: "21", name: "台湾剧" },
|
||||
{ type_name: "SelectOption", value: "22", name: "日本剧" },
|
||||
{ type_name: "SelectOption", value: "23", name: "海外剧" },
|
||||
{ type_name: "SelectOption", value: "24", name: "泰国剧" },
|
||||
{ type_name: "SelectOption", value: "25", name: "大陆综艺" },
|
||||
{ type_name: "SelectOption", value: "26", name: "港台综艺" },
|
||||
{ type_name: "SelectOption", value: "27", name: "日韩综艺" },
|
||||
{ type_name: "SelectOption", value: "28", name: "欧美综艺" },
|
||||
{ type_name: "SelectOption", value: "29", name: "国产动漫" },
|
||||
{ type_name: "SelectOption", value: "30", name: "日韩动漫" },
|
||||
{ type_name: "SelectOption", value: "31", name: "欧美动漫" },
|
||||
{ type_name: "SelectOption", value: "32", name: "港台动漫" },
|
||||
{ type_name: "SelectOption", value: "33", name: "海外动漫" },
|
||||
{ type_name: "SelectOption", value: "34", name: "伦理片" },
|
||||
{ type_name: "SelectOption", value: "36", name: "短剧" }
|
||||
]
|
||||
}];
|
||||
}
|
||||
getSourcePreferences() {
|
||||
return [
|
||||
{
|
||||
"key": "url",
|
||||
"listPreference": {
|
||||
"title": "Website Url",
|
||||
"summary": "",
|
||||
"valueIndex": 0,
|
||||
"entries": ["ffzy", "ffzy1", "ffzy2", "ffzy3", "ffzy4", "ffzy5"],
|
||||
"entryValues": ["http://ffzy.tv", "http://ffzy1.tv", "http://ffzy2.tv", "http://ffzy3.tv", "http://ffzy4.tv", "http://ffzy5.tv"],
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
}
|
||||
188
javascript/anime/src/zh/huaweiba.js
Normal file
188
javascript/anime/src/zh/huaweiba.js
Normal file
@@ -0,0 +1,188 @@
|
||||
const mangayomiSources = [{
|
||||
"name": "华为吧资源",
|
||||
"lang": "zh",
|
||||
"baseUrl": "https://huaweiba.live",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "https://huaweiba.live/template/ziyuan/images/logo2.png",
|
||||
"typeSource": "single",
|
||||
"isManga": false,
|
||||
"isNsfw": false,
|
||||
"version": "0.0.1",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "anime/src/zh/huaweiba.js"
|
||||
}];
|
||||
|
||||
class DefaultExtension extends MProvider {
|
||||
dict = new Map([
|
||||
[" ", " "],
|
||||
[""", '"'],
|
||||
["<", "<"],
|
||||
[">", ">"],
|
||||
["&", "&"],
|
||||
["⋅", "·"],
|
||||
]);
|
||||
text(content) {
|
||||
if (!content) return "";
|
||||
const str =
|
||||
[...content.matchAll(/>([^<]+?)</g)]
|
||||
.map((m) => m[1])
|
||||
.join("")
|
||||
.trim() || content;
|
||||
return str.replace(/&[a-z]+;/g, (c) => this.dict.get(c) || c);
|
||||
}
|
||||
async request(url) {
|
||||
return (await new Client({ 'useDartHttpClient': true }).get(this.source.baseUrl + "/api.php/provide/vod?ac=detail" + url, { "Referer": this.source.baseUrl })).body;
|
||||
}
|
||||
getHeaders(url) {
|
||||
throw new Error("getHeaders not implemented");
|
||||
}
|
||||
async getPopular(page) {
|
||||
// let genres = [];
|
||||
// const gen = JSON.parse(await this.request("&ac=list"));
|
||||
// gen.class.forEach((e) => {
|
||||
// genres.push({
|
||||
// type_name: "SelectOption",
|
||||
// value: e.type_id,
|
||||
// name: e.type_name
|
||||
// });
|
||||
// });
|
||||
// console.log(genres)
|
||||
const res = JSON.parse(await this.request(`&pg=${page}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async getLatestUpdates(page) {
|
||||
const h = (new Date().getUTCHours() + 9) % 24;
|
||||
const res = JSON.parse(await this.request(`&pg=${page}&h=${h || 24}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async search(query, page, filters) {
|
||||
var categories;
|
||||
for (const filter of filters) {
|
||||
if (filter["type"] == "categories") {
|
||||
categories = filter["values"][filter["state"]]["value"];
|
||||
}
|
||||
}
|
||||
const res = JSON.parse(await this.request(`&wd=${query}&t=${categories ?? ""}&pg=${page}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async getDetail(url) {
|
||||
let desc = "无";
|
||||
const anime = JSON.parse(await this.request(url)).list[0];
|
||||
const blurb = this.text(anime.vod_blurb);
|
||||
const content = this.text(anime.vod_content);
|
||||
desc = desc.length < blurb?.length ? blurb : desc;
|
||||
desc = desc.length < content.length ? content : desc;
|
||||
const urls = anime.vod_play_url
|
||||
.split("#")
|
||||
.filter((e) => e)
|
||||
.map((e) => {
|
||||
const s = e.split("$");
|
||||
return { name: s[0], url: s[1] };
|
||||
});
|
||||
return {
|
||||
name: anime.vod_name,
|
||||
imageUrl: anime.vod_pic,
|
||||
description: desc,
|
||||
episodes: urls
|
||||
};
|
||||
}
|
||||
// For anime episode video list
|
||||
async getVideoList(url) {
|
||||
return [{
|
||||
url: url,
|
||||
originalUrl: url,
|
||||
quality: "HLS"
|
||||
}];
|
||||
}
|
||||
// For manga chapter pages
|
||||
async getPageList() {
|
||||
throw new Error("getPageList not implemented");
|
||||
}
|
||||
getFilterList() {
|
||||
return [{
|
||||
type: "categories",
|
||||
name: "影片類型",
|
||||
type_name: "SelectFilter",
|
||||
values: [
|
||||
{ type_name: "SelectOption", value: "", name: "全部" },
|
||||
{ type_name: "SelectOption", value: "20", name: "电影" },
|
||||
{ type_name: "SelectOption", value: "22", name: "冒险片" },
|
||||
{ type_name: "SelectOption", value: "24", name: "剧情片" },
|
||||
{ type_name: "SelectOption", value: "26", name: "动作片" },
|
||||
{ type_name: "SelectOption", value: "28", name: "动画电影" },
|
||||
{ type_name: "SelectOption", value: "30", name: "同性片" },
|
||||
{ type_name: "SelectOption", value: "32", name: "喜剧片" },
|
||||
{ type_name: "SelectOption", value: "34", name: "奇幻片" },
|
||||
{ type_name: "SelectOption", value: "36", name: "恐怖片" },
|
||||
{ type_name: "SelectOption", value: "38", name: "悬疑片" },
|
||||
{ type_name: "SelectOption", value: "40", name: "惊悚片" },
|
||||
{ type_name: "SelectOption", value: "42", name: "歌舞片" },
|
||||
{ type_name: "SelectOption", value: "44", name: "灾难片" },
|
||||
{ type_name: "SelectOption", value: "46", name: "爱情片" },
|
||||
{ type_name: "SelectOption", value: "48", name: "科幻片" },
|
||||
{ type_name: "SelectOption", value: "50", name: "犯罪片" },
|
||||
{ type_name: "SelectOption", value: "52", name: "经典片" },
|
||||
{ type_name: "SelectOption", value: "54", name: "网络电影" },
|
||||
{ type_name: "SelectOption", value: "56", name: "战争片" },
|
||||
{ type_name: "SelectOption", value: "58", name: "伦理片" },
|
||||
{ type_name: "SelectOption", value: "60", name: "电视剧" },
|
||||
{ type_name: "SelectOption", value: "62", name: "欧美剧" },
|
||||
{ type_name: "SelectOption", value: "64", name: "日剧" },
|
||||
{ type_name: "SelectOption", value: "66", name: "韩剧" },
|
||||
{ type_name: "SelectOption", value: "68", name: "台剧" },
|
||||
{ type_name: "SelectOption", value: "70", name: "泰剧" },
|
||||
{ type_name: "SelectOption", value: "72", name: "国产剧" },
|
||||
{ type_name: "SelectOption", value: "74", name: "港剧" },
|
||||
{ type_name: "SelectOption", value: "76", name: "新马剧" },
|
||||
{ type_name: "SelectOption", value: "78", name: "其他剧" },
|
||||
{ type_name: "SelectOption", value: "80", name: "动漫" },
|
||||
{ type_name: "SelectOption", value: "82", name: "综艺" },
|
||||
{ type_name: "SelectOption", value: "84", name: "体育" },
|
||||
{ type_name: "SelectOption", value: "86", name: "纪录片" },
|
||||
{ type_name: "SelectOption", value: "88", name: "篮球" },
|
||||
{ type_name: "SelectOption", value: "90", name: "足球" },
|
||||
{ type_name: "SelectOption", value: "92", name: "网球" },
|
||||
{ type_name: "SelectOption", value: "94", name: "斯诺克" },
|
||||
{ type_name: "SelectOption", value: "96", name: "欧美动漫" },
|
||||
{ type_name: "SelectOption", value: "98", name: "日韩动漫" },
|
||||
{ type_name: "SelectOption", value: "100", name: "国产动漫" },
|
||||
{ type_name: "SelectOption", value: "102", name: "新马泰动漫" },
|
||||
{ type_name: "SelectOption", value: "104", name: "港台动漫" },
|
||||
{ type_name: "SelectOption", value: "106", name: "其他动漫" },
|
||||
{ type_name: "SelectOption", value: "108", name: "国产综艺" },
|
||||
{ type_name: "SelectOption", value: "110", name: "日韩综艺" },
|
||||
{ type_name: "SelectOption", value: "112", name: "欧美综艺" },
|
||||
{ type_name: "SelectOption", value: "114", name: "新马泰综艺" },
|
||||
{ type_name: "SelectOption", value: "116", name: "港台综艺" },
|
||||
{ type_name: "SelectOption", value: "118", name: "其他综艺" },
|
||||
{ type_name: "SelectOption", value: "120", name: "短剧" },
|
||||
{ type_name: "SelectOption", value: "122", name: "预告片" }
|
||||
]
|
||||
}];
|
||||
}
|
||||
getSourcePreferences() {
|
||||
throw new Error("getSourcePreferences not implemented");
|
||||
}
|
||||
}
|
||||
185
javascript/anime/src/zh/jisuzy.js
Normal file
185
javascript/anime/src/zh/jisuzy.js
Normal file
@@ -0,0 +1,185 @@
|
||||
const mangayomiSources = [{
|
||||
"name": "极速资源",
|
||||
"lang": "zh",
|
||||
"baseUrl": "https://wwww.jisuzy.com",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "https://www.jisuzy.com/template/default/images/site_logo.png",
|
||||
"typeSource": "single",
|
||||
"isManga": false,
|
||||
"isNsfw": false,
|
||||
"version": "0.0.1",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "anime/src/zh/jisuzy.js"
|
||||
}];
|
||||
|
||||
class DefaultExtension extends MProvider {
|
||||
dict = new Map([
|
||||
[" ", " "],
|
||||
[""", '"'],
|
||||
["<", "<"],
|
||||
[">", ">"],
|
||||
["&", "&"],
|
||||
["⋅", "·"],
|
||||
]);
|
||||
text(content) {
|
||||
if (!content) return "";
|
||||
const str =
|
||||
[...content.matchAll(/>([^<]+?)</g)]
|
||||
.map((m) => m[1])
|
||||
.join("")
|
||||
.trim() || content;
|
||||
return str.replace(/&[a-z]+;/g, (c) => this.dict.get(c) || c);
|
||||
}
|
||||
async request(url) {
|
||||
const preference = new SharedPreferences();
|
||||
return (await new Client({ 'useDartHttpClient': true }).get(preference.get("url") + "/api.php/provide/vod?ac=detail" + url, { "Referer": preference.get("url") })).body;
|
||||
}
|
||||
getHeaders(url) {
|
||||
throw new Error("getHeaders not implemented");
|
||||
}
|
||||
async getPopular(page) {
|
||||
// let genres = [];
|
||||
// const gen = JSON.parse(await this.request("&ac=list"));
|
||||
// gen.class.forEach((e) => {
|
||||
// genres.push({
|
||||
// type_name: "SelectOption",
|
||||
// value: e.type_id,
|
||||
// name: e.type_name
|
||||
// });
|
||||
// });
|
||||
// console.log(genres)
|
||||
const res = JSON.parse(await this.request(`&pg=${page}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async getLatestUpdates(page) {
|
||||
const h = (new Date().getUTCHours() + 9) % 24;
|
||||
const res = JSON.parse(await this.request(`&pg=${page}&h=${h || 24}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async search(query, page, filters) {
|
||||
var categories;
|
||||
for (const filter of filters) {
|
||||
if (filter["type"] == "categories") {
|
||||
categories = filter["values"][filter["state"]]["value"];
|
||||
}
|
||||
}
|
||||
const res = JSON.parse(await this.request(`&wd=${query}&t=${categories ?? ""}&pg=${page}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async getDetail(url) {
|
||||
let desc = "无";
|
||||
const anime = JSON.parse(await this.request(url)).list[0];
|
||||
const blurb = this.text(anime.vod_blurb);
|
||||
const content = this.text(anime.vod_content);
|
||||
desc = desc.length < blurb?.length ? blurb : desc;
|
||||
desc = desc.length < content.length ? content : desc;
|
||||
const urls = anime.vod_play_url
|
||||
.split("#")
|
||||
.filter((e) => e)
|
||||
.map((e) => {
|
||||
const s = e.split("$");
|
||||
return { name: s[0], url: s[1] };
|
||||
});
|
||||
return {
|
||||
name: anime.vod_name,
|
||||
imageUrl: anime.vod_pic,
|
||||
description: desc,
|
||||
episodes: urls
|
||||
};
|
||||
}
|
||||
// For anime episode video list
|
||||
async getVideoList(url) {
|
||||
return [{
|
||||
url: url,
|
||||
originalUrl: url,
|
||||
quality: "HLS"
|
||||
}];
|
||||
}
|
||||
// For manga chapter pages
|
||||
async getPageList() {
|
||||
throw new Error("getPageList not implemented");
|
||||
}
|
||||
getFilterList() {
|
||||
return [{
|
||||
type: "categories",
|
||||
name: "影片類型",
|
||||
type_name: "SelectFilter",
|
||||
values: [
|
||||
// { type_name: "SelectOption", value: "1", name: "电影" },
|
||||
// { type_name: "SelectOption", value: "2", name: "连续剧" },
|
||||
// { type_name: "SelectOption", value: "3", name: "综艺" },
|
||||
{ type_name: "SelectOption", value: "", name: "全部" },
|
||||
{ type_name: "SelectOption", value: "1", name: "电视剧" },
|
||||
{ type_name: "SelectOption", value: "2", name: "电影" },
|
||||
{ type_name: "SelectOption", value: "3", name: "欧美剧" },
|
||||
{ type_name: "SelectOption", value: "4", name: "香港剧" },
|
||||
{ type_name: "SelectOption", value: "5", name: "韩剧" },
|
||||
{ type_name: "SelectOption", value: "6", name: "日剧" },
|
||||
{ type_name: "SelectOption", value: "7", name: "马泰剧" },
|
||||
{ type_name: "SelectOption", value: "8", name: "伦理片" },
|
||||
{ type_name: "SelectOption", value: "9", name: "动作片" },
|
||||
{ type_name: "SelectOption", value: "10", name: "爱情片" },
|
||||
{ type_name: "SelectOption", value: "11", name: "喜剧片" },
|
||||
{ type_name: "SelectOption", value: "12", name: "科幻片" },
|
||||
{ type_name: "SelectOption", value: "13", name: "恐怖片" },
|
||||
{ type_name: "SelectOption", value: "14", name: "剧情片" },
|
||||
{ type_name: "SelectOption", value: "15", name: "战争片" },
|
||||
{ type_name: "SelectOption", value: "16", name: "记录片" },
|
||||
{ type_name: "SelectOption", value: "17", name: "动漫" },
|
||||
{ type_name: "SelectOption", value: "20", name: "内地剧" },
|
||||
{ type_name: "SelectOption", value: "23", name: "动画片" },
|
||||
{ type_name: "SelectOption", value: "24", name: "中国动漫" },
|
||||
{ type_name: "SelectOption", value: "25", name: "日本动漫" },
|
||||
{ type_name: "SelectOption", value: "26", name: "欧美动漫" },
|
||||
{ type_name: "SelectOption", value: "27", name: "综艺" },
|
||||
{ type_name: "SelectOption", value: "28", name: "台湾剧" },
|
||||
{ type_name: "SelectOption", value: "29", name: "体育赛事" },
|
||||
{ type_name: "SelectOption", value: "30", name: "大陆综艺" },
|
||||
{ type_name: "SelectOption", value: "31", name: "日韩综艺" },
|
||||
{ type_name: "SelectOption", value: "32", name: "港台综艺" },
|
||||
{ type_name: "SelectOption", value: "33", name: "欧美综艺" },
|
||||
{ type_name: "SelectOption", value: "34", name: "灾难片" },
|
||||
{ type_name: "SelectOption", value: "35", name: "悬疑片" },
|
||||
{ type_name: "SelectOption", value: "36", name: "犯罪片" },
|
||||
{ type_name: "SelectOption", value: "37", name: "奇幻片" },
|
||||
{ type_name: "SelectOption", value: "38", name: "短剧" }
|
||||
]
|
||||
}];
|
||||
}
|
||||
getSourcePreferences() {
|
||||
return [
|
||||
{
|
||||
"key": "url",
|
||||
"listPreference": {
|
||||
"title": "Website Url",
|
||||
"summary": "",
|
||||
"valueIndex": 0,
|
||||
"entries": ["jisuzy.com", "jisuzy.tv", "jisuziyuan.com"],
|
||||
"entryValues": ["https://www.jisuzy.com", "https://www.jisuzy.tv", "https://www.jisuziyuan.com"],
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
}
|
||||
184
javascript/anime/src/zh/tiankongzy.js
Normal file
184
javascript/anime/src/zh/tiankongzy.js
Normal file
@@ -0,0 +1,184 @@
|
||||
const mangayomiSources = [{
|
||||
"name": "天空资源网",
|
||||
"lang": "zh",
|
||||
"baseUrl": "https://tiankongzy.com",
|
||||
"apiUrl": "",
|
||||
"iconUrl": "https://api.tiankongapi.com/template/v10012/images/logo.jpg",
|
||||
"typeSource": "single",
|
||||
"isManga": false,
|
||||
"isNsfw": false,
|
||||
"version": "0.0.1",
|
||||
"dateFormat": "",
|
||||
"dateFormatLocale": "",
|
||||
"pkgPath": "anime/src/zh/tiankongzy.js"
|
||||
}];
|
||||
|
||||
class DefaultExtension extends MProvider {
|
||||
dict = new Map([
|
||||
[" ", " "],
|
||||
[""", '"'],
|
||||
["<", "<"],
|
||||
[">", ">"],
|
||||
["&", "&"],
|
||||
["⋅", "·"],
|
||||
]);
|
||||
text(content) {
|
||||
if (!content) return "";
|
||||
const str =
|
||||
[...content.matchAll(/>([^<]+?)</g)]
|
||||
.map((m) => m[1])
|
||||
.join("")
|
||||
.trim() || content;
|
||||
return str.replace(/&[a-z]+;/g, (c) => this.dict.get(c) || c);
|
||||
}
|
||||
async request(url) {
|
||||
const preference = new SharedPreferences();
|
||||
return (await new Client({ 'useDartHttpClient': true }).get(preference.get("url") + "/api.php/provide/vod?ac=detail" + url, { "Referer": preference.get("url") })).body;
|
||||
}
|
||||
getHeaders(url) {
|
||||
throw new Error("getHeaders not implemented");
|
||||
}
|
||||
async getPopular(page) {
|
||||
// let genres = [];
|
||||
// const gen = JSON.parse(await this.request("&ac=list"));
|
||||
// gen.class.forEach((e) => {
|
||||
// genres.push({
|
||||
// type_name: "SelectOption",
|
||||
// value: e.type_id,
|
||||
// name: e.type_name
|
||||
// });
|
||||
// });
|
||||
// console.log(genres)
|
||||
const res = JSON.parse(await this.request(`&pg=${page}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async getLatestUpdates(page) {
|
||||
const h = (new Date().getUTCHours() + 9) % 24;
|
||||
const res = JSON.parse(await this.request(`&pg=${page}&h=${h || 24}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async search(query, page, filters) {
|
||||
var categories;
|
||||
for (const filter of filters) {
|
||||
if (filter["type"] == "categories") {
|
||||
categories = filter["values"][filter["state"]]["value"];
|
||||
}
|
||||
}
|
||||
const res = JSON.parse(await this.request(`&wd=${query}&t=${categories ?? ""}&pg=${page}`));
|
||||
return {
|
||||
list: res.list.map((e) => ({
|
||||
link: "&ids=" + e.vod_id,
|
||||
imageUrl: e.vod_pic,
|
||||
name: e.vod_name
|
||||
})),
|
||||
hasNextPage: true
|
||||
};
|
||||
}
|
||||
async getDetail(url) {
|
||||
let desc = "无";
|
||||
const anime = JSON.parse(await this.request(url)).list[0];
|
||||
const blurb = this.text(anime.vod_blurb);
|
||||
const content = this.text(anime.vod_content);
|
||||
desc = desc.length < blurb?.length ? blurb : desc;
|
||||
desc = desc.length < content.length ? content : desc;
|
||||
const urls = anime.vod_play_url
|
||||
.split("#")
|
||||
.filter((e) => e)
|
||||
.map((e) => {
|
||||
const s = e.split("$");
|
||||
return { name: s[0], url: s[1] };
|
||||
});
|
||||
return {
|
||||
name: anime.vod_name,
|
||||
imageUrl: anime.vod_pic,
|
||||
description: desc,
|
||||
episodes: urls
|
||||
};
|
||||
}
|
||||
// For anime episode video list
|
||||
async getVideoList(url) {
|
||||
return [{
|
||||
url: url,
|
||||
originalUrl: url,
|
||||
quality: "HLS"
|
||||
}];
|
||||
}
|
||||
// For manga chapter pages
|
||||
async getPageList() {
|
||||
throw new Error("getPageList not implemented");
|
||||
}
|
||||
getFilterList() {
|
||||
return [{
|
||||
type: "categories",
|
||||
name: "影片類型",
|
||||
type_name: "SelectFilter",
|
||||
values: [
|
||||
{ type_name: "SelectOption", value: "", name: "全部" },
|
||||
{ type_name: "SelectOption", value: "1", name: "电影" },
|
||||
{ type_name: "SelectOption", value: "2", name: "纪录片" },
|
||||
{ type_name: "SelectOption", value: "3", name: "连续剧" },
|
||||
{ type_name: "SelectOption", value: "4", name: "欧美剧" },
|
||||
{ type_name: "SelectOption", value: "5", name: "香港剧" },
|
||||
{ type_name: "SelectOption", value: "6", name: "动作片" },
|
||||
{ type_name: "SelectOption", value: "7", name: "爱情片" },
|
||||
{ type_name: "SelectOption", value: "8", name: "科幻片" },
|
||||
{ type_name: "SelectOption", value: "9", name: "恐怖片" },
|
||||
{ type_name: "SelectOption", value: "10", name: "剧情片" },
|
||||
{ type_name: "SelectOption", value: "11", name: "战争片" },
|
||||
{ type_name: "SelectOption", value: "12", name: "喜剧片" },
|
||||
{ type_name: "SelectOption", value: "20", name: "动画片" },
|
||||
{ type_name: "SelectOption", value: "21", name: "犯罪片" },
|
||||
{ type_name: "SelectOption", value: "22", name: "国产剧" },
|
||||
{ type_name: "SelectOption", value: "23", name: "韩国剧" },
|
||||
{ type_name: "SelectOption", value: "24", name: "动漫" },
|
||||
{ type_name: "SelectOption", value: "25", name: "综艺" },
|
||||
{ type_name: "SelectOption", value: "26", name: "大陆综艺" },
|
||||
{ type_name: "SelectOption", value: "27", name: "港台综艺" },
|
||||
{ type_name: "SelectOption", value: "28", name: "日韩综艺" },
|
||||
{ type_name: "SelectOption", value: "29", name: "欧美综艺" },
|
||||
{ type_name: "SelectOption", value: "30", name: "台湾剧" },
|
||||
{ type_name: "SelectOption", value: "31", name: "国产动漫" },
|
||||
{ type_name: "SelectOption", value: "32", name: "日本动漫" },
|
||||
{ type_name: "SelectOption", value: "33", name: "欧美动漫" },
|
||||
{ type_name: "SelectOption", value: "34", name: "海外动漫" },
|
||||
{ type_name: "SelectOption", value: "35", name: "泰国剧" },
|
||||
{ type_name: "SelectOption", value: "36", name: "日剧" },
|
||||
{ type_name: "SelectOption", value: "37", name: "电影解说" },
|
||||
{ type_name: "SelectOption", value: "38", name: "奇幻片" },
|
||||
{ type_name: "SelectOption", value: "39", name: "灾难片" },
|
||||
{ type_name: "SelectOption", value: "40", name: "悬疑片" },
|
||||
{ type_name: "SelectOption", value: "41", name: "其他片" },
|
||||
{ type_name: "SelectOption", value: "42", name: "体育赛事" },
|
||||
{ type_name: "SelectOption", value: "44", name: "短剧" }
|
||||
]
|
||||
}];
|
||||
}
|
||||
getSourcePreferences() {
|
||||
return [
|
||||
{
|
||||
"key": "url",
|
||||
"listPreference": {
|
||||
"title": "Website Url",
|
||||
"summary": "",
|
||||
"valueIndex": 0,
|
||||
"entries": ["tiankongzy.com", "tkzy1", "tkzy2", "tkzy3", "tkzy4", "tkzy5", "tkzy6", "tkzy7", "tkzy8", "tkzy9"],
|
||||
"entryValues": ["https://tiankongzy.com", "https://tkzy1.com", "https://tkzy2.com", "https://tkzy3.com", "https://tkzy4.com", "https://tkzy5.com", "https://tkzy6.com", "https://tkzy7.com", "https://tkzy8.com", "https://tkzy9.com"],
|
||||
}
|
||||
}
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user