mirror of
https://github.com/p-stream/providers.git
synced 2026-01-11 20:10:33 +00:00
use centralized language map
This commit is contained in:
parent
401f38a9d5
commit
64078d8466
4 changed files with 84 additions and 141 deletions
|
|
@ -30,6 +30,79 @@ export function getCaptionTypeFromUrl(url: string): CaptionType | null {
|
|||
}
|
||||
|
||||
export function labelToLanguageCode(label: string): string | null {
|
||||
// extra language codes
|
||||
const languageMap: Record<string, string> = {
|
||||
'chinese - hong kong': 'zh',
|
||||
'chinese - traditional': 'zh',
|
||||
czech: 'cs',
|
||||
danish: 'da',
|
||||
dutch: 'nl',
|
||||
english: 'en',
|
||||
'english - sdh': 'en',
|
||||
finnish: 'fi',
|
||||
french: 'fr',
|
||||
german: 'de',
|
||||
greek: 'el',
|
||||
hungarian: 'hu',
|
||||
italian: 'it',
|
||||
korean: 'ko',
|
||||
norwegian: 'no',
|
||||
polish: 'pl',
|
||||
portuguese: 'pt',
|
||||
'portuguese - brazilian': 'pt',
|
||||
romanian: 'ro',
|
||||
'spanish - european': 'es',
|
||||
'spanish - latin american': 'es',
|
||||
spanish: 'es',
|
||||
swedish: 'sv',
|
||||
turkish: 'tr',
|
||||
اَلْعَرَبِيَّةُ: 'ar',
|
||||
বাংলা: 'bn',
|
||||
filipino: 'tl',
|
||||
indonesia: 'id',
|
||||
اردو: 'ur',
|
||||
English: 'en',
|
||||
Arabic: 'ar',
|
||||
Bosnian: 'bs',
|
||||
Bulgarian: 'bg',
|
||||
Croatian: 'hr',
|
||||
Czech: 'cs',
|
||||
Danish: 'da',
|
||||
Dutch: 'nl',
|
||||
Estonian: 'et',
|
||||
Finnish: 'fi',
|
||||
French: 'fr',
|
||||
German: 'de',
|
||||
Greek: 'el',
|
||||
Hebrew: 'he',
|
||||
Hungarian: 'hu',
|
||||
Indonesian: 'id',
|
||||
Italian: 'it',
|
||||
Norwegian: 'no',
|
||||
Persian: 'fa',
|
||||
Polish: 'pl',
|
||||
Portuguese: 'pt',
|
||||
'Protuguese (BR)': 'pt-br',
|
||||
Romanian: 'ro',
|
||||
Russian: 'ru',
|
||||
russian: 'ru',
|
||||
Serbian: 'sr',
|
||||
Slovenian: 'sl',
|
||||
Spanish: 'es',
|
||||
Swedish: 'sv',
|
||||
Thai: 'th',
|
||||
Turkish: 'tr',
|
||||
// Simple language codes
|
||||
ng: 'en',
|
||||
re: 'fr',
|
||||
pa: 'es',
|
||||
};
|
||||
|
||||
// First try our mapping
|
||||
const mappedCode = languageMap[label.toLowerCase()];
|
||||
if (mappedCode) return mappedCode;
|
||||
|
||||
// Fallback to ISO6391 library
|
||||
const code = ISO6391.getCode(label);
|
||||
if (code.length === 0) return null;
|
||||
return code;
|
||||
|
|
|
|||
|
|
@ -1,73 +1,11 @@
|
|||
import { flags } from '@/entrypoint/utils/targets';
|
||||
import { EmbedOutput, makeEmbed } from '@/providers/base';
|
||||
import { labelToLanguageCode } from '@/providers/captions';
|
||||
import { NotFoundError } from '@/utils/errors';
|
||||
import { createM3U8ProxyUrl } from '@/utils/proxy';
|
||||
|
||||
const BaseUrl = 'https://player.vidzee.wtf/api/server';
|
||||
|
||||
const languageMap: Record<string, string> = {
|
||||
'chinese - hong kong': 'zh',
|
||||
'chinese - traditional': 'zh',
|
||||
czech: 'cs',
|
||||
danish: 'da',
|
||||
dutch: 'nl',
|
||||
english: 'en',
|
||||
'english - sdh': 'en',
|
||||
finnish: 'fi',
|
||||
french: 'fr',
|
||||
german: 'de',
|
||||
greek: 'el',
|
||||
hungarian: 'hu',
|
||||
italian: 'it',
|
||||
korean: 'ko',
|
||||
norwegian: 'no',
|
||||
polish: 'pl',
|
||||
portuguese: 'pt',
|
||||
'portuguese - brazilian': 'pt',
|
||||
romanian: 'ro',
|
||||
'spanish - european': 'es',
|
||||
'spanish - latin american': 'es',
|
||||
spanish: 'es',
|
||||
swedish: 'sv',
|
||||
turkish: 'tr',
|
||||
اَلْعَرَبِيَّةُ: 'ar',
|
||||
বাংলা: 'bn',
|
||||
filipino: 'tl',
|
||||
indonesia: 'id',
|
||||
اردو: 'ur',
|
||||
English: 'en',
|
||||
Arabic: 'ar',
|
||||
Bosnian: 'bs',
|
||||
Bulgarian: 'bg',
|
||||
Croatian: 'hr',
|
||||
Czech: 'cs',
|
||||
Danish: 'da',
|
||||
Dutch: 'nl',
|
||||
Estonian: 'et',
|
||||
Finnish: 'fi',
|
||||
French: 'fr',
|
||||
German: 'de',
|
||||
Greek: 'el',
|
||||
Hebrew: 'he',
|
||||
Hungarian: 'hu',
|
||||
Indonesian: 'id',
|
||||
Italian: 'it',
|
||||
Norwegian: 'no',
|
||||
Persian: 'fa',
|
||||
Polish: 'pl',
|
||||
Portuguese: 'pt',
|
||||
'Protuguese (BR)': 'pt-br',
|
||||
Romanian: 'ro',
|
||||
Russian: 'ru',
|
||||
russian: 'ru',
|
||||
Serbian: 'sr',
|
||||
Slovenian: 'sl',
|
||||
Spanish: 'es',
|
||||
Swedish: 'sv',
|
||||
Thai: 'th',
|
||||
Turkish: 'tr',
|
||||
};
|
||||
|
||||
export const vidzeeServer1Embed = makeEmbed({
|
||||
id: 'vidzee-server1',
|
||||
name: 'Server 1',
|
||||
|
|
@ -100,12 +38,11 @@ export const vidzeeServer1Embed = makeEmbed({
|
|||
|
||||
const captions =
|
||||
data.tracks?.map((track: { lang: string; url: string }, i: number) => {
|
||||
const languageBase = track.lang.toLowerCase();
|
||||
return {
|
||||
id: i,
|
||||
type: 'vtt',
|
||||
url: track.url,
|
||||
language: languageMap[languageBase] || 'unknown',
|
||||
language: labelToLanguageCode(track.lang) || 'unknown',
|
||||
};
|
||||
}) || [];
|
||||
|
||||
|
|
@ -160,12 +97,11 @@ export const vidzeeServer2Embed = makeEmbed({
|
|||
|
||||
const captions =
|
||||
data.tracks?.map((track: { lang: string; url: string }, i: number) => {
|
||||
const languageBase = track.lang.toLowerCase();
|
||||
return {
|
||||
id: i,
|
||||
type: 'vtt',
|
||||
url: track.url,
|
||||
language: languageMap[languageBase] || 'unknown',
|
||||
language: labelToLanguageCode(track.lang) || 'unknown',
|
||||
};
|
||||
}) || [];
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { load } from 'cheerio';
|
|||
|
||||
import { flags } from '@/entrypoint/utils/targets';
|
||||
import { SourcererOutput, makeSourcerer } from '@/providers/base';
|
||||
import { labelToLanguageCode } from '@/providers/captions';
|
||||
import { MovieScrapeContext, ShowScrapeContext } from '@/utils/context';
|
||||
import { NotFoundError } from '@/utils/errors';
|
||||
|
||||
|
|
@ -27,17 +28,11 @@ async function comboScraper(ctx: ShowScrapeContext | MovieScrapeContext): Promis
|
|||
const encodedUrl = proxyUrl.searchParams.get('url') || '';
|
||||
const playlist = decodeURIComponent(encodedUrl);
|
||||
|
||||
const isoLanguageMap: Record<string, string> = {
|
||||
ng: 'en',
|
||||
re: 'fr',
|
||||
pa: 'es',
|
||||
};
|
||||
|
||||
const captions = $('media-provider track')
|
||||
.map((_, el) => {
|
||||
const url = $(el).attr('src') || '';
|
||||
const rawLang = $(el).attr('lang') || 'unknown';
|
||||
const languageCode = isoLanguageMap[rawLang] || rawLang;
|
||||
const languageCode = labelToLanguageCode(rawLang) || rawLang;
|
||||
const isVtt = url.endsWith('.vtt') ? 'vtt' : 'srt';
|
||||
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -79,81 +79,20 @@ const universalScraper = async (ctx: MovieScrapeContext | ShowScrapeContext): Pr
|
|||
|
||||
const streamResJson: InfoResponse = JSON.parse(streamRes);
|
||||
|
||||
const languageMap: Record<string, string> = {
|
||||
'chinese - hong kong': 'zh',
|
||||
'chinese - traditional': 'zh',
|
||||
czech: 'cs',
|
||||
danish: 'da',
|
||||
dutch: 'nl',
|
||||
english: 'en',
|
||||
'english - sdh': 'en',
|
||||
finnish: 'fi',
|
||||
french: 'fr',
|
||||
german: 'de',
|
||||
greek: 'el',
|
||||
hungarian: 'hu',
|
||||
italian: 'it',
|
||||
korean: 'ko',
|
||||
norwegian: 'no',
|
||||
polish: 'pl',
|
||||
portuguese: 'pt',
|
||||
'portuguese - brazilian': 'pt',
|
||||
romanian: 'ro',
|
||||
'spanish - european': 'es',
|
||||
'spanish - latin american': 'es',
|
||||
swedish: 'sv',
|
||||
turkish: 'tr',
|
||||
اَلْعَرَبِيَّةُ: 'ar',
|
||||
বাংলা: 'bn',
|
||||
filipino: 'tl',
|
||||
indonesia: 'id',
|
||||
اردو: 'ur',
|
||||
English: 'en',
|
||||
Arabic: 'ar',
|
||||
Bosnian: 'bs',
|
||||
Bulgarian: 'bg',
|
||||
Croatian: 'hr',
|
||||
Czech: 'cs',
|
||||
Danish: 'da',
|
||||
Dutch: 'nl',
|
||||
Estonian: 'et',
|
||||
Finnish: 'fi',
|
||||
French: 'fr',
|
||||
German: 'de',
|
||||
Greek: 'el',
|
||||
Hebrew: 'he',
|
||||
Hungarian: 'hu',
|
||||
Indonesian: 'id',
|
||||
Italian: 'it',
|
||||
Norwegian: 'no',
|
||||
Persian: 'fa',
|
||||
Polish: 'pl',
|
||||
Portuguese: 'pt',
|
||||
'Protuguese (BR)': 'pt-br',
|
||||
Romanian: 'ro',
|
||||
Russian: 'ru',
|
||||
Serbian: 'sr',
|
||||
Slovenian: 'sl',
|
||||
Spanish: 'es',
|
||||
Swedish: 'sv',
|
||||
Thai: 'th',
|
||||
Turkish: 'tr',
|
||||
};
|
||||
|
||||
const captions: Caption[] = [];
|
||||
if (Array.isArray(streamResJson.subs)) {
|
||||
for (const sub of streamResJson.subs) {
|
||||
// Some subtitles are named <Language>.srt, some are named <LanguageCode>:hi, or just <LanguageCode>
|
||||
let language: string | null = '';
|
||||
if (sub.name.includes('.srt')) {
|
||||
const langName = sub.name.split('.srt')[0].toLowerCase().trim();
|
||||
language = languageMap[langName] || labelToLanguageCode(langName);
|
||||
const langName = sub.name.split('.srt')[0].trim();
|
||||
language = labelToLanguageCode(langName);
|
||||
} else if (sub.name.includes(':')) {
|
||||
const langName = sub.name.split(':')[0].toLowerCase().trim();
|
||||
language = languageMap[langName] || labelToLanguageCode(langName);
|
||||
const langName = sub.name.split(':')[0].trim();
|
||||
language = labelToLanguageCode(langName);
|
||||
} else {
|
||||
const langName = sub.name.toLowerCase().trim();
|
||||
language = languageMap[langName] || labelToLanguageCode(langName);
|
||||
const langName = sub.name.trim();
|
||||
language = labelToLanguageCode(langName);
|
||||
}
|
||||
if (!language) continue;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue