Files
kodjodevf-mangayomi-extensions/javascript/anime/src/zh/mikan.js
2025-03-21 11:05:44 +08:00

163 lines
4.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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": "",
}
}];
}
}