API delle serie TV

L'endpoint delle serie restituisce una serie per ID su GET /3/tv/{series_id}: nomi, trama, stato, stagioni, emittenti, generi e puntatori all'ultimo e al prossimo episodio. Il JSON segue TMDB v3, quindi i client esistenti richiedono solo un nuovo URL di base. Aggiungi append_to_response per unire classificazioni, crediti e valutazioni in una richiesta.

Aggiornato il Vedi in Markdown

Ottenere i dettagli di una serie TV

GET /3/tv/{series_id} restituisce la scheda di base di una serie: nomi, trama, stato, generi, emittenti, elenco delle stagioni e puntatori all'ultimo e al prossimo episodio. L'ID è l'ID numerico di serie TV di TMDB, quindi una serie che salvi come 1396 mantiene quell'ID qui. Gli ID di film e di serie TV sono spazi separati, quindi salva sempre il tipo di contenuto accanto al numero.

L'esempio chiede Breaking Bad in inglese e aggiunge le sue classificazioni per età e i punteggi esterni nella stessa chiamata.

bashjspyphpgo
curl -sSf "https://api.amodb.dev/3/tv/1396?language=en-US&append_to_response=content_ratings,ratings" \
  -H "Authorization: Bearer $AMODB_KEY"
const params = new URLSearchParams({ language: 'en-US', append_to_response: 'content_ratings,ratings' });
const res = await fetch(`https://api.amodb.dev/3/tv/1396?${params}`, {
  headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` },
});
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const show = await res.json();
const us = show.content_ratings.results.find((r) => r.iso_3166_1 === 'US');
console.log(show.name, show.status, show.number_of_seasons, us?.rating);
import os
import requests

r = requests.get(
    "https://api.amodb.dev/3/tv/1396",
    params={"language": "en-US", "append_to_response": "content_ratings,ratings"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
r.raise_for_status()
show = r.json()
us = next((x for x in show["content_ratings"]["results"] if x["iso_3166_1"] == "US"), None)
print(show["name"], show["status"], show["number_of_seasons"], us and us["rating"])
<?php
$url = 'https://api.amodb.dev/3/tv/1396?' . http_build_query([
    'language' => 'en-US',
    'append_to_response' => 'content_ratings,ratings',
]);
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AMODB_KEY')],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
    throw new RuntimeException("amodb returned $status");
}
$show = json_decode($body, true);
echo $show['name'], ' ', $show['status'], ' ', $show['number_of_seasons'], PHP_EOL;
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"
	"os"
	"time"
)

type Show struct {
	Name             string `json:"name"`
	Status           string `json:"status"`
	NumberOfSeasons  int    `json:"number_of_seasons"`
	NumberOfEpisodes int    `json:"number_of_episodes"`
	Next             *struct {
		AirDate string `json:"air_date"`
	} `json:"next_episode_to_air"`
}

func main() {
	q := url.Values{"language": {"en-US"}}
	req, _ := http.NewRequest("GET", "https://api.amodb.dev/3/tv/1396?"+q.Encode(), nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	client := &http.Client{Timeout: 10 * time.Second}
	res, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(res.Status)
	}
	var s Show
	if err := json.NewDecoder(res.Body).Decode(&s); err != nil {
		panic(err)
	}
	next := "none scheduled"
	if s.Next != nil {
		next = s.Next.AirDate
	}
	fmt.Println(s.Name, s.Status, s.NumberOfSeasons, s.NumberOfEpisodes, next)
}

Parametri

  • series_idpercorsoobbligatorio
    ID numerico della serie TV, per esempio 1396.
  • api_keyqueryuno dei due
    La tua chiave. Usa questa o l'header Authorization: Bearer.
  • languagequery
    Tag TMDB come en-US, uk-UA o es-ES. Sono servite 14 lingue di base. Predefinito en-US.
  • append_to_responsequery
    Elenco di sottorisorse separate da virgole da unire alla risposta, fino a 20 valori.

Campi della risposta

CampoTipoNote
idinteroID della serie TV.
name, original_namestringaTitolo localizzato e titolo originale. I nomi originali in giapponese o coreano restano in original_name.
overview, taglinestringaTesto localizzato, vuoto quando non esiste una traduzione.
first_air_date, last_air_datestringa o nullYYYY-MM-DD.
statusstringaCiclo di vita, vedi la tabella qui sotto.
in_productionbooleanotrue finché la serie è ancora in lavorazione.
number_of_seasons, number_of_episodesinteroTotali, come salvati per la serie.
episode_run_timearrayDurate tipiche degli episodi in minuti, può essere vuoto.
seasonsarrayUn riepilogo per stagione con id, season_number, name, overview, episode_count, air_date, poster_path, vote_average.
last_episode_to_air, next_episode_to_airoggetto o nullRiepiloghi di episodi, con la struttura degli oggetti di stagioni ed episodi.
networks, production_companiesarrayid, name, logo_path, origin_country.
production_countries, spoken_languagesarrayPaesi con iso_3166_1 e name. Lingue con english_name, iso_639_1 e name.
created_byarrayAutori con id, name, profile_path e credit_id. Vuoto per la maggior parte delle serie.
genresarrayOggetti con id e name. Gli ID dei generi delle serie TV differiscono da quelli dei film.
origin_country, original_language, languagesarray, stringaCodici paese e codici lingua.
homepagestringaSito ufficiale, vuoto quando non noto.
poster_path, backdrop_pathstringa o nullDa accodare a https://img.amodb.dev/t/p/{size}. Vedi immagini.
popularitynumeroPunteggio relativo usato dalla lista dei popolari.
vote_average, vote_countnumero, interoPunteggio aggregato degli utenti.
adultbooleanoSempre false. I titoli per adulti non vengono mai serviti.

Risposta di esempio

GET /3/tv/1396?language=en-US&append_to_response=content_ratings,ratings, con array e testi lunghi accorciati:

JSON
{
  "adult": false,
  "backdrop_path": "/ycFcYYnzVc8mWw41neszGPMyKc3.jpg",
  "created_by": [],
  "episode_run_time": [
    48,
    49
  ],
  "first_air_date": "2008-01-20",
  "genres": [
    {
      "id": 18,
      "name": "Drama"
    },
    {
      "id": 80,
      "name": "Crime"
    }
  ],
  "homepage": "",
  "id": 1396,
  "in_production": false,
  "languages": [
    "en"
  ],
  "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,
  "networks": [
    {
      "id": 174,
      "logo_path": "/pmvRmATOCaDykE6JrVoeYxlFHw3.png",
      "name": "AMC",
      "origin_country": "US"
    }
  ],
  "number_of_episodes": 62,
  "number_of_seasons": 5,
  "origin_country": [
    "US"
  ],
  "original_language": "en",
  "original_name": "Breaking Bad",
  "overview": "Walter White, a New Mexico chemistry teacher, is diagnosed with Stage III cancer and given a prognosis of o...",
  "popularity": 268.4968,
  "poster_path": "/anFx9aTOOYqgS3v7x3R84Kz67ly.jpg",
  "production_companies": [
    {
      "id": 2605,
      "logo_path": null,
      "name": "Gran Via Productions",
      "origin_country": "US"
    },
    {
      "id": 11073,
      "logo_path": "/wHs44fktdoj6c378ZbSWfzKsM2Z.png",
      "name": "Sony Pictures Television",
      "origin_country": "US"
    }
  ],
  "production_countries": [
    {
      "iso_3166_1": "US",
      "name": "United States of America"
    }
  ],
  "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 diagnosis. Stre...",
      "poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
      "season_number": 1,
      "vote_average": 0
    }
  ],
  "spoken_languages": [
    {
      "english_name": "English",
      "iso_639_1": "en",
      "name": "English"
    },
    {
      "english_name": "Spanish",
      "iso_639_1": "es",
      "name": "Español"
    }
  ],
  "status": "Ended",
  "tagline": "Change the equation.",
  "vote_average": 9,
  "vote_count": 18863,
  "content_ratings": {
    "results": [
      {
        "descriptors": [],
        "iso_3166_1": "AT",
        "rating": "16"
      },
      {
        "descriptors": [],
        "iso_3166_1": "AU",
        "rating": "MA 15+"
      }
    ]
  },
  "ratings": {
    "imdb": {
      "value": 9.5,
      "votes": 2671962
    },
    "kinopoisk": {
      "value": 8.9,
      "votes": null
    },
    "metacritic": null,
    "rotten_tomatoes": {
      "value": 96,
      "votes": null
    },
    "tmdb": {
      "value": 9,
      "votes": 18863
    }
  }
}

I blocchi content_ratings e ratings vengono da append_to_response. Nomi e trame dentro seasons, last_episode_to_air e next_episode_to_air sono salvati per scheda e possono non seguire language, come mostra il nome di episodio in ebraico qui sopra. Leggi il testo localizzato di stagioni ed episodi dall'endpoint della stagione.

Stato e puntatori degli episodi

status ti dice a che punto è la vita di una serie, e next_episode_to_air ti dice quando ricontrollare.

Valore di statusSignificatonext_episode_to_air
Returning SeriesIn onda adesso o tra una stagione e l'altra.Valorizzato quando una data è nota, altrimenti null.
Planned, In ProductionNon ancora una serie regolare.Di solito null.
EndedHa concluso il suo corso.Null.
CanceledInterrotta prima della fine prevista.Null.

Una serie in corso tra una stagione e l'altra ha un next_episode_to_air nullo, quindi leggi null come «nessuna data nota» e non come «conclusa».

L'array seasons elenca un riepilogo per stagione, e la stagione 0 contiene gli speciali. Per leggere gli episodi di una stagione, chiama l'endpoint descritto in stagioni ed episodi.

Endpoint correlati delle serie

Tutti i percorsi condividono la base https://api.amodb.dev/3, e gli endpoint con testo localizzato accettano anche language.

Metodo e percorsoRestituisceParametri aggiuntivi
GET /tv/{series_id}/alternative_titles{id, results} con iso_3166_1, title, type, spesso vuotonessuno
GET /tv/{series_id}/content_ratingsClassificazione per età per ogni paesenessuno
GET /tv/{series_id}/episode_groupsElenco di ordinamenti alternativi degli episodi come DVD o arco narrativonessuno
GET /tv/{series_id}/recommendationsUna lista di 20 serie consigliatenessuno
GET /tv/{series_id}/similarUna lista di 20 serie similinessuno
GET /tv/{series_id}/reviewsresults è vuoto per la maggior parte delle serienessuno
GET /tv/{series_id}/listsListe pubbliche che contengono la seriepage
GET /tv/{series_id}/watch/providersPiattaforme di streaming, noleggio e acquisto per paesenessuno
GET /tv/latestL'ultima scheda di serie aggiuntanessuno

Le liste di consigliati e simili restituiscono sempre la pagina 1 con 20 elementi. La risposta di lists è paginata con page, 20 liste per pagina. Le liste paginate altrove nell'API accettano page da 1 a 500.

Le classificazioni per età tornano come voci results con iso_3166_1, rating e descriptors, quindi scegli la voce che corrisponde al paese dello spettatore. Le piattaforme di visione sono indicizzate per codice paese, e ogni paese contiene un link più le liste flatrate, rent e buy con provider_id, provider_name, logo_path e display_priority. Gli ID delle piattaforme per filtrare vengono dalle liste di riferimento in generi e liste di riferimento.

La lista dei gruppi di episodi restituisce id (una stringa), name, description, type, episode_count, group_count e network. amodb elenca i gruppi ma non offre un endpoint che restituisca gli episodi di un gruppo. Non offre nemmeno i percorsi changes di TMDB.

Unire più dati in una sola chiamata

Elenca le sottorisorse in append_to_response e ciascuna arriva sotto la propria chiave. L'intera chiamata conta una volta nelle tue 20, 40 o 120 richieste al minuto. Funzionano fino a 20 valori, e i nomi sconosciuti vengono ignorati senza errore. Questi valori funzionano su una serie:

ValoreAggiungeDettagli
creditsCast e troupeCrediti
external_idsID come imdb_id, tvdb_id e wikidata_idRicerca per ID esterno
images, videosLocandine, sfondi, trailerImmagini, Video
keywords, translationsTag e testi tradottiParole chiave, Traduzioni
content_ratings, alternative_titles, episode_groups, lists, watch/providers, similar, recommendations, reviewsLe sottorisorse della tabella qui sopraQuesta pagina
ratings, moods, soundtracks, wikidata, showtimesExtra di amodbValutazioni, Mood, Colonne sonore, Orari delle proiezioni

Errori

Una chiamata non riuscita restituisce il corpo di errore TMDB. Un ID sbagliato dà status_code 34 con il messaggio «The resource you requested could not be found.»

HTTPstatus_codeQuando
4017La chiave manca o è sbagliata.
40236Il periodo del piano è terminato.
40434Nessuna serie con quell'ID, un titolo per adulti, o un percorso non offerto.
40537Hai chiamato un metodo di scrittura come valutare una serie.
42925Oltre le tue richieste al minuto. Attendi i secondi di Retry-After.

L'elenco completo è in errori, e i limiti per piano sono in limiti di richieste.

Note pratiche

  • I dettagli di una serie e ogni sottorisorsa qui sopra restano in cache per 6 ore. Interroga last_episode_to_air al massimo poche volte al giorno.
  • Richiedi la lingua che mostri. Un overview vuoto significa che non esiste una traduzione, quindi richiedi di nuovo con en-US per un ripiego.
  • Usa number_of_seasons come limite del ciclo quando recuperi ogni stagione, una chiamata ciascuna.
  • Per elencare serie invece di leggerne una, vedi ricerca, discover e tendenze e liste.