mirror of https://github.com/aruppi/aruppi-api.git
👾 Migrating routes and functions
parent
c0bab5e174
commit
563d0a7c4c
@ -0,0 +1,54 @@
|
||||
import urls from './urls';
|
||||
|
||||
export const obtainPreviewNews = (encoded: string) => {
|
||||
let image: string;
|
||||
|
||||
try {
|
||||
if (encoded.includes('src="https://img1.ak.crunchyroll.com/')) {
|
||||
if (
|
||||
encoded.split('https://img1.ak.crunchyroll.com/')[1].includes('.jpg')
|
||||
) {
|
||||
image = `https://img1.ak.crunchyroll.com/${
|
||||
encoded.split('https://img1.ak.crunchyroll.com/')[1].split('.jpg')[0]
|
||||
}.jpg`;
|
||||
} else {
|
||||
image = `https://img1.ak.crunchyroll.com/${
|
||||
encoded.split('https://img1.ak.crunchyroll.com/')[1].split('.png')[0]
|
||||
}.png`;
|
||||
}
|
||||
} else if (encoded.includes('<img title=')) {
|
||||
image = encoded
|
||||
.substring(encoded.indexOf('<img title="'), encoded.indexOf('" alt'))
|
||||
.split('src="')[1];
|
||||
} else if (encoded.includes('<img src=')) {
|
||||
image = encoded
|
||||
.substring(encoded.indexOf('<img src="'), encoded.indexOf('" alt'))
|
||||
.substring(10)
|
||||
.replace('http', 'https')
|
||||
.replace('httpss', 'https');
|
||||
} else if (encoded.includes('<img')) {
|
||||
image = encoded
|
||||
.split('src=')[1]
|
||||
.split(' class=')[0]
|
||||
.replace('"', '')
|
||||
.replace('"', '');
|
||||
} else if (encoded.includes('https://www.youtube.com/embed/')) {
|
||||
let getSecondThumb = encoded
|
||||
.split('https://www.youtube.com/embed/')[1]
|
||||
.split('?feature')[0];
|
||||
image = `https://img.youtube.com/vi/${getSecondThumb}/0.jpg`;
|
||||
} else if (encoded.includes('https://www.dailymotion.com/')) {
|
||||
let getDailymotionThumb = encoded
|
||||
.substring(encoded.indexOf('" src="'), encoded.indexOf('" a'))
|
||||
.substring(47);
|
||||
image = `https://www.dailymotion.com/thumbnail/video/${getDailymotionThumb}`;
|
||||
} else {
|
||||
let number = Math.floor(Math.random() * 30);
|
||||
image = `${urls.BASE_ARUPPI}news/${number}.png`;
|
||||
}
|
||||
|
||||
return image;
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
};
|
@ -0,0 +1,22 @@
|
||||
import { requestGot } from './requestCall';
|
||||
|
||||
export const transformUrlServer = async (urlReal: any) => {
|
||||
for (const data of urlReal) {
|
||||
if (data.server === 'amus' || data.server === 'natsuki') {
|
||||
let res = await requestGot(data.code.replace('embed', 'check'), {
|
||||
parse: true,
|
||||
scrapy: false,
|
||||
});
|
||||
data.code = res.file || null;
|
||||
data.direct = true;
|
||||
}
|
||||
}
|
||||
|
||||
return urlReal.map((item: any) => {
|
||||
return {
|
||||
id: item.title.toLowerCase(),
|
||||
url: item.code,
|
||||
direct: item.direct || false,
|
||||
};
|
||||
});
|
||||
};
|
@ -0,0 +1,226 @@
|
||||
import urls from './urls';
|
||||
import { requestGot } from './requestCall';
|
||||
import AnimeModel, { Anime } from '../database/models/anime.model';
|
||||
|
||||
/*
|
||||
Utils fuctions - functions to get information
|
||||
from the pages as a parsed JSON or just scrapping
|
||||
the information from the page.
|
||||
*/
|
||||
|
||||
interface Promo {
|
||||
title: string;
|
||||
previewImage: string;
|
||||
videoUrl: string;
|
||||
}
|
||||
|
||||
interface Character {
|
||||
id: number;
|
||||
name: string;
|
||||
image: string;
|
||||
role: string;
|
||||
}
|
||||
|
||||
interface RelatedAnime {
|
||||
title: string;
|
||||
type: string;
|
||||
poster: string;
|
||||
}
|
||||
|
||||
export const animeExtraInfo = async (mal_id: number) => {
|
||||
let data: any;
|
||||
const airDay: any = {
|
||||
mondays: 'Lunes',
|
||||
monday: 'Lunes',
|
||||
tuesdays: 'Martes',
|
||||
tuesday: 'Martes',
|
||||
wednesdays: 'Miércoles',
|
||||
wednesday: 'Miércoles',
|
||||
thursdays: 'Jueves',
|
||||
thursday: 'Jueves',
|
||||
fridays: 'Viernes',
|
||||
friday: 'Viernes',
|
||||
saturdays: 'Sábados',
|
||||
saturday: 'Sábados',
|
||||
sundays: 'Domingos',
|
||||
sunday: 'Domingos',
|
||||
default: 'Sin emisión',
|
||||
};
|
||||
|
||||
try {
|
||||
data = await requestGot(`${urls.BASE_JIKAN}anime/${mal_id}`, {
|
||||
parse: true,
|
||||
scrapy: false,
|
||||
});
|
||||
} catch (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if (
|
||||
airDay.hasOwnProperty(data.broadcast.split('at')[0].trim().toLowerCase())
|
||||
) {
|
||||
data.broadcast = airDay[data.broadcast.split('at')[0].trim().toLowerCase()];
|
||||
} else {
|
||||
data.broadcast = null;
|
||||
}
|
||||
|
||||
const formattedObject: any = {
|
||||
titleJapanese: data.title_japanese,
|
||||
source: data.source,
|
||||
totalEpisodes: data.episodes,
|
||||
aired: {
|
||||
from: data.aired.from,
|
||||
to: data.aired.to,
|
||||
},
|
||||
duration: data.duration.split('per')[0],
|
||||
rank: data.rank,
|
||||
broadcast: data.broadcast,
|
||||
producers: data.producers.map((item: any) => item.name) || null,
|
||||
licensors: data.licensors.map((item: any) => item.name) || null,
|
||||
studios: data.studios.map((item: any) => item.name) || null,
|
||||
openingThemes: data.opening_themes || null,
|
||||
endingThemes: data.ending_themes || null,
|
||||
};
|
||||
|
||||
return formattedObject;
|
||||
};
|
||||
|
||||
export const getAnimeVideoPromo = async (mal_id: number) => {
|
||||
let data: any;
|
||||
|
||||
try {
|
||||
data = await requestGot(`${urls.BASE_JIKAN}anime/${mal_id}/videos`, {
|
||||
parse: true,
|
||||
scrapy: false,
|
||||
});
|
||||
} catch (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
const promo: Promo[] = data.promo.map((item: Promo) => item);
|
||||
|
||||
return promo;
|
||||
};
|
||||
|
||||
export const getAnimeCharacters = async (mal_id: number) => {
|
||||
let data: any;
|
||||
|
||||
try {
|
||||
data = await requestGot(
|
||||
`${urls.BASE_JIKAN}anime/${mal_id}/characters_staff`,
|
||||
{ parse: true, scrapy: false },
|
||||
);
|
||||
} catch (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
const characters: Character[] = data.characters.map((item: any) => {
|
||||
return {
|
||||
id: item.mal_id,
|
||||
name: item.name,
|
||||
image: item.image_url,
|
||||
role: item.role,
|
||||
};
|
||||
});
|
||||
|
||||
return characters;
|
||||
};
|
||||
|
||||
const getPosterAndType = async (
|
||||
id: string | undefined,
|
||||
mal_id: number | undefined,
|
||||
) => {
|
||||
if (id) {
|
||||
const queryRes: Anime | null = await AnimeModel.findOne({
|
||||
id: { $eq: id },
|
||||
});
|
||||
|
||||
return [queryRes?.poster, queryRes?.type];
|
||||
}
|
||||
|
||||
if (mal_id) {
|
||||
const queryRes: Anime | null = await AnimeModel.findOne({
|
||||
mal_id: { $eq: mal_id },
|
||||
});
|
||||
|
||||
return [queryRes?.poster, queryRes?.type];
|
||||
}
|
||||
|
||||
return '';
|
||||
};
|
||||
|
||||
export const getRelatedAnimesFLV = async (id: string) => {
|
||||
const $ = await requestGot(`${urls.BASE_ANIMEFLV}/anime/${id}`, {
|
||||
parse: false,
|
||||
scrapy: true,
|
||||
});
|
||||
let listRelated: any = {};
|
||||
let relatedAnimes: RelatedAnime[] = [];
|
||||
|
||||
if ($('ul.ListAnmRel').length) {
|
||||
$('ul.ListAnmRel li a').each((index: number, element: any) => {
|
||||
listRelated[$(element).text()] = $(element).attr('href');
|
||||
});
|
||||
|
||||
for (const related in listRelated) {
|
||||
let posterUrl: any = await getPosterAndType(
|
||||
listRelated[related].split('/')[2],
|
||||
undefined,
|
||||
);
|
||||
|
||||
if (posterUrl !== '') {
|
||||
relatedAnimes.push({
|
||||
title: related,
|
||||
type: posterUrl[1],
|
||||
poster: posterUrl[0],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return relatedAnimes;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
export const getRelatedAnimesMAL = async (mal_id: number) => {
|
||||
const $ = await requestGot(`https://myanimelist.net/anime/${mal_id}`, {
|
||||
parse: false,
|
||||
scrapy: true,
|
||||
});
|
||||
|
||||
let listRelated: any = {};
|
||||
let relatedAnimes: RelatedAnime[] = [];
|
||||
|
||||
if ($('table.anime_detail_related_anime').length > 0) {
|
||||
$('table.anime_detail_related_anime')
|
||||
.find('tbody tr')
|
||||
.each((index: number, element: any) => {
|
||||
if ($(element).find('td').eq(0) !== 'Adaptation:') {
|
||||
listRelated[$(element).find('td').eq(1).text()] = $(element)
|
||||
.find('td')
|
||||
.children('a')
|
||||
.attr('href');
|
||||
}
|
||||
});
|
||||
|
||||
for (const related in listRelated) {
|
||||
let posterUrl: any = await getPosterAndType(
|
||||
undefined,
|
||||
listRelated[related].split('/')[2],
|
||||
);
|
||||
|
||||
if (posterUrl !== '') {
|
||||
relatedAnimes.push({
|
||||
title: related,
|
||||
type: posterUrl[1],
|
||||
poster: posterUrl[0],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return relatedAnimes;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue