mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 10:51:17 +00:00
163 lines
4.7 KiB
JavaScript
163 lines
4.7 KiB
JavaScript
const mangayomiSources = [{
|
||
"name": "蜜柑计划",
|
||
"lang": "zh",
|
||
"baseUrl": "https://mikanani.me",
|
||
"apiUrl": "",
|
||
"iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/zh.mikan.png",
|
||
"typeSource": "torrent",
|
||
"itemType": 1,
|
||
"isNsfw": false,
|
||
"version": "0.0.3",
|
||
"dateFormat": "",
|
||
"dateFormatLocale": "",
|
||
"pkgPath": "anime/src/zh/mikan.js"
|
||
}];
|
||
|
||
class DefaultExtension extends MProvider {
|
||
dateStringToTimestamp(dateString) {
|
||
var parts = dateString.split('/');
|
||
var year = parseInt(parts[2]);
|
||
var month = parseInt(parts[0]) - 1;
|
||
var day = parseInt(parts[1]);
|
||
var date = new Date(year, month, day);
|
||
var timestamp = date.getTime();
|
||
return timestamp;
|
||
}
|
||
|
||
baseURL () {
|
||
const preference = new SharedPreferences();
|
||
var base_url = preference.get("domain_url");
|
||
if (base_url.endsWith("/")) {
|
||
base_url = base_url.slice(0, -1);
|
||
}
|
||
return base_url;
|
||
}
|
||
|
||
getHeaders(url) {
|
||
throw new Error("getHeaders not implemented");
|
||
}
|
||
|
||
async getItems(url, cookies) {
|
||
var res;
|
||
if (cookies) {
|
||
const identity = new SharedPreferences().get("cookies");
|
||
res = await new Client().get(this.baseURL() + url, {
|
||
Cookie: `.AspNetCore.Identity.Application=${identity}`
|
||
});
|
||
if (res.body.search("退出登录") == -1) {
|
||
return {
|
||
list: [{name: "请设置Cookies", link: "", imageUrl: "https://mikan.tangbai.cc/images/mikan-pic.png"}],
|
||
hasNextPage: false
|
||
}
|
||
}
|
||
} else {
|
||
res = await new Client().get(this.baseURL() + url);
|
||
}
|
||
const doc = new Document(res.body);
|
||
const items = [];
|
||
const elements = doc.select("div.m-week-square");
|
||
for (const element of elements) {
|
||
const url = element.selectFirst("a").attr("href");
|
||
if (url == "javascript:void(0);") {
|
||
continue;
|
||
}
|
||
const title = element.selectFirst("a").attr("title");
|
||
const cover = this.baseURL() + element.selectFirst("img").attr("data-src");
|
||
items.push({
|
||
name: title,
|
||
imageUrl: cover,
|
||
link: url
|
||
});
|
||
}
|
||
return {
|
||
list: items,
|
||
hasNextPage: false
|
||
};
|
||
}
|
||
|
||
async getPopular(page) {
|
||
return await this.getItems("/Home/MyBangumi", true);
|
||
}
|
||
|
||
async getLatestUpdates(page) {
|
||
return await this.getItems("", false);
|
||
}
|
||
|
||
async search(query, page, filters) {
|
||
const res = await new Client().get(this.baseURL() + `/Home/Search?searchstr=${query}`);
|
||
const doc = new Document(res.body);
|
||
const items = [];
|
||
const elements = doc.select("div.central-container ul.list-inline li");
|
||
for (const element of elements) {
|
||
const title = element.selectFirst("div.an-text").text;
|
||
const cover = this.baseURL() + element.selectFirst("span").attr("data-src");
|
||
const url = element.selectFirst("a").attr("href");
|
||
items.push({
|
||
name: title,
|
||
imageUrl: cover,
|
||
link: url
|
||
});
|
||
}
|
||
return {
|
||
list: items,
|
||
hasNextPage: false
|
||
};
|
||
}
|
||
|
||
async getDetail(url) {
|
||
const res = await new Client().get(this.baseURL() + url);
|
||
const doc = new Document(res.body);
|
||
const cover = this.baseURL() + doc.selectFirst("div.content img").attr("src");
|
||
const title = doc.selectFirst("p.title").text;
|
||
const desc = doc.selectFirst("div.info").text;
|
||
const eps = [];
|
||
const lists = doc.select("div.m-bangumi-list-content");
|
||
for (const list of lists) {
|
||
//const header = list.selectFirst("span.title").text;
|
||
for (const item of list.select("div.m-bangumi-item")) {
|
||
const title = item.selectFirst("div.text").text;
|
||
const url = this.baseURL() + item.selectFirst("div.right a").attr("href");
|
||
const date = this.dateStringToTimestamp(item.selectFirst("div.date").text.split(" ")[0]);
|
||
eps.push({
|
||
name: title,
|
||
url: url,
|
||
dateUpload: date.toString()
|
||
});
|
||
}
|
||
}
|
||
//eps.reverse();
|
||
return {
|
||
name: title,
|
||
imageUrl: cover,
|
||
description: desc,
|
||
episodes: eps
|
||
};
|
||
}
|
||
|
||
|
||
getFilterList() {
|
||
throw new Error("getFilterList not implemented");
|
||
}
|
||
|
||
getSourcePreferences() {
|
||
return [{
|
||
"key": "domain_url",
|
||
"editTextPreference": {
|
||
"title": "Url",
|
||
"summary": "蜜柑计划网址",
|
||
"value": "https://mikanani.me",
|
||
"dialogTitle": "URL",
|
||
"dialogMessage": "",
|
||
}
|
||
},{
|
||
"key": "cookies",
|
||
"editTextPreference": {
|
||
"title": "用户Cookies(在webview中登陆则可不设)",
|
||
"summary": "用于读取用户订阅的Cookies(.AspNetCore.Identity.Application)",
|
||
"value": "",
|
||
"dialogTitle": "Cookies",
|
||
"dialogMessage": "",
|
||
}
|
||
}];
|
||
}
|
||
} |