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://api.amodb.dev/3.

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 status et un indicateur in_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

BesoinAppelChamps clés
Fiche de sérieGET /3/tv/{series_id}name, original_name, status, in_production, number_of_seasons, number_of_episodes
Prochain et dernier épisodemême appelnext_episode_to_air, last_episode_to_air
Une saisonGET /3/tv/{series_id}/season/{season_number}episodes, air_date, poster_path
Un épisodeGET /3/tv/{series_id}/season/{season_number}/episode/{episode_number}name, overview, runtime, still_path, air_date
Une chaîneGET /3/network/{network_id}name, headquarters, origin_country

Les listes de champs complètes sont sur séries TV et saisons et épisodes.

Démarrer en 3 étapes

  1. Ouvrez les tarifs et choisissez l'offre dont le débit vous convient : 20, 40 ou 120 par minute.
  2. Créez une clé d'API dans le tableau de bord de votre compte.
  3. Envoyez GET /3/tv/{series_id} avec Authorization: Bearer YOUR_API_KEY, ou ajoutez api_key comme 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.

bashjs
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.

JSON
{
  "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 ».

statusSignificationQue montrer
Returning SeriesD'autres épisodes sont attendusLa prochaine date de diffusion si l'objet existe, sinon « de retour »
In ProductionEn cours de fabrication, pas encore diffusée« En production »
PlannedAnnoncée seulement« Prévue »
PilotSeul un pilote existe« Pilote »
EndedLa série est terminée« Terminée » et last_air_date
CanceledArrê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.

AppelRenvoieParamètres
GET /3/tv/{series_id}/season/{season_number}Fiche de saison avec un tableau episodeslanguage, append_to_response
GET /3/tv/airing_todayLes séries dont un épisode est diffusé aujourd'huipage, language
GET /3/tv/on_the_airLes séries diffusées la semaine à venirpage, language
GET /3/discover/tvLes séries filtrées par chaîne, statut et pluswith_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.

  1. Enregistrez l'id de la série quand un utilisateur la suit.
  2. Une fois par jour, appelez /3/tv/{series_id} pour chaque identifiant suivi et stockez status, next_episode_to_air et last_air_date.
  3. Quand next_episode_to_air est un objet, affichez air_date comme une date. Il ne porte ni heure ni fuseau horaire : ne comptez donc pas à rebours à la minute près.
  4. Quand il est null et que status vaut Returning Series, affichez « nouvelle saison non programmée ».
  5. 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êmeAPI de métadonnées avec offre gratuiteamodb
Structure des saisons et des épisodesReconstituée à partir de la mise en pageVariable, voir la documentationAppel de saison avec un tableau episodes
Prochaine date de diffusionExtraite d'une page de programmeVariable, voir la documentationnext_episode_to_air, null quand rien n'est programmé
Statut de la sérieTexte libre sur une pageVariable, voir la documentationChaîne status et indicateur in_production
Diffusion cette semaineExtraire un programmeVariable, voir la documentation/3/tv/on_the_air et /3/tv/airing_today
LanguesCe que propose la pageVariable14, choisies avec language
Conditions d'accèsLes conditions du site s'appliquentOffre gratuite avec conditions d'usagePayant, 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.