Nt-anime-api / index.js
Neon-AI's picture
Rename index.html to index.js
1559077 verified
// index.js
const express = require("express");
const puppeteer = require("puppeteer");
const app = express();
app.use(express.json());
// Example: /api/episode?anime=naruto&episode=1&dub=sub
app.get("/api/episode", async (req, res) => {
const { anime, episode, dub } = req.query;
if (!anime || !episode) {
return res.status(400).json({ error: "anime and episode required" });
}
let browser;
try {
browser = await puppeteer.launch({
headless: true,
args: ["--no-sandbox", "--disable-setuid-sandbox"]
});
const page = await browser.newPage();
// Navigate to HiAnime episode page
// Adjust the URL pattern to match the HiAnime site
const url = `https://hianime.tv/${anime}-episode-${episode}`;
await page.goto(url, { waitUntil: "networkidle2" });
// Example: grab the first video source URL
const streamUrl = await page.evaluate(() => {
const video = document.querySelector("video source");
return video ? video.src : null;
});
if (!streamUrl) {
return res.status(404).json({ error: "Stream URL not found" });
}
return res.json({
anime,
episode,
dub: dub || "sub",
streamUrl
});
} catch (err) {
console.error(err);
return res.status(500).json({ error: "Failed to scrape episode" });
} finally {
if (browser) await browser.close();
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`HF Space scraper running on port ${PORT}`));