mirror of
https://github.com/Shineii86/AniKotoAPI.git
synced 2026-10-22 19:05:11 +00:00
430 lines
9.4 KiB
Markdown
430 lines
9.4 KiB
Markdown
# Code Examples
|
|
|
|
All examples are tested and working with the live API.
|
|
|
|
---
|
|
|
|
## cURL
|
|
|
|
### Homepage
|
|
|
|
```bash
|
|
curl "https://anikototvapi.vercel.app/api"
|
|
```
|
|
|
|
### Search
|
|
|
|
```bash
|
|
curl "https://anikototvapi.vercel.app/api/search?keyword=naruto"
|
|
```
|
|
|
|
### Anime Info
|
|
|
|
```bash
|
|
curl "https://anikototvapi.vercel.app/api/info?id=naruto-eybxz"
|
|
```
|
|
|
|
### Episodes
|
|
|
|
```bash
|
|
curl "https://anikototvapi.vercel.app/api/episodes/958"
|
|
```
|
|
|
|
### Servers
|
|
|
|
```bash
|
|
SERVER_IDS=$(curl -s "https://anikototvapi.vercel.app/api/episodes/958" | python3 -c "import sys,json; print(json.load(sys.stdin)['results']['episodes'][0]['server_ids'])")
|
|
curl "https://anikototvapi.vercel.app/api/servers?ids=$SERVER_IDS"
|
|
```
|
|
|
|
### Stream URL
|
|
|
|
```bash
|
|
LINK_ID=$(curl -s "https://anikototvapi.vercel.app/api/episodes/958" | python3 -c "import sys,json; print(json.load(sys.stdin)['results']['episodes'][0]['server_ids'])" | xargs -I{} curl -s "https://anikototvapi.vercel.app/api/servers?ids={}" | python3 -c "import sys,json; print(json.load(sys.stdin)['results'][0]['link_id'])")
|
|
curl "https://anikototvapi.vercel.app/api/stream?id=$LINK_ID"
|
|
```
|
|
|
|
### Random Anime
|
|
|
|
```bash
|
|
curl "https://anikototvapi.vercel.app/api/random"
|
|
```
|
|
|
|
### Schedule
|
|
|
|
```bash
|
|
curl "https://anikototvapi.vercel.app/api/schedule"
|
|
```
|
|
|
|
### Suggestions
|
|
|
|
```bash
|
|
curl "https://anikototvapi.vercel.app/api/suggestions?keyword=one+piece"
|
|
```
|
|
|
|
### Top 10
|
|
|
|
```bash
|
|
curl "https://anikototvapi.vercel.app/api/top-ten"
|
|
```
|
|
|
|
### Filter by Genre
|
|
|
|
```bash
|
|
curl "https://anikototvapi.vercel.app/api/genre/action"
|
|
```
|
|
|
|
### Filter with Parameters
|
|
|
|
```bash
|
|
curl "https://anikototvapi.vercel.app/api/filter?keyword=&genre[]=1&type=tv&status=aired"
|
|
```
|
|
|
|
---
|
|
|
|
## JavaScript (Browser)
|
|
|
|
### Homepage
|
|
|
|
```javascript
|
|
async function getHomepage() {
|
|
const res = await fetch('https://anikototvapi.vercel.app/api');
|
|
const data = await res.json();
|
|
|
|
console.log('Spotlights:', data.results.spotlights.length);
|
|
console.log('Trending:', data.results.trending.length);
|
|
console.log('Top Airing:', data.results.topAiring.length);
|
|
console.log('Genres:', data.results.genres.length);
|
|
|
|
return data.results;
|
|
}
|
|
|
|
getHomepage();
|
|
```
|
|
|
|
### Search
|
|
|
|
```javascript
|
|
async function searchAnime(keyword) {
|
|
const res = await fetch(`https://anikototvapi.vercel.app/api/search?keyword=${encodeURIComponent(keyword)}`);
|
|
const data = await res.json();
|
|
|
|
return data.results.data.map(anime => ({
|
|
title: anime.title,
|
|
slug: anime.slug,
|
|
sub: anime.sub,
|
|
dub: anime.dub,
|
|
type: anime.type
|
|
}));
|
|
}
|
|
|
|
searchAnime('naruto').then(results => {
|
|
results.forEach(a => console.log(`${a.title} (${a.type}) — Sub: ${a.sub}, Dub: ${a.dub}`));
|
|
});
|
|
```
|
|
|
|
### Anime Info
|
|
|
|
```javascript
|
|
async function getAnimeInfo(slug) {
|
|
const res = await fetch(`https://anikototvapi.vercel.app/api/info?id=${slug}`);
|
|
const data = await res.json();
|
|
|
|
const info = data.results;
|
|
console.log(`Title: ${info.title}`);
|
|
console.log(`Type: ${info.type}`);
|
|
console.log(`Status: ${info.status}`);
|
|
console.log(`Episodes: ${info.totalEpisodes || 'Unknown'}`);
|
|
console.log(`MAL ID: ${info.malId}`);
|
|
|
|
return info;
|
|
}
|
|
|
|
getAnimeInfo('naruto-eybxz');
|
|
```
|
|
|
|
### Full Streaming Flow
|
|
|
|
```javascript
|
|
async function getStreamUrl(animeId) {
|
|
// Step 1: Get episodes
|
|
const episodesRes = await fetch(`https://anikototvapi.vercel.app/api/episodes/${animeId}`);
|
|
const episodesData = await episodesRes.json();
|
|
const episodes = episodesData.results.episodes;
|
|
|
|
if (!episodes || episodes.length === 0) {
|
|
throw new Error('No episodes found');
|
|
}
|
|
|
|
// Use first episode's server_ids
|
|
const serverIds = episodes[0].server_ids;
|
|
|
|
// Step 2: Get servers
|
|
const serversRes = await fetch(`https://anikototvapi.vercel.app/api/servers?ids=${serverIds}`);
|
|
const serversData = await serversRes.json();
|
|
const servers = serversData.results;
|
|
|
|
if (!servers || servers.length === 0) {
|
|
throw new Error('No servers found');
|
|
}
|
|
|
|
// Pick first server
|
|
const linkId = servers[0].link_id;
|
|
|
|
// Step 3: Get stream URL
|
|
const streamRes = await fetch(`https://anikototvapi.vercel.app/api/stream?id=${linkId}`);
|
|
const streamData = await streamRes.json();
|
|
|
|
return streamData.results.url;
|
|
}
|
|
|
|
// Usage
|
|
getStreamUrl(958)
|
|
.then(url => {
|
|
console.log('Stream URL:', url);
|
|
// Use with video player
|
|
})
|
|
.catch(err => console.error('Error:', err.message));
|
|
```
|
|
|
|
### Random Anime
|
|
|
|
```javascript
|
|
async function getRandomAnime() {
|
|
const res = await fetch('https://anikototvapi.vercel.app/api/random');
|
|
const data = await res.json();
|
|
|
|
const anime = data.results;
|
|
console.log(`Random: ${anime.title} (${anime.type})`);
|
|
console.log('Genres:', anime.genres.join(', '));
|
|
|
|
return anime;
|
|
}
|
|
|
|
getRandomAnime();
|
|
```
|
|
|
|
### Filter by Genre
|
|
|
|
```javascript
|
|
async function getAnimeByGenre(genre, page = 1) {
|
|
const res = await fetch(`https://anikototvapi.vercel.app/api/genre/${genre}?page=${page}`);
|
|
const data = await res.json();
|
|
|
|
return data.results.data.map(anime => ({
|
|
title: anime.title,
|
|
sub: anime.sub,
|
|
dub: anime.dub
|
|
}));
|
|
}
|
|
|
|
getAnimeByGenre('action').then(anime => {
|
|
console.log('Action Anime:');
|
|
anime.forEach(a => console.log(`- ${a.title} (Sub: ${a.sub}, Dub: ${a.dub})`));
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
## Node.js (with axios)
|
|
|
|
### Homepage
|
|
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
async function getHomepage() {
|
|
const { data } = await axios.get('https://anikototvapi.vercel.app/api');
|
|
|
|
console.log('Spotlights:', data.results.spotlights.length);
|
|
console.log('Trending:', data.results.trending.length);
|
|
|
|
return data.results;
|
|
}
|
|
|
|
getHomepage();
|
|
```
|
|
|
|
### Search
|
|
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
async function searchAnime(keyword) {
|
|
const { data } = await axios.get('https://anikototvapi.vercel.app/api/search', {
|
|
params: { keyword }
|
|
});
|
|
|
|
return data.results.data;
|
|
}
|
|
|
|
searchAnime('naruto').then(results => {
|
|
results.forEach(a => console.log(`${a.title} (${a.type})`));
|
|
});
|
|
```
|
|
|
|
### Full Streaming Flow
|
|
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
async function getStreamUrl(animeId) {
|
|
const BASE = 'https://anikototvapi.vercel.app/api';
|
|
|
|
// Step 1: Get episodes
|
|
const { data: episodesData } = await axios.get(`${BASE}/episodes/${animeId}`);
|
|
const episodes = episodesData.results.episodes;
|
|
|
|
if (!episodes || episodes.length === 0) {
|
|
throw new Error('No episodes found');
|
|
}
|
|
|
|
const serverIds = episodes[0].server_ids;
|
|
|
|
// Step 2: Get servers
|
|
const { data: serversData } = await axios.get(`${BASE}/servers`, {
|
|
params: { ids: serverIds }
|
|
});
|
|
const servers = serversData.results;
|
|
|
|
if (!servers || servers.length === 0) {
|
|
throw new Error('No servers found');
|
|
}
|
|
|
|
const linkId = servers[0].link_id;
|
|
|
|
// Step 3: Get stream URL
|
|
const { data: streamData } = await axios.get(`${BASE}/stream`, {
|
|
params: { id: linkId }
|
|
});
|
|
|
|
return streamData.results.url;
|
|
}
|
|
|
|
// Usage
|
|
getStreamUrl(958)
|
|
.then(url => console.log('Stream URL:', url))
|
|
.catch(err => console.error('Error:', err.message));
|
|
```
|
|
|
|
### Episode List
|
|
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
async function getEpisodeList(animeId) {
|
|
const { data } = await axios.get(`https://anikototvapi.vercel.app/api/episodes/${animeId}`);
|
|
|
|
const { animeId: id, totalEpisodes, episodes } = data.results;
|
|
|
|
console.log(`Anime ID: ${id}`);
|
|
console.log(`Total Episodes: ${totalEpisodes}`);
|
|
console.log(`Episodes available: ${episodes.length}`);
|
|
|
|
episodes.forEach(ep => {
|
|
console.log(` Episode ${ep.episode_no}: server_ids available = ${!!ep.server_ids}`);
|
|
});
|
|
|
|
return data.results;
|
|
}
|
|
|
|
getEpisodeList(958);
|
|
```
|
|
|
|
### Suggestions
|
|
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
async function getSuggestions(keyword) {
|
|
const { data } = await axios.get('https://anikototvapi.vercel.app/api/suggestions', {
|
|
params: { keyword }
|
|
});
|
|
|
|
return data.results;
|
|
}
|
|
|
|
getSuggestions('one piece').then(suggestions => {
|
|
suggestions.forEach(a => console.log(`${a.title} (${a.slug})`));
|
|
});
|
|
```
|
|
|
|
### Schedule
|
|
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
async function getSchedule() {
|
|
const { data } = await axios.get('https://anikototvapi.vercel.app/api/schedule');
|
|
|
|
console.log('Scheduled anime:', data.results.length);
|
|
return data.results;
|
|
}
|
|
|
|
getSchedule();
|
|
```
|
|
|
|
### Latest Updated
|
|
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
async function getLatestUpdated(page = 1) {
|
|
const { data } = await axios.get('https://anikototvapi.vercel.app/api/latest-updated', {
|
|
params: { page }
|
|
});
|
|
|
|
console.log('Recently updated anime:', data.results.length);
|
|
return data.results;
|
|
}
|
|
|
|
getLatestUpdated();
|
|
```
|
|
|
|
### Seasons
|
|
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
async function getSeasons(animeId) {
|
|
const { data } = await axios.get(`https://anikototvapi.vercel.app/api/seasons/${animeId}`);
|
|
|
|
console.log('Seasons:', data.results.length);
|
|
return data.results;
|
|
}
|
|
|
|
getSeasons(1642);
|
|
```
|
|
|
|
### Watch Order
|
|
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
async function getWatchOrder(animeId) {
|
|
const { data } = await axios.get(`https://anikototvapi.vercel.app/api/watch-order/${animeId}`);
|
|
|
|
console.log('Watch order entries:', data.results.length);
|
|
return data.results;
|
|
}
|
|
|
|
getWatchOrder(1642);
|
|
```
|
|
|
|
### Download Links
|
|
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
async function getDownloadLinks(slug, episode) {
|
|
const { data } = await axios.get('https://anikototvapi.vercel.app/api/download', {
|
|
params: { slug, ep: episode }
|
|
});
|
|
|
|
console.log('Download links:', data.results);
|
|
return data.results;
|
|
}
|
|
|
|
getDownloadLinks('one-piece-odmau', 1165);
|
|
```
|