mirror of
https://git.luna-app.eu/50n50/sources
synced 2025-12-21 21:26:19 +01:00
95 lines
2.8 KiB
JavaScript
95 lines
2.8 KiB
JavaScript
async function searchResults(keyword) {
|
||
const response = await fetch(`https://111.90.159.132/?s=${keyword}`);
|
||
const html = await response;
|
||
|
||
const results = [];
|
||
const filmListRegex = /<article[^>]+itemscope[^>]+itemtype="http:\/\/schema\.org\/Movie"[^>]*>[\s\S]*?<\/article>/g;
|
||
const items = html.match(filmListRegex);
|
||
|
||
if (!items) return results;
|
||
|
||
items.forEach(itemHtml => {
|
||
const titleMatch = itemHtml.match(/<p class="entry-title"[^>]*>\s*<a[^>]+>([^<]+)<\/a>/);
|
||
const hrefMatch = itemHtml.match(/<a href="([^"]+)"[^>]+title="Watch Movie:/);
|
||
const imgMatch = itemHtml.match(/<img[^>]+src="([^"]+)"[^>]+alt="([^"]+)"/);
|
||
|
||
if (titleMatch && hrefMatch && imgMatch) {
|
||
results.push({
|
||
title: titleMatch[1].trim(),
|
||
image: imgMatch[1].trim(),
|
||
href: hrefMatch[1].trim()
|
||
});
|
||
}
|
||
});
|
||
console.log(JSON.stringify(results));
|
||
return JSON.stringify(results);
|
||
}
|
||
|
||
async function extractDetails(url) {
|
||
const response = await fetch(url);
|
||
const html = await response;
|
||
const details = [];
|
||
|
||
const descriptionMatch = html.match(/<div class="entry-content entry-content-single"[^>]*>([\s\S]*?)<\/div>/);
|
||
let description = descriptionMatch ? descriptionMatch[1].replace(/<\/?[^>]+(>|$)/g, "").trim() : '';
|
||
|
||
const entities = {
|
||
'‘': '‘',
|
||
'’': '’',
|
||
'“': '“',
|
||
'”': '”',
|
||
'&': '&',
|
||
''': "'",
|
||
' ': ' ',
|
||
'©': '©',
|
||
'®': '®',
|
||
'™': '™',
|
||
};
|
||
|
||
for (const [entity, char] of Object.entries(entities)) {
|
||
description = description.replace(new RegExp(entity, 'g'), char);
|
||
}
|
||
|
||
description = description.replace(/\s+/g, ' ').replace(/Country:[^<]+/g, '').trim();
|
||
|
||
const airdateMatch = html.match(/Year: <a href="[^"]*" rel="tag">(\d{4})<\/a>/);
|
||
let airdate = airdateMatch ? airdateMatch[1] : '';
|
||
|
||
if (description && airdate) {
|
||
details.push({
|
||
description: description,
|
||
aliases: 'N/A',
|
||
airdate: airdate
|
||
});
|
||
}
|
||
console.log(details);
|
||
return JSON.stringify(details);
|
||
}
|
||
|
||
|
||
async function extractEpisodes(url) {
|
||
const episodes = [];
|
||
if (url) {
|
||
const hardcodedEpisode = {
|
||
href: url,
|
||
number: `1`
|
||
};
|
||
episodes.push(hardcodedEpisode);
|
||
}
|
||
|
||
console.log(JSON.stringify(episodes));
|
||
return JSON.stringify(episodes);
|
||
}
|
||
|
||
async function extractStreamUrl(input) {
|
||
const response = await fetch(input);
|
||
const html = await response;
|
||
console.log(html);
|
||
|
||
const sourceRegex = /<video[\s\S]*?<source\s+src=["']([^"']+)["'][^>]*>/i;
|
||
const match = html.match(sourceRegex);
|
||
const url = match ? match[1].replace(/&/g, '&') : null;
|
||
console.log(url);
|
||
return url;
|
||
}
|
||
|