mirror of
https://github.com/Shineii86/AniKotoAPI.git
synced 2026-10-22 10:55:10 +00:00
v1.9.0: Full diagnostic sweep - 42 issues fixed
Critical fixes (7): - Added global Express error handler (returns JSON instead of HTML) - Removed caching from random endpoint (defeated purpose) - Renamed share.jpg to share.png (MIME type mismatch) - Fixed OG image dimensions (630 → 601) - Fixed manifest.json icon sizes (192x192 → 512x512) - Fixed implicit global event variable in console - Added 9 missing endpoints to docs/endpoints.md High fixes (12): - Imported version from package.json (no hardcoded drift) - Added dynamic endpoint count in stats - Added input sanitization for mapper API (SSRF prevention) - Added homepage caching (reduced 5 duplicate HTTP requests) - Added rate limiting (100 requests/minute per IP) - Added rel="noopener noreferrer" to all target="_blank" links - Fixed trailing slash inconsistency in console - Added noindex meta to 404.html - Fixed docs/architecture.md controller filenames and dependency versions - Fixed README.md dependency versions - Added 12 missing endpoint tests Medium fixes (22): - Added escapeHtml helper for error messages - Consistent favicon across all pages - Added meta descriptions to privacy.html and tos.html - Added OG/Twitter meta tags to privacy.html and tos.html - Added aria-label to playground inputs - Added aria-hidden to decorative SVGs - Synced Twitter description with OG description - Fixed robots.txt to disallow /api - Added PWA fields to manifest.json - Removed 5 unused imports - Removed unused cookie-parser dependency - Fixed inconsistent error handling in extractors - Fixed resolvedSlug returning numeric ID - Added /watch endpoint to streaming docs - Improved test assertions and status code validation - Deleted orphaned og-image.svg and logo.png Low fixes (11): - Removed redundant try/catch from extractPages - Added max size eviction to cache - Added cache key sorting in filter controller - Added author meta tag - Fixed favicon.svg font Version bumped to 1.9.0
This commit is contained in:
+12
-12
@@ -37,23 +37,23 @@ AniKotoAPI/
|
||||
│ │ └── category.route.js # genre/:name, type/:name, status/:name
|
||||
│ │
|
||||
│ ├── controllers/
|
||||
│ │ ├── home.controller.js # Homepage data
|
||||
│ │ ├── homeInfo.controller.js # Homepage data
|
||||
│ │ ├── search.controller.js # Anime search
|
||||
│ │ ├── info.controller.js # Anime info
|
||||
│ │ ├── episodes.controller.js # Episode list
|
||||
│ │ ├── animeInfo.controller.js # Anime info
|
||||
│ │ ├── episodeList.controller.js # Episode list
|
||||
│ │ ├── servers.controller.js # Server list
|
||||
│ │ ├── stream.controller.js # Stream URL
|
||||
│ │ ├── suggestion.controller.js # Anime suggestions
|
||||
│ │ ├── spotlight.controller.js # Spotlight anime
|
||||
│ │ ├── trending.controller.js # Trending anime
|
||||
│ │ ├── topTen.controller.js # Top 10
|
||||
│ │ ├── topten.controller.js # Top 10
|
||||
│ │ ├── schedule.controller.js # Schedule
|
||||
│ │ ├── random.controller.js # Random anime
|
||||
│ │ ├── newRelease.controller.js # New releases
|
||||
│ │ ├── mostPopular.controller.js # Most popular
|
||||
│ │ ├── genre.controller.js # Genre filter
|
||||
│ │ ├── type.controller.js # Type filter
|
||||
│ │ ├── status.controller.js # Status filter
|
||||
│ │ ├── popular.controller.js # Most popular
|
||||
│ │ ├── category.controller.js # Genre filter
|
||||
│ │ ├── category.controller.js # Type filter
|
||||
│ │ ├── category.controller.js # Status filter
|
||||
│ │ └── filter.controller.js # Advanced filter
|
||||
│ │
|
||||
│ ├── extractors/
|
||||
@@ -204,9 +204,9 @@ Error responses:
|
||||
|
||||
| Package | Version | Purpose |
|
||||
|---------|---------|---------|
|
||||
| express | ^4.18.2 | Web framework |
|
||||
| express | ^4.21.0 | Web framework |
|
||||
| cheerio | ^1.0.0-rc.12 | HTML parsing |
|
||||
| axios | ^1.6.0 | HTTP requests |
|
||||
| axios | ^1.8.0 | HTTP requests |
|
||||
| cors | ^2.8.5 | CORS headers |
|
||||
| cookie-parser | ^1.4.6 | Cookie parsing |
|
||||
| dotenv | ^16.3.1 | Environment variables |
|
||||
| cookie-parser | ^1.4.7 | Cookie parsing |
|
||||
| dotenv | ^16.4.0 | Environment variables |
|
||||
|
||||
@@ -454,3 +454,147 @@ curl "https://anikototvapi.vercel.app/api/filter?keyword=&genre[]=1"
|
||||
```
|
||||
|
||||
Returns filtered and paginated anime list.
|
||||
|
||||
---
|
||||
|
||||
## GET /watch
|
||||
|
||||
Get full watch page data including servers, trending, and recommended anime.
|
||||
|
||||
| Param | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| `slug` | string | Yes | Anime slug (e.g., `one-piece-100`) |
|
||||
| `ep` | number | Yes | Episode number |
|
||||
|
||||
```bash
|
||||
curl "https://anikototvapi.vercel.app/api/watch?slug=one-piece-100&ep=1"
|
||||
```
|
||||
|
||||
Returns episode data with server list, trending sidebar, and recommended anime.
|
||||
|
||||
---
|
||||
|
||||
## GET /search/suggest
|
||||
|
||||
Get search autocomplete suggestions.
|
||||
|
||||
| Param | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| `keyword` | string | Yes | Search keyword |
|
||||
|
||||
```bash
|
||||
curl "https://anikototvapi.vercel.app/api/search/suggest?keyword=naruto"
|
||||
```
|
||||
|
||||
Returns array of suggestion objects with title, ID, and image.
|
||||
|
||||
---
|
||||
|
||||
## GET /episodes-ajax/:id
|
||||
|
||||
Get AJAX-loaded episode list for an anime.
|
||||
|
||||
| Param | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| `id` | string | Yes | Anime ID or slug |
|
||||
|
||||
```bash
|
||||
curl "https://anikototvapi.vercel.app/api/episodes-ajax/one-piece-100"
|
||||
```
|
||||
|
||||
Returns episode list with filters, ranges, and server IDs.
|
||||
|
||||
---
|
||||
|
||||
## GET /mapper-servers
|
||||
|
||||
Get cross-server mapping for gogoanime/anivibe servers.
|
||||
|
||||
| Param | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| `malId` | number | Yes | MyAnimeList ID |
|
||||
| `slug` | string | Yes | Anime slug |
|
||||
| `timestamp` | number | Yes | Timestamp |
|
||||
|
||||
```bash
|
||||
curl "https://anikototvapi.vercel.app/api/mapper-servers?malId=21&slug=one-piece-100×tamp=1234567890"
|
||||
```
|
||||
|
||||
Returns mapped server URLs for gogoanime/anivibe.
|
||||
|
||||
---
|
||||
|
||||
## GET /newly-added
|
||||
|
||||
Get newly added anime series.
|
||||
|
||||
| Param | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| `page` | number | No | Page number (default: 1) |
|
||||
|
||||
```bash
|
||||
curl "https://anikototvapi.vercel.app/api/newly-added"
|
||||
```
|
||||
|
||||
Returns paginated list of newly added anime.
|
||||
|
||||
---
|
||||
|
||||
## GET /trending-sidebar
|
||||
|
||||
Get trending sidebar widget data.
|
||||
|
||||
```bash
|
||||
curl "https://anikototvapi.vercel.app/api/trending-sidebar"
|
||||
```
|
||||
|
||||
Returns trending anime for sidebar display.
|
||||
|
||||
---
|
||||
|
||||
## GET /seasons/:id
|
||||
|
||||
Get season information for an anime.
|
||||
|
||||
| Param | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| `id` | string | Yes | Anime slug |
|
||||
|
||||
```bash
|
||||
curl "https://anikototvapi.vercel.app/api/seasons/one-piece-100"
|
||||
```
|
||||
|
||||
Returns season data including related seasons.
|
||||
|
||||
---
|
||||
|
||||
## GET /watch-order/:id
|
||||
|
||||
Get recommended watch order for an anime.
|
||||
|
||||
| Param | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| `id` | string | Yes | Anime slug |
|
||||
|
||||
```bash
|
||||
curl "https://anikototvapi.vercel.app/api/watch-order/one-piece-100"
|
||||
```
|
||||
|
||||
Returns recommended watch order sequence.
|
||||
|
||||
---
|
||||
|
||||
## GET /az-list/:letter
|
||||
|
||||
Get anime alphabetically by letter.
|
||||
|
||||
| Param | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| `letter` | string | Yes | Letter (a-z, or # for numbers) |
|
||||
| `page` | number | No | Page number (default: 1) |
|
||||
|
||||
```bash
|
||||
curl "https://anikototvapi.vercel.app/api/az-list/a"
|
||||
```
|
||||
|
||||
Returns paginated list of anime starting with the specified letter.
|
||||
|
||||
@@ -251,3 +251,24 @@ player.source = {
|
||||
| "No servers found" | The `server_ids` may be invalid, try another episode |
|
||||
| Stream URL 403 | Some servers require specific referrer headers |
|
||||
| CORS error | Use a proxy or access from server-side |
|
||||
|
||||
---
|
||||
|
||||
## Alternative: All-in-One /watch Endpoint
|
||||
|
||||
For a simpler approach, use the `/watch` endpoint which returns episode data, servers, and recommendations in a single call.
|
||||
|
||||
**Request:**
|
||||
|
||||
```bash
|
||||
curl "https://anikototvapi.vercel.app/api/watch?slug=road-of-naruto-ggjw8&ep=1"
|
||||
```
|
||||
|
||||
**Response includes:**
|
||||
- Episode data with title, number, and description
|
||||
- Server list (sub and dub)
|
||||
- Trending sidebar anime
|
||||
- Recommended anime
|
||||
- Next episode schedule
|
||||
|
||||
This is useful when you need all watch page data at once instead of making 3 separate requests.
|
||||
|
||||
Reference in New Issue
Block a user