Skip to content

Commit

Permalink
Merge pull request #98 from koikiss-dev/yako-flv-bug
Browse files Browse the repository at this point in the history
fix: bug with the url of animeflv
  • Loading branch information
koikiss-dev authored Sep 22, 2023
2 parents 1e436e7 + ec3f980 commit 2a23447
Show file tree
Hide file tree
Showing 10 changed files with 280 additions and 140 deletions.
2 changes: 2 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import nhentai from "./routes/v1/manga/nhentai/NhentaiRoutes"
import mangareader from "./routes/v1/manga/mangareader/MangaReaderRoutes";
import helmet from "helmet";
import cors from 'cors'
import WcoStream from "./routes/v1/anime/wcostream/wcostreamRoutes";
const app = express();
const port = process.env.PORT || 3000;

Expand All @@ -36,6 +37,7 @@ app.use(gogoanime);
app.use(monoschinos);
app.use(zoro);
app.use(tioanime)
app.use(WcoStream);
/*anime*/

/*Manga*/
Expand Down
11 changes: 2 additions & 9 deletions src/routes/v1/anime/animelatinohd/AnimeLatinoHDRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,11 @@ router.get("/anime/animelatinohd/name/:name", async (req, res) => {

// Episode Info +(Video Servers)
router.get("/anime/animelatinohd/episode/:episode", async (req, res) => {

let { lang } = req.query
let { episode } = req.params
let data = await Anime.GetEpisodeServers(episode)
let data = await Anime.GetEpisodeServers(episode,lang as string)
res.send(data)

});

router.get("/anime/animelatinohd/episode/:episode", async (req, res) => {

let { episode } = req.params
let data = await Anime.GetEpisodeServers(episode)
res.send(data)

});
export default router
22 changes: 22 additions & 0 deletions src/routes/v1/anime/wcostream/wcostreamRoutes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Router } from "express";
import { WcoStream } from "../../../../scraper/sites/anime/wcostream/WcoStream";
const Anime = new WcoStream();
const router = Router();



router.get("/anime/wcostream/name/:name", async (req, res) => {
let { name } = req.params
let data = await Anime.GetAnimeInfo(name)

res.send(data)
})

router.get("/anime/wcostream/episode/:episode", async (req, res) => {
let { episode } = req.params
let {id} =req.query
let data = await Anime.GetEpisodeServers(episode,id)
res.send(data)
})

export default router
6 changes: 3 additions & 3 deletions src/routes/v1/manga/mangareader/MangaReaderRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ router.get("/manga/mangareader/filter", async (req, res) => {
const status = req.query.status as MangaReaderFilterStatus;
const ratingType = req.query.rating as MangaReaderFilterRatingType;
const score = req.query.score as MangaReaderFilterScore;
const language = req.query.language as MangaReaderFilterLanguage;
const language = req.query.language as typeof MangaReaderFilterLanguage[number];
const startYear = req.query.startyear as unknown as number;
const startMonth = req.query.startmonth as unknown as number;
const startDay = req.query.startday as unknown as number;
Expand Down Expand Up @@ -68,7 +68,7 @@ router.get("/manga/mangareader/chapter/:id", async (req, res) => {
try {
const id = req.params.id as unknown as number;
const chapterNumber = req.query.number as unknown as number;
const language = req.query.lang as MangaReaderFilterLanguage;
const language = req.query.lang as typeof MangaReaderFilterLanguage[number];


const data = await mangaReader.GetMangaChapters(
Expand All @@ -89,7 +89,7 @@ router.get("/manga/mangareader/volume/:id", async (req, res) => {
try {
const id = req.params.id as unknown as number;
const chapterNumber = req.query.number as unknown as number;
const language = req.query.lang as MangaReaderFilterLanguage;
const language = req.query.lang as typeof MangaReaderFilterLanguage[number];


const data = await mangaReader.GetMangaChapters(
Expand Down
64 changes: 12 additions & 52 deletions src/scraper/sites/anime/animeflv/AnimeFlv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
} from "../../../../types/search";

export class AnimeFlv {
readonly url = "https://www2.animeflv.bz";
readonly url = "https://animeflv.ws";

async GetAnimeInfo(anime: string): Promise<Anime> {
try {
Expand Down Expand Up @@ -134,59 +134,24 @@ export class AnimeFlv {
episodeReturn.url = `/anime/flv/episode/${episode}`;
episodeReturn.number = numberEpisode as unknown as string;
episodeReturn.servers = [];
/* const serversPromises = getLinks.map(async e => {
const servers = new EpisodeServer();
const title = $(e).attr("title");
const videoData = $(e).attr("data-video");
servers.name = title;
servers.url = videoData;
switch (title) {
case "Our Server":
// Agregamos la función aquí
const m3u = await this.getM3U(videoData);
servers.file_url = m3u;
break;
case "Mega":
servers.file_url = videoData.replace("embed#!", "file/").replace("!", "#");
break;
case "Streamtape":
servers.file_url = videoData.replace("/e/", "/v/");
break;
case "YourUpload":
servers.file_url = videoData.replace("/embed/", "/watch/");
break;
case "Vidlox":
case "Doodstream":
case "Streamsb":
case "Filemoon":
servers.file_url = videoData.replace("/e/", "/d/");
break;
default:
break;
}
return servers
})
episodeReturn.servers = await Promise.all(serversPromises);
return episodeReturn; */

const promises = getLinks.map((_i, e) => {
const servers = new EpisodeServer();
const title = $(e).attr("title");
const videoData = $(e).attr("data-video");
servers.name = title;
servers.url = videoData;
return this.getM3U(`${videoData.replace("streaming.php", "ajax.php")}&refer=none`).then(g => {

return this.getM3U(
`${videoData.replace("streaming.php", "ajax.php")}&refer=none`
).then((g) => {
switch (title) {
case "Our Server":
servers.file_url = g.source[0].file;
break;
case "Mega":
servers.file_url = videoData.replace("embed#!", "file/").replace("!", "#");
servers.file_url = videoData
.replace("embed#!", "file/")
.replace("!", "#");
break;
case "Streamtape":
servers.file_url = videoData.replace("/e/", "/v/");
Expand All @@ -205,9 +170,8 @@ export class AnimeFlv {
}

episodeReturn.servers.push(servers);
})

})
});
});
await Promise.all(promises);
return episodeReturn;
} catch (error) {
Expand All @@ -217,14 +181,10 @@ export class AnimeFlv {
}

private async getM3U(vidurl: string) {

try {
const res = await axios.get(
vidurl
);

return res.data
} catch (error) { }
const res = await axios.get(vidurl);

return res.data;
} catch (error) {}
}
}
56 changes: 47 additions & 9 deletions src/scraper/sites/anime/animelatinohd/AnimeLatinoHD.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,34 +46,71 @@ export class AnimeLatinoHD {
} catch (error) {
}
}
async GetEpisodeServers(episode: string) {
async GetEpisodeServers(episode: string, lang: string): Promise<Episode> {
try {

let number = episode.substring(episode.lastIndexOf("-") + 1)
let anime = episode.substring(0, episode.lastIndexOf("-"))
let langType = [{ lang: "es", type: "Latino" }, { lang: "jp", type: "Subtitulado" }]

const { data } = await axios.get(`${this.url}/ver/${anime}/${number}`);
const $ = cheerio.load(data);

let animeEpisodeParseObj = JSON.parse($("#__NEXT_DATA__").html()).props.pageProps.data


const AnimeEpisodeInfo: Episode = {
name: animeEpisodeParseObj.anime.name,
url: `/anime/animelatinohd/episode/${episode}`,
number: number,
image: "",
servers: []
}
$("#languaje option").each((_i, el) => {
let v = Number($(el).val());
animeEpisodeParseObj.players[v].map((e: { server: { title: any; }; id: string; }) => {
let Server: EpisodeServer = {
name: e.server.title,
url: "https://api.animelatinohd.com/stream/" + e.id,


let sel_lang = langType.filter((e) => e.lang == lang)
let f_index = 0

if (sel_lang.length) {
$("#languaje option").each((_i, e) => {
if ($(e).text() == sel_lang[0].type) {
f_index = Number($(e).val())
}
AnimeEpisodeInfo.servers.push(Server);
})
})
}


await Promise.all(animeEpisodeParseObj.players[f_index].map(async (e: { server: { title: any; }; id: string; }) => {
let min = await axios.get("https://api.animelatinohd.com/stream/" + e.id, { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.62", "Referer": "https://www.animelatinohd.com/" } })
let dat = cheerio.load(min.data)

let Server: EpisodeServer = {
name: e.server.title,
url: "",
}

//state 1
if (e.server.title == "Beta") {
let sel = dat("script:contains('var foo_ui = function (event) {')")
let sort = String(sel.html())
let domain = eval(sort.slice(sort.search("const url"), sort.search("const langDef")).replace("const url =", "").trim())

let sortMORE = sort.slice(sort.search('ajax'), sort.search("method: 'post',"))
let obj_sort = sortMORE.replace("ajax({", "").trim().replace("url:", "").replace(",", "").replace('"', "").replace('"', "").trim()
let id_file = obj_sort.slice(obj_sort.lastIndexOf("/"), obj_sort.length)
Server.url = domain + "/v" + id_file

} else if (e.server.title == "Gamma") {
Server.url = dat('meta[name="og:url"]').attr("content")
} else {
let sel = dat("script[data-cfasync='false']")
let sort = String(sel.html())
let sortMORE = sort.slice(sort.lastIndexOf("master") + 7, sort.lastIndexOf("hls2") - 11)
let id_file = sortMORE.replace("_x", "")
Server.url = "https://filemoon.sx" + "/e/" + id_file
}
AnimeEpisodeInfo.servers.push(Server)
}))

return AnimeEpisodeInfo;
} catch (error) {
Expand Down Expand Up @@ -114,6 +151,7 @@ export class AnimeLatinoHD {
})
return animeSearch;
} catch (error) {
console.log(error)
}
}

Expand Down
Loading

2 comments on commit 2a23447

@vercel
Copy link

@vercel vercel bot commented on 2a23447 Sep 22, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vercel
Copy link

@vercel vercel bot commented on 2a23447 Sep 22, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.