mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 10:51:17 +00:00
extension(aniplay): Added details
This commit is contained in:
@@ -5,7 +5,7 @@ const mangayomiSources = [{
|
|||||||
"apiUrl": "https://aniplaynow.live",
|
"apiUrl": "https://aniplaynow.live",
|
||||||
"iconUrl": "https://www.google.com/s2/favicons?sz=128&domain=https://aniplaynow.live/",
|
"iconUrl": "https://www.google.com/s2/favicons?sz=128&domain=https://aniplaynow.live/",
|
||||||
"typeSource": "single",
|
"typeSource": "single",
|
||||||
"isManga": false,
|
"itemType": 1,
|
||||||
"version": "0.0.3",
|
"version": "0.0.3",
|
||||||
"dateFormat": "",
|
"dateFormat": "",
|
||||||
"dateFormatLocale": "",
|
"dateFormatLocale": "",
|
||||||
@@ -70,6 +70,7 @@ class DefaultExtension extends MProvider {
|
|||||||
`.trim();
|
`.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// code from torrentioanime.js
|
||||||
anilistLatestQuery() {
|
anilistLatestQuery() {
|
||||||
const currentTimeInSeconds = Math.floor(Date.now() / 1000);
|
const currentTimeInSeconds = Math.floor(Date.now() / 1000);
|
||||||
return `
|
return `
|
||||||
@@ -114,6 +115,86 @@ class DefaultExtension extends MProvider {
|
|||||||
}
|
}
|
||||||
`.trim();
|
`.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// code from torrentioanime.js
|
||||||
|
async getAnimeDetails(anilistId) {
|
||||||
|
const query = `
|
||||||
|
query($id: Int){
|
||||||
|
Media(id: $id){
|
||||||
|
id
|
||||||
|
title {
|
||||||
|
romaji
|
||||||
|
english
|
||||||
|
native
|
||||||
|
}
|
||||||
|
coverImage {
|
||||||
|
extraLarge
|
||||||
|
large
|
||||||
|
}
|
||||||
|
description
|
||||||
|
status
|
||||||
|
tags {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
genres
|
||||||
|
studios {
|
||||||
|
nodes {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
countryOfOrigin
|
||||||
|
isAdult
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`.trim();
|
||||||
|
|
||||||
|
const variables = JSON.stringify({ id: anilistId });
|
||||||
|
|
||||||
|
const res = await this.makeGraphQLRequest(query, variables);
|
||||||
|
const media = JSON.parse(res.body).data.Media;
|
||||||
|
const anime = {};
|
||||||
|
anime.name = (() => {
|
||||||
|
var preferenceTitle = this.getPreference("aniplay_pref_title");
|
||||||
|
switch (preferenceTitle) {
|
||||||
|
case "romaji":
|
||||||
|
return media?.title?.romaji || "";
|
||||||
|
case "english":
|
||||||
|
return media?.title?.english?.trim() || media?.title?.romaji || "";
|
||||||
|
case "native":
|
||||||
|
return media?.title?.native || "";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
anime.imageUrl = media?.coverImage?.extraLarge || "";
|
||||||
|
anime.description = (media?.description || "No Description")
|
||||||
|
.replace(/<br><br>/g, "\n")
|
||||||
|
.replace(/<.*?>/g, "");
|
||||||
|
|
||||||
|
anime.status = (() => {
|
||||||
|
switch (media?.status) {
|
||||||
|
case "RELEASING":
|
||||||
|
return 0;
|
||||||
|
case "FINISHED":
|
||||||
|
return 1;
|
||||||
|
case "HIATUS":
|
||||||
|
return 2;
|
||||||
|
case "NOT_YET_RELEASED":
|
||||||
|
return 3;
|
||||||
|
default:
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
const tagsList = media?.tags?.map(tag => tag.name).filter(Boolean) || [];
|
||||||
|
const genresList = media?.genres || [];
|
||||||
|
anime.genre = [...new Set([...tagsList, ...genresList])].sort();
|
||||||
|
const studiosList = media?.studios?.nodes?.map(node => node.name).filter(Boolean) || [];
|
||||||
|
anime.author = studiosList.sort().join(", ");
|
||||||
|
return anime;
|
||||||
|
}
|
||||||
|
|
||||||
|
// code from torrentioanime.js
|
||||||
async makeGraphQLRequest(query, variables) {
|
async makeGraphQLRequest(query, variables) {
|
||||||
const res = await this.client.post("https://graphql.anilist.co", {},
|
const res = await this.client.post("https://graphql.anilist.co", {},
|
||||||
{
|
{
|
||||||
@@ -122,6 +203,7 @@ class DefaultExtension extends MProvider {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// code from torrentioanime.js
|
||||||
parseSearchJson(jsonLine, isLatestQuery = false) {
|
parseSearchJson(jsonLine, isLatestQuery = false) {
|
||||||
const jsonData = JSON.parse(jsonLine);
|
const jsonData = JSON.parse(jsonLine);
|
||||||
jsonData.type = isLatestQuery ? "AnilistMetaLatest" : "AnilistMeta";
|
jsonData.type = isLatestQuery ? "AnilistMetaLatest" : "AnilistMeta";
|
||||||
@@ -201,8 +283,65 @@ class DefaultExtension extends MProvider {
|
|||||||
get supportsLatest() {
|
get supportsLatest() {
|
||||||
throw new Error("supportsLatest not implemented");
|
throw new Error("supportsLatest not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async aniplayRequest(url, body) {
|
||||||
|
var next_action = ""
|
||||||
|
|
||||||
|
if (url.indexOf("/info/") > -1) {
|
||||||
|
next_action = 'f3422af67c84852f5e63d50e1f51718f1c0225c4'
|
||||||
|
} else if (url.indexOf("/watch/") > -1) {
|
||||||
|
next_action = '5dbcd21c7c276c4d15f8de29d9ef27aef5ea4a5e'
|
||||||
|
}
|
||||||
|
|
||||||
|
var headers = {
|
||||||
|
"referer": "https://aniplaynow.live",
|
||||||
|
'next-action': next_action,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
}
|
||||||
|
|
||||||
|
var response = await new Client().post(url, headers, body);
|
||||||
|
|
||||||
|
if (response.statusCode != 200) {
|
||||||
|
throw new Error("Error: " + response.statusText);
|
||||||
|
}
|
||||||
|
return JSON.parse(response.body.split('1:')[1])
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
async getDetail(url) {
|
async getDetail(url) {
|
||||||
throw new Error("getDetail not implemented");
|
var anilistId = url
|
||||||
|
var animeData = await this.getAnimeDetails(anilistId)
|
||||||
|
|
||||||
|
|
||||||
|
var link = `${this.source.baseUrl}anime/info/${anilistId}`
|
||||||
|
var body = [anilistId, true, false]
|
||||||
|
var result = await this.aniplayRequest(link, body)
|
||||||
|
if (result.length < 1) {
|
||||||
|
throw new Error("Error: No data found for the given URL");
|
||||||
|
}
|
||||||
|
|
||||||
|
var user_provider = this.getPreference("aniplay_pref_provider");
|
||||||
|
var choice = result[0]
|
||||||
|
for (var ch of result) {
|
||||||
|
if (ch["providerId"] == user_provider) {
|
||||||
|
choice = ch
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var chapters = []
|
||||||
|
var epList = choice.episodes
|
||||||
|
for (var ep of epList) {
|
||||||
|
var title = ep.title
|
||||||
|
var num = ep.number
|
||||||
|
var name = `E${num}: ${title}`
|
||||||
|
var dateUpload = "createdAt" in ep ? new Date(ep.createdAt) : new Date().now()
|
||||||
|
dateUpload = dateUpload.valueOf().toString();
|
||||||
|
var epUrl = `${JSON.stringify(ep)}||${choice.providerId}`
|
||||||
|
chapters.push({ name, url: epUrl, dateUpload })
|
||||||
|
}
|
||||||
|
animeData.link = link
|
||||||
|
animeData.chapters = chapters.reverse()
|
||||||
|
return animeData
|
||||||
}
|
}
|
||||||
// For anime episode video list
|
// For anime episode video list
|
||||||
async getVideoList(url) {
|
async getVideoList(url) {
|
||||||
@@ -223,15 +362,21 @@ class DefaultExtension extends MProvider {
|
|||||||
"title": "Preferred Title",
|
"title": "Preferred Title",
|
||||||
"summary": "",
|
"summary": "",
|
||||||
"valueIndex": 0,
|
"valueIndex": 0,
|
||||||
"entries": [
|
"entries": ["Romaji", "English", "Native"],
|
||||||
"Romaji",
|
"entryValues": ["romaji", "english", "native"],
|
||||||
"English",
|
|
||||||
"Native"],
|
|
||||||
"entryValues": [
|
|
||||||
"romaji",
|
|
||||||
"english",
|
|
||||||
"native"],
|
|
||||||
}
|
}
|
||||||
},]
|
},
|
||||||
|
{
|
||||||
|
"key": "aniplay_pref_provider",
|
||||||
|
"listPreference": {
|
||||||
|
"title": "Preferred provider",
|
||||||
|
"summary": "",
|
||||||
|
"valueIndex": 0,
|
||||||
|
"entries": ["Anya", "Yuki", "Kuro"],
|
||||||
|
"entryValues": ["anya", "yuki", "kuro"],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user