Une API de séries TV avec statut, saisons et prochain épisode
GET /3/tv/{series_id} renvoie une série avec son status, ses networks, sa liste seasons, last_episode_to_air et next_episode_to_air. Les points de terminaison de saisons et d'épisodes ajoutent des dates de diffusion, des durées et des images. amodb est une API indépendante qui parle le protocole TMDB v3 : un client écrit pour TMDB fonctionne après le changement de l'URL de base en https:/.
Ce que vous obtenez :
- Des fiches de séries avec le nombre de saisons et d'épisodes, ainsi que les dates de première et de dernière diffusion.
- Une chaîne
statuset un indicateurin_production. - Des chaînes avec identifiants, logos et pays d'origine.
- Un appel par saison, qui renvoie tous les épisodes de cette saison.
- Des listes de séries diffusées aujourd'hui ou dans les 7 prochains jours.
Les données obtenues
| Besoin | Appel | Champs clés |
|---|---|---|
| Fiche de série | GET /3/tv/{series_id} | name, original_name, status, in_production, number_of_seasons, number_of_episodes |
| Prochain et dernier épisode | même appel | next_episode_to_air, last_episode_to_air |
| Une saison | GET / | episodes, air_date, poster_path |
| Un épisode | GET / | name, overview, runtime, still_path, air_date |
| Une chaîne | GET / | name, headquarters, origin_country |
Les listes de champs complètes sont sur séries TV et saisons et épisodes.
Démarrer en 3 étapes
- Ouvrez les tarifs et choisissez l'offre dont le débit vous convient : 20, 40 ou 120 par minute.
- Créez une clé d'API dans le tableau de bord de votre compte.
- Envoyez
GET /3/tv/{series_id}avecAuthorization: Bearer YOUR_, ou ajoutezAPI_ KEY api_keycomme paramètre de requête.
Exemple de requête
Le script lit Breaking Bad (id de série 1396), affiche son statut et son prochain épisode, puis liste la saison 1. Enregistrez-le sous check.mjs et lancez-le avec Node 18 ou plus récent.
curl -s "https://api.amodb.dev/3/tv/1396?language=en-US&append_to_response=ratings" \
-H "Authorization: Bearer $AMODB_KEY"
curl -s "https://api.amodb.dev/3/tv/1396/season/1?language=en-US" \
-H "Authorization: Bearer $AMODB_KEY"const base = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };
async function get(path) {
const res = await fetch(`${base}${path}`, { headers });
if (!res.ok) throw new Error(`amodb returned ${res.status} for ${path}`);
return res.json();
}
const show = await get('/tv/1396?language=en-US');
const next = show.next_episode_to_air;
console.log(`${show.name}: ${show.status}, ${show.number_of_seasons} seasons`);
console.log(next
? `Next: S${next.season_number}E${next.episode_number} on ${next.air_date}`
: 'No upcoming episode is scheduled');
const season = await get('/tv/1396/season/1?language=en-US');
for (const ep of season.episodes) {
console.log(`E${ep.episode_number} ${ep.air_date} ${ep.name}`);
}Une réponse de série abrégée pour language=en-US. Seuls certains champs sont conservés, et seasons montre ses 2 premières entrées sur 6. Certains noms ne suivent pas language dans ces données : le nom de la saison 0 est en chinois et le name dans last_episode_to_air est en hébreu.
{
"first_air_date": "2008-01-20",
"id": 1396,
"in_production": false,
"last_air_date": "2013-09-29",
"last_episode_to_air": {
"air_date": "2013-09-29",
"episode_number": 16,
"episode_type": "standard",
"id": 62161,
"name": "פלינה",
"overview": "הסדרה זוכת הפרסים מגיעה לסיום דרמתי בפרק החותם אותה.",
"production_code": "",
"runtime": 56,
"season_number": 5,
"show_id": 1396,
"still_path": "/pA0YwyhvdDXP3BEGL2grrIhq8aM.jpg",
"vote_average": 0,
"vote_count": 0
},
"name": "Breaking Bad",
"next_episode_to_air": null,
"number_of_episodes": 62,
"number_of_seasons": 5,
"original_name": "Breaking Bad",
"seasons": [
{
"air_date": "2009-02-17",
"episode_count": 9,
"id": 3577,
"name": "特别篇",
"overview": "",
"poster_path": "/ikBSCmgG5Z4jequUUAjKpf1QG3T.jpg",
"season_number": 0,
"vote_average": 0
},
{
"air_date": "2008-01-20",
"episode_count": 7,
"id": 3572,
"name": "Season 1",
"overview": "High school chemistry teacher Walter White's life is suddenly transformed by a dire medical diagn...",
"poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
"season_number": 1,
"vote_average": 0
}
],
"status": "Ended"
}Lire le statut et le prochain épisode
La chaîne status indique comment étiqueter une série. next_episode_to_air n'est un objet que pendant qu'un épisode est programmé : il vaut donc null entre deux saisons comme après la fin. Testez status avant d'afficher « terminée ».
status | Signification | Que montrer |
|---|---|---|
| Returning Series | D'autres épisodes sont attendus | La prochaine date de diffusion si l'objet existe, sinon « de retour » |
| In Production | En cours de fabrication, pas encore diffusée | « En production » |
| Planned | Annoncée seulement | « Prévue » |
| Pilot | Seul un pilote existe | « Pilote » |
| Ended | La série est terminée | « Terminée » et last_air_date |
| Canceled | Arrêtée avant la fin prévue | « Annulée » |
Champs dans next_episode_to_air et last_episode_to_air : air_date, season_number, episode_number, episode_type, id, show_id, name, overview, runtime et still_path. La chaîne status peut aussi être vide sur quelques titres : gardez donc un libellé neutre prêt.
Les détails sont mis en cache 6 heures en périphérie : demander la même série plus de quatre fois par jour renvoie donc le même corps. Interrogez vos séries suivies une ou deux fois par jour et actualisez celle qu'un utilisateur ouvre.
Saisons, épisodes et ce qui est diffusé
La saison 0, quand une série en a une, contient les épisodes spéciaux. Les saisons normales commencent à 1.
| Appel | Renvoie | Paramètres |
|---|---|---|
GET / | Fiche de saison avec un tableau episodes | language, append_to_response |
GET /3/tv/airing_today | Les séries dont un épisode est diffusé aujourd'hui | page, language |
GET /3/tv/on_the_air | Les séries diffusées la semaine à venir | page, language |
GET /3/discover/tv | Les séries filtrées par chaîne, statut et plus | with_networks, with_status, sort_by, page |
Les listes et les résultats de discover sont mis en cache 30 minutes : une requête toutes les demi-heures suffit donc pour un badge « bientôt diffusé ». Comparez les identifiants renvoyés avec les séries que vos utilisateurs suivent. Les détails des saisons et des épisodes sont traités sur la page du guide des épisodes.
Construire une liste de suivi avec des comptes à rebours
Un écran « les séries que je suis » demande un identifiant stocké par série et une petite tâche quotidienne.
- Enregistrez l'
idde la série quand un utilisateur la suit. - Une fois par jour, appelez
/3/tv/{series_id}pour chaque identifiant suivi et stockezstatus,next_episode_to_airetlast_air_date. - Quand
next_episode_to_airest un objet, affichezair_datecomme une date. Il ne porte ni heure ni fuseau horaire : ne comptez donc pas à rebours à la minute près. - Quand il est null et que
statusvaut Returning Series, affichez « nouvelle saison non programmée ». - Appelez la saison seulement quand un utilisateur ouvre la série, car c'est la plus grosse réponse.
Une réponse 404 avec status_code 34 signifie que l'identifiant est inconnu, et une réponse 429 signifie que vous avez dépassé vos requêtes par minute : attendez les secondes de Retry-After. Avec 200 séries suivies, un passage quotidien représente 200 requêtes, soit environ dix minutes à 20 requêtes par minute. Voir limites de débit et erreurs.
Comparaison
| Capacité | Extraire les pages soi-même | API de métadonnées avec offre gratuite | amodb |
|---|---|---|---|
| Structure des saisons et des épisodes | Reconstituée à partir de la mise en page | Variable, voir la documentation | Appel de saison avec un tableau episodes |
| Prochaine date de diffusion | Extraite d'une page de programme | Variable, voir la documentation | next_episode_to_air, null quand rien n'est programmé |
| Statut de la série | Texte libre sur une page | Variable, voir la documentation | Chaîne status et indicateur in_production |
| Diffusion cette semaine | Extraire un programme | Variable, voir la documentation | /3/tv/on_the_air et /3/tv/airing_today |
| Langues | Ce que propose la page | Variable | 14, choisies avec language |
| Conditions d'accès | Les conditions du site s'appliquent | Offre gratuite avec conditions d'usage | Payant, prépayé, sans offre gratuite |
Tarifs
Payez une fois pour 1, 3, 6, 12 ou 24 mois. Les périodes plus longues bénéficient de 10, 20, 30 ou 40 pour cent de réduction, et rien ne se renouvelle automatiquement. Chaque offre donne accès à toutes les données de séries, avec 20, 40 ou 120 requêtes par minute comme seule différence. Voir les tarifs, créez une clé, et votre premier appel de série ne coûte qu'une requête.