Obtén todos los episodios de una temporada
GET / devuelve una temporada con su array episodes completo. Cada episodio tiene episode_number, name, overview, air_date, runtime y still_path. Los ids son los ids numéricos que usa TMDB, por ejemplo 1396 para Breaking Bad.
Obtienes temporadas, episodios con fechas y duraciones, imágenes de episodio, el próximo y el último episodio emitido de una serie, y la lista de órdenes alternativos de episodios. Los campos de texto siguen el parámetro language, y una sinopsis queda vacía cuando no existe traducción.
Qué datos obtienes
| Endpoint | Devuelve |
|---|---|
GET /3/tv/{tv_id} | Resumen de seasons, number_of_seasons, status, next_episode_to_air, last_episode_to_air |
GET / | Una temporada con todos sus episodes |
GET / | Un episodio con crew y guest_stars |
GET / | Nombre, type y número de episodios de cada orden alternativo definido para la serie |
Campos de un episodio:
| Campo | Tipo | Notas |
|---|---|---|
id, show_id | entero | Id del episodio e id de la serie. show_id aparece en las listas de temporada y en next_episode_to_air, no en la ruta de un solo episodio |
episode_number, season_number | entero | Posición en la temporada |
episode_type | cadena | Por ejemplo standard |
name, overview | cadena | Localizados con language |
air_date | cadena o null | YYYY-MM-DD, vacía o null cuando no está anunciado |
runtime | entero o null | Minutos |
still_path | cadena o null | Únelo a https:/ |
vote_average, vote_count | número, entero | Actualmente 0 en los episodios |
production_code | cadena | Código del estudio, a menudo vacío |
crew, guest_stars | array | Personas acreditadas en el episodio, con los mismos campos que un miembro del reparto |
Empieza en 3 pasos
- Elige un plan en precios. Todos los planes devuelven los mismos datos de episodios, y solo cambia el límite de solicitudes.
- Crea una clave en el panel de tu cuenta y guárdala en una variable de entorno.
- Solicita
/3/tv/{tv_id}/season/1con la clave como encabezado Bearer o comoapi_key.
Ejemplo de solicitud
El ejemplo obtiene la temporada 1 de Breaking Bad (id de serie 1396) en inglés. El programa en Go la decodifica en structs tipados e imprime una línea por episodio con la fecha de emisión, la duración y la URL de la imagen.
curl -s "https://api.amodb.dev/3/tv/1396/season/1?language=en-US" \
-H "Authorization: Bearer $AMODB_KEY"package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
type Episode struct {
EpisodeNumber int `json:"episode_number"`
Name string `json:"name"`
AirDate string `json:"air_date"`
Runtime int `json:"runtime"`
StillPath *string `json:"still_path"`
}
type Season struct {
Name string `json:"name"`
SeasonNumber int `json:"season_number"`
Episodes []Episode `json:"episodes"`
}
func main() {
client := &http.Client{Timeout: 10 * time.Second}
url := "https://api.amodb.dev/3/tv/1396/season/1?language=en-US"
req, err := http.NewRequest("GET", url, nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
res, err := client.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
panic(fmt.Sprintf("amodb returned %s", res.Status))
}
var season Season
if err := json.NewDecoder(res.Body).Decode(&season); err != nil {
panic(err)
}
fmt.Println(season.Name)
for _, e := range season.Episodes {
still := "no still"
if e.StillPath != nil {
still = "https://img.amodb.dev/t/p/w300" + *e.StillPath
}
fmt.Printf("S%02dE%02d %s %3d min %s %s\n",
season.SeasonNumber, e.EpisodeNumber, e.AirDate, e.Runtime, e.Name, still)
}
}Respuesta recortada: 2 de los 7 episodios, con un miembro del equipo técnico y un invitado en cada uno.
{
"air_date": "2008-01-20",
"episodes": [
{
"air_date": "2008-01-20",
"episode_number": 1,
"episode_type": "standard",
"id": 62085,
"name": "Pilot",
"overview": "When an unassuming high school chemistry teacher discovers he has a rare form...",
"production_code": "",
"runtime": 59,
"season_number": 1,
"show_id": 1396,
"still_path": "/ydlY3iPfeOAvu8gVqrxPoMvzNCn.jpg",
"vote_average": 0,
"vote_count": 0,
"crew": [
{
"department": "Camera",
"job": "Director of Photography",
"credit_id": "52b7029219c29533d00dd2c1",
"adult": false,
"gender": 2,
"id": 2483,
"known_for_department": "Camera",
"name": "约翰·托尔",
"original_name": "约翰·托尔",
"popularity": 1.1957,
"profile_path": "/cfL9A6tC7L5Ps5fq1o3WpVKGMb1.jpg"
}
],
"guest_stars": [
{
"character": "Steven Gomez",
"credit_id": "5271b489760ee35b3e0881a7",
"order": 8,
"adult": false,
"gender": 2,
"id": 61535,
"known_for_department": "Acting",
"name": "史蒂文·迈克尔·奎扎达",
"original_name": "史蒂文·迈克尔·奎扎达",
"popularity": 1.7511,
"profile_path": "/pVYrDkwI6GWvCNL2kJhpDJfBFyd.jpg"
}
]
},
{
"air_date": "2008-01-27",
"episode_number": 2,
"episode_type": "standard",
"id": 62086,
"name": "Cat's in the Bag...",
"overview": "Walt and Jesse attempt to tie up loose ends. The desperate situation gets mor...",
"production_code": "",
"runtime": 49,
"season_number": 1,
"show_id": 1396,
"still_path": "/AbMoecO0ZZio0LcgeLxlzdyGs6X.jpg",
"vote_average": 0,
"vote_count": 0,
"crew": [
{
"department": "Camera",
"job": "Director of Photography",
"credit_id": "52b7049c19c2953b63015013",
"adult": false,
"gender": 2,
"id": 17948,
"known_for_department": "Camera",
"name": "Reynaldo Villalobos",
"original_name": "Reynaldo Villalobos",
"popularity": 0.904,
"profile_path": "/4YlfhHDRZWhbRgeqT2Bwl1u5p9j.jpg"
}
],
"guest_stars": [
{
"character": "Krazy-8",
"credit_id": "52725845760ee3046b09426e",
"order": 504,
"adult": false,
"gender": 2,
"id": 1046460,
"known_for_department": "Acting",
"name": "Max Arciniega",
"original_name": "Max Arciniega",
"popularity": 1.4399,
"profile_path": "/eqKAJKPpt41KpsLIkkBnAY4HMAL.jpg"
}
]
}
],
"name": "Season 1",
"overview": "High school chemistry teacher Walter White's life is suddenly transformed by...",
"id": 3572,
"poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
"season_number": 1,
"vote_average": 0
}Obtén una serie completa
amodb no acepta valores del tipo season/1 en append_to_response, así que las llamadas de temporada van por separado. Lee primero number_of_seasons y la lista seasons de los detalles de TV, y luego solicita cada temporada en un bucle.
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');
for (const { season_number } of show.seasons) {
const season = await get(`/tv/1396/season/${season_number}`);
console.log(season.name, season.episodes.length);
}seasons incluye la temporada 0 cuando la serie tiene especiales, así que Breaking Bad cuesta 1 llamada de detalles más 6 llamadas de temporada. Una serie con 10 temporadas cuesta 11 solicitudes. Los detalles se guardan en la caché perimetral 6 horas, así que almacena el resultado y actualízalo según un calendario.
Fechas de emisión y qué viene después
GET /3/tv/{tv_id} contiene next_episode_to_air y last_episode_to_air, objetos de episodio completos con name, air_date, season_number, episode_number, runtime y still_path. next_episode_to_air es null cuando no hay nada anunciado. Combínalo con status (por ejemplo Returning Series, Ended o Canceled) para decidir si muestras una cuenta atrás.
air_date es una fecha de calendario sin hora del día. Compárala con la fecha de hoy para marcar los episodios nuevos. Para un calendario de lo que se emite, las listas airing_today y on_the_air de tendencias y listas se guardan en caché 30 minutos.
Imágenes de episodio y duraciones
Usa w185 o w300 para las filas de una lista y original para el tamaño completo. Los tamaños de imagen de episodio son w92, w185, w300 y original. Un episodio puede no tener imagen, así que muestra un marcador de posición cuando still_path sea null. El host de imágenes no necesita clave, consulta imágenes.
runtime está en minutos y puede ser null. Para mostrar el tiempo de maratón de una temporada, suma runtime de todos los episodes y cuenta null como 0. Añade append_ a la ruta de un solo episodio para obtener un objeto credits y una lista stills. El array cast del episodio está vacío, y las personas aparecen en crew y guest_stars. Los detalles están en temporadas y episodios y en créditos.
Órdenes alternativos con grupos de episodios
Algunas series se ven en un orden distinto al de su emisión. GET / lista los órdenes definidos para una serie. Cada entrada tiene id, name, description, type, episode_count, group_count y network. El array results está vacío cuando no hay ninguno definido.
type | Orden |
|---|---|
| 1 | Fecha de emisión original |
| 2 | Absoluto |
| 3 | DVD |
| 4 | Digital |
| 5 | Arco argumental |
| 6 | Producción |
| 7 | TV |
amodb solo devuelve esta lista. No ofrece GET /, así que los episodios dentro de un grupo no están disponibles. Usa los endpoints de temporada para los datos de episodios.
Cómo se compara
| Capacidad | Hacer scraping de páginas de episodios | API de metadatos con nivel gratuito | amodb |
|---|---|---|---|
| Temporada completa | Una página por cada temporada | Consulta su documentación | Una llamada, con el array episodes incluido |
| Serie completa | Rastrear cada temporada | Consulta su documentación | Una llamada por temporada, listadas en seasons |
| Fechas de emisión | Analizar texto | Consulta su documentación | air_date más next_episode_to_air |
| Imágenes de episodio | Descargar y redimensionar | Consulta su documentación | Tamaños fijos en img.amodb.dev, sin clave |
| Otros órdenes de episodios | No disponible | Consulta su documentación | Lista episode_groups, sin el contenido de los grupos |
| Idiomas | Un idioma por sitio | Consulta su documentación | 14 idiomas con language |
Precios
Los planes son prepago por 1, 3, 6, 12 o 24 meses, con 0, 10, 20, 30 o 40 por ciento de descuento en los periodos más largos, y nunca se renuevan solos. Los planes de 20, 40 y 120 solicitudes por minuto devuelven todos los endpoints de esta página. Actualizar una serie cuesta una solicitud para los detalles y una por temporada. No hay nivel gratuito. Elige un plan en precios.