feat: v2.5.1 — domain sync, spotlight fix, embed providers, info IDs, latest-episode checker, full docs pass

- Sync mirror domains with official hub (anikoto.site): replace dead
  anikoto.se with official anikototv.se (dataUrl.js, render.yaml, README)
- Fix redesigned #hotest spotlight carousel selectors in homeInfo and
  spotlight extractors (dual-selector fallback for old layout)
- New GET /api/stream/embeds: iframe-ready Megavid/AniXo/MegaPlay URLs
  that bypass Cloudflare; ?slug= auto-resolves MAL/AniList IDs (cached),
  or pass ?mal=/?anilist= directly with zero scraping
- GET /api/info now returns externalIds { animeId, malId, anilistId }
  for direct feed into /api/stream/embeds (best-effort, 60min cache)
- New GET /api/episodes/latest?slug=: newest-episode checker for bot
  polling — latest episode + counts only (10min cache), registered
  before /episodes/:id so the literal path wins
- Top rankings ?sort=day|week|month verified already supported (docs)
- Full repo-style documentation on all new modules (box headers, FEATURE
  markers, NOTE/TIP inline notes, JSDoc, footers)
- Diagnostic sweep: all counts synced to 40 endpoints / 30 handlers /
  29 scrapers, stale badges and sample responses fixed, render.yaml EOF,
  Dockerfile node:18-alpine (EOL) -> node:22-alpine
- Tests: 38 passed / 0 failed / 2 optional skips; 77 JS files syntax-OK
This commit is contained in:
Shinei Nouzen
2026-10-13 07:23:04 +05:30
parent 1d71a1e557
commit 0f2258a8d5
23 changed files with 870 additions and 78 deletions
+11 -11
View File
@@ -4,28 +4,28 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="google-site-verification" content="YOUR_VERIFICATION_CODE" />
<title>AniKotoAPI — Free Anime REST API | 38 Endpoints</title>
<meta property="og:title" content="AniKotoAPI — Free Anime REST API | 38 Endpoints" />
<title>AniKotoAPI — Free Anime REST API | 40 Endpoints</title>
<meta property="og:title" content="AniKotoAPI — Free Anime REST API | 40 Endpoints" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://anikototvapi.vercel.app" />
<meta property="og:image" content="https://anikototvapi.vercel.app/share.png" />
<meta property="og:description" content="Free anime REST API with 38 endpoints. Search, filter, stream episodes, get rankings, and more. No API key required. Built with Node.js, Express, and Cheerio." />
<meta property="og:description" content="Free anime REST API with 40 endpoints. Search, filter, stream episodes, get rankings, and more. No API key required. Built with Node.js, Express, and Cheerio." />
<meta property="og:site_name" content="AniKotoAPI" />
<meta property="og:locale" content="en_US" />
<meta property="og:image:secure_url" content="https://anikototvapi.vercel.app/share.png" />
<meta property="og:image:type" content="image/jpeg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="601" />
<meta property="og:image:alt" content="AniKotoAPI - Free Anime REST API with 38 endpoints" />
<meta property="og:image:alt" content="AniKotoAPI - Free Anime REST API with 40 endpoints" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@Shineii86" />
<meta name="twitter:creator" content="@Shineii86" />
<meta name="twitter:title" content="AniKotoAPI — Free Anime REST API | 38 Endpoints" />
<meta name="twitter:description" content="Free anime REST API with 38 endpoints. Search, filter, stream episodes, get rankings, and more. No API key required." />
<meta name="twitter:title" content="AniKotoAPI — Free Anime REST API | 40 Endpoints" />
<meta name="twitter:description" content="Free anime REST API with 40 endpoints. Search, filter, stream episodes, get rankings, and more. No API key required." />
<meta name="twitter:image" content="https://anikototvapi.vercel.app/share.png" />
<meta name="twitter:image:alt" content="AniKotoAPI - Free Anime REST API with 38 endpoints" />
<meta name="twitter:image:alt" content="AniKotoAPI - Free Anime REST API with 40 endpoints" />
<meta name="twitter:domain" content="anikototvapi.vercel.app" />
<meta name="description" content="Free anime REST API with 38 endpoints. Search, filter, stream episodes with M3U8 proxy, get top rankings, schedules, and more. No API key required. Open source Node.js + Express." />
<meta name="description" content="Free anime REST API with 40 endpoints. Search, filter, stream episodes with M3U8 proxy, get top rankings, schedules, and more. No API key required. Open source Node.js + Express." />
<meta name="author" content="Shinei Nouzen" />
<meta name="keywords" content="anime api, free anime api, rest api, anime data, anime streaming api, hls proxy, m3u8 proxy, anime episodes, anime search, anime database, nodejs api, express api, web scraping api, anikoto, anime list api, no api key" />
<meta name="robots" content="index, follow" />
@@ -234,7 +234,7 @@
"@context": "https://schema.org",
"@type": "WebAPI",
"name": "AniKotoAPI",
"description": "Free anime REST API with 38 endpoints. Search, filter, stream episodes with M3U8 proxy, get rankings, schedules, and more. No API key required.",
"description": "Free anime REST API with 40 endpoints. Search, filter, stream episodes with M3U8 proxy, get rankings, schedules, and more. No API key required.",
"url": "https://anikototvapi.vercel.app",
"image": "https://anikototvapi.vercel.app/share.png",
"documentation": "https://github.com/Shineii86/AniKotoAPI",
@@ -271,7 +271,7 @@
<div>
<div class="hero-badge"><span class="dot"></span> Free &middot; No API key &middot; Open source</div>
<h1>The anime data API for your next project</h1>
<p class="hero-sub">Browse, search, and stream anime data from AniKoto. Real-time scraping with 38 endpoints, in-memory caching, and zero configuration.</p>
<p class="hero-sub">Browse, search, and stream anime data from AniKoto. Real-time scraping with 40 endpoints, in-memory caching, and zero configuration.</p>
<div class="hero-actions">
<a href="#playground" class="btn btn-primary">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="5 3 19 12 5 21 5 3"/></svg>
@@ -311,7 +311,7 @@ fetch("https://anikototvapi.vercel.app/api")
<section class="stats">
<div class="container">
<div class="stats-grid">
<div class="reveal"><div class="stat-value" data-count="38">0</div><div class="stat-label">API Endpoints</div></div>
<div class="reveal"><div class="stat-value" data-count="40">0</div><div class="stat-label">API Endpoints</div></div>
<div class="reveal reveal-delay-1"><div class="stat-value" data-count="0">0</div><div class="stat-label">API Keys Required</div></div>
<div class="reveal reveal-delay-2"><div class="stat-value" data-count="40">0</div><div class="stat-label">Anime Genres</div></div>
<div class="reveal reveal-delay-3"><div class="stat-value">Live</div><div class="stat-label">Real-time Data</div></div>