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.
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.
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_idpercorsoobbligatorioID numerico della serie TV, per esempio1396.api_keyqueryuno dei dueLa tua chiave. Usa questa o l'headerAuthorization: Bearer.languagequeryTag TMDB comeen-US,uk-UAoes-ES. Sono servite 14 lingue di base. Predefinitoen-US.append_to_responsequeryElenco di sottorisorse separate da virgole da unire alla risposta, fino a 20 valori.
Campi della risposta
| Campo | Tipo | Note |
|---|---|---|
id | intero | ID della serie TV. |
name, original_name | stringa | Titolo localizzato e titolo originale. I nomi originali in giapponese o coreano restano in original_name. |
overview, tagline | stringa | Testo localizzato, vuoto quando non esiste una traduzione. |
first_air_date, last_air_date | stringa o null | YYYY-MM-DD. |
status | stringa | Ciclo di vita, vedi la tabella qui sotto. |
in_production | booleano | true finché la serie è ancora in lavorazione. |
number_of_seasons, number_of_episodes | intero | Totali, come salvati per la serie. |
episode_run_time | array | Durate tipiche degli episodi in minuti, può essere vuoto. |
seasons | array | Un riepilogo per stagione con id, season_number, name, overview, episode_count, air_date, poster_path, vote_average. |
last_episode_to_air, next_episode_to_air | oggetto o null | Riepiloghi di episodi, con la struttura degli oggetti di stagioni ed episodi. |
networks, production_companies | array | id, name, logo_path, origin_country. |
production_countries, spoken_languages | array | Paesi con iso_3166_1 e name. Lingue con english_name, iso_639_1 e name. |
created_by | array | Autori con id, name, profile_path e credit_id. Vuoto per la maggior parte delle serie. |
genres | array | Oggetti con id e name. Gli ID dei generi delle serie TV differiscono da quelli dei film. |
origin_country, original_language, languages | array, stringa | Codici paese e codici lingua. |
homepage | stringa | Sito ufficiale, vuoto quando non noto. |
poster_path, backdrop_path | stringa o null | Da accodare a https:/. Vedi immagini. |
popularity | numero | Punteggio relativo usato dalla lista dei popolari. |
vote_average, vote_count | numero, intero | Punteggio aggregato degli utenti. |
adult | booleano | Sempre false. I titoli per adulti non vengono mai serviti. |
Risposta di esempio
GET /, con array e testi lunghi accorciati:
{
"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 status | Significato | next_episode_to_air |
|---|---|---|
Returning Series | In onda adesso o tra una stagione e l'altra. | Valorizzato quando una data è nota, altrimenti null. |
Planned, In Production | Non ancora una serie regolare. | Di solito null. |
Ended | Ha concluso il suo corso. | Null. |
Canceled | Interrotta 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:/, e gli endpoint con testo localizzato accettano anche language.
| Metodo e percorso | Restituisce | Parametri aggiuntivi |
|---|---|---|
GET / | {id, results} con iso_3166_1, title, type, spesso vuoto | nessuno |
GET / | Classificazione per età per ogni paese | nessuno |
GET / | Elenco di ordinamenti alternativi degli episodi come DVD o arco narrativo | nessuno |
GET / | Una lista di 20 serie consigliate | nessuno |
GET / | Una lista di 20 serie simili | nessuno |
GET / | results è vuoto per la maggior parte delle serie | nessuno |
GET / | Liste pubbliche che contengono la serie | page |
GET / | Piattaforme di streaming, noleggio e acquisto per paese | nessuno |
GET /tv/latest | L'ultima scheda di serie aggiunta | nessuno |
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:
| Valore | Aggiunge | Dettagli |
|---|---|---|
credits | Cast e troupe | Crediti |
external_ids | ID come imdb_id, tvdb_id e wikidata_id | Ricerca per ID esterno |
images, videos | Locandine, sfondi, trailer | Immagini, Video |
keywords, translations | Tag e testi tradotti | Parole chiave, Traduzioni |
content_ratings, alternative_titles, episode_groups, lists, watch/providers, similar, recommendations, reviews | Le sottorisorse della tabella qui sopra | Questa pagina |
ratings, moods, soundtracks, wikidata, showtimes | Extra di amodb | Valutazioni, 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.»
| HTTP | status_code | Quando |
|---|---|---|
| 401 | 7 | La chiave manca o è sbagliata. |
| 402 | 36 | Il periodo del piano è terminato. |
| 404 | 34 | Nessuna serie con quell'ID, un titolo per adulti, o un percorso non offerto. |
| 405 | 37 | Hai chiamato un metodo di scrittura come valutare una serie. |
| 429 | 25 | Oltre 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_airal massimo poche volte al giorno. - Richiedi la lingua che mostri. Un
overviewvuoto significa che non esiste una traduzione, quindi richiedi di nuovo conen-USper un ripiego. - Usa
number_of_seasonscome limite del ciclo quando recuperi ogni stagione, una chiamata ciascuna. - Per elencare serie invece di leggerne una, vedi ricerca, discover e tendenze e liste.