mirror of
https://git.luna-app.eu/50n50/sources
synced 2025-12-21 21:26:19 +01:00
Add kisskh/kisskh.js
This commit is contained in:
parent
98b1cbd225
commit
b47477407d
1 changed files with 146 additions and 0 deletions
146
kisskh/kisskh.js
Normal file
146
kisskh/kisskh.js
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
// Search, Details and Episodes function are from ibro's module.
|
||||||
|
|
||||||
|
async function searchResults(keyword) {
|
||||||
|
try {
|
||||||
|
const encodedKeyword = encodeURIComponent(keyword);
|
||||||
|
const responseText = await soraFetch(`https://kisskh.co/api/DramaList/Search?q=${encodedKeyword}&type=0`);
|
||||||
|
const data = await responseText.json();
|
||||||
|
|
||||||
|
const transformedResults = data.map(result => {
|
||||||
|
const editedTitle = result.title.replace(/[\s()']/g, '-');
|
||||||
|
|
||||||
|
return {
|
||||||
|
title: result.title,
|
||||||
|
image: result.thumbnail,
|
||||||
|
href: `https://kisskh.co/Drama/${editedTitle}?id=${result.id}`
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return JSON.stringify(transformedResults);
|
||||||
|
} catch (error) {
|
||||||
|
console.log('Fetch error in searchResults:', error);
|
||||||
|
return JSON.stringify([{ title: 'Error', image: '', href: '' }]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function extractDetails(url) {
|
||||||
|
try {
|
||||||
|
const match = url.match(/https:\/\/kisskh\.co\/Drama\/([^\/]+)\?id=([^\/]+)/);
|
||||||
|
if (!match) throw new Error("Invalid URL format");
|
||||||
|
|
||||||
|
const showId = match[2];
|
||||||
|
const responseText = await soraFetch(`https://kisskh.co/api/DramaList/Drama/${showId}?isq=false`);
|
||||||
|
const data = await responseText.json();
|
||||||
|
|
||||||
|
const transformedResults = [{
|
||||||
|
description: data.description || 'No description available',
|
||||||
|
aliases: ``,
|
||||||
|
airdate: `Released: ${data.releaseDate ? data.releaseDate : 'Unknown'}`
|
||||||
|
}];
|
||||||
|
|
||||||
|
return JSON.stringify(transformedResults);
|
||||||
|
} catch (error) {
|
||||||
|
console.log('Details error:', error);
|
||||||
|
return JSON.stringify([{
|
||||||
|
description: 'Error loading description',
|
||||||
|
aliases: 'Duration: Unknown',
|
||||||
|
airdate: 'Aired/Released: Unknown'
|
||||||
|
}]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function extractEpisodes(url) {
|
||||||
|
try {
|
||||||
|
const match = url.match(/https:\/\/kisskh\.co\/Drama\/([^\/]+)\?id=([^\/]+)/);
|
||||||
|
if (!match) throw new Error("Invalid URL format");
|
||||||
|
const showTitle = match[1];
|
||||||
|
const showId = match[2];
|
||||||
|
|
||||||
|
const showResponseText = await soraFetch(`https://kisskh.co/api/DramaList/Drama/${showId}?isq=false`);
|
||||||
|
const showData = await showResponseText.json();
|
||||||
|
|
||||||
|
const episodes = showData.episodes?.map(episode => ({
|
||||||
|
href: `https://kisskh.co/Drama/${showTitle}/Episode-${episode.number}?id=${showId}&ep=${episode.id}`,
|
||||||
|
number: episode.number,
|
||||||
|
title: episode.name || `Episode ${episode.number}` || ""
|
||||||
|
}));
|
||||||
|
|
||||||
|
const reversedEpisodes = episodes.reverse();
|
||||||
|
|
||||||
|
console.log(reversedEpisodes);
|
||||||
|
|
||||||
|
return JSON.stringify(reversedEpisodes);
|
||||||
|
} catch (error) {
|
||||||
|
console.log('Fetch error in extractEpisodes:', error);
|
||||||
|
return JSON.stringify([]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function extractStreamUrl(url) {
|
||||||
|
try {
|
||||||
|
const episodeID = url.split('&ep=')[1];
|
||||||
|
|
||||||
|
const decryptedStreamResponse = await soraFetch(`https://enc-dec.app/api/enc-kisskh?text=${episodeID}&type=vid`);
|
||||||
|
const decryptedStreamData = await decryptedStreamResponse.json();
|
||||||
|
const streamkKey = decryptedStreamData.result;
|
||||||
|
|
||||||
|
const decryptedSubtitlesResponse = await soraFetch(`https://enc-dec.app/api/enc-kisskh?text=${episodeID}&type=sub`);
|
||||||
|
const decryptedSubtitlesData = await decryptedSubtitlesResponse.json();
|
||||||
|
const subtitlesKey = decryptedSubtitlesData.result;
|
||||||
|
|
||||||
|
const streamResponse = await soraFetch(`https://kisskh.co/api/DramaList/Episode/${episodeID}.png?err=false&ts=null&time=null&kkey=${streamkKey}`);
|
||||||
|
const streamData = await streamResponse.json();
|
||||||
|
const streamUrl = streamData.Video;
|
||||||
|
|
||||||
|
const subtitlesResponse = await soraFetch(`https://kisskh.co/api/Sub/${episodeID}?kkey=${subtitlesKey}`);
|
||||||
|
const subtitlesData = await subtitlesResponse.json();
|
||||||
|
const englishSubtitle = subtitlesData.find(sub => sub.land === "en");
|
||||||
|
const englishSubtitleUrl = englishSubtitle?.src || "none";
|
||||||
|
|
||||||
|
let formattedSubtitleUrl = englishSubtitleUrl;
|
||||||
|
if (/\?v=/.test(englishSubtitleUrl)) {
|
||||||
|
formattedSubtitleUrl = "https://kisskh-five.vercel.app/api/proxy?url=" + encodeURIComponent(englishSubtitleUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (streamUrl) {
|
||||||
|
const results = {
|
||||||
|
streams: [{
|
||||||
|
title: "Stream",
|
||||||
|
streamUrl,
|
||||||
|
headers: {
|
||||||
|
"Referer": "https://kisskh.co/",
|
||||||
|
"Origin": "https://kisskh.co"
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
subtitles: formattedSubtitleUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
return JSON.stringify(results);
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log('Fetch error in extractStreamUrl:', error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function soraFetch(url, options = { headers: {}, method: 'GET', body: null, encoding: 'utf-8' }) {
|
||||||
|
try {
|
||||||
|
return await fetchv2(
|
||||||
|
url,
|
||||||
|
options.headers ?? {},
|
||||||
|
options.method ?? 'GET',
|
||||||
|
options.body ?? null,
|
||||||
|
true,
|
||||||
|
options.encoding ?? 'utf-8'
|
||||||
|
);
|
||||||
|
} catch(e) {
|
||||||
|
try {
|
||||||
|
return await fetch(url, options);
|
||||||
|
} catch(error) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue