Watch It? Track It.

El base.json de una película contiene sus datos independientes del idioma y sus créditos; sus nombres y descripciones están en los archivos de idioma.

Archivos

  • https://api.watchittrackit.com/v1/movie/{id}/base.json
  • https://api.watchittrackit.com/v1/movie/{id}/{lang}.json
  • https://api.watchittrackit.com/v1/movie/slugs/{shard}.json

Una imagen es un objeto con las rutas full y thumb.

base.json

CampoTipoDescripción
typestringTipo de registro.
idnumberId de TheTVDB.
slugstringSlug de la URL, único dentro del tipo.
popularitynumberPuntuación de popularidad de TheTVDB; cuanto más alta, más popular. Las puntuaciones solo son comparables dentro de un mismo tipo.
deletedbooleanTrue si el registro se eliminó. Sus archivos siguen publicados.
releasedstringFecha de estreno (YYYY-MM-DD).
runtimenumberDuración en minutos.
imageimageImagen principal: un póster para los títulos, una foto para las personas.
images{ [kind]: image }La mejor imagen de cada clase: poster, background, banner, icon, clearart, clearlogo.
imagesByLang{ [kind]: image[] }Por clase, la mejor imagen en cada idioma, con su código de idioma, tamaño y puntuación.
castcredit[]Actores, en orden de aparición en los créditos.
crewcredit[]Todas las demás personas acreditadas, con su función.
topBilledIdsnumber[]Ids de las personas que se destacan primero.
genresstring[]Slugs de género, tal como los define TheTVDB.
languagesstring[]Idiomas para los que este registro tiene archivos.
remoteIds{ [site]: string }Ids en otros sitios (imdb, tmdb, wikidata, …), indexados por sitio.

Ejemplo

{
  "type": "movie",
  "id": 16612,
  "slug": "barbie",
  "popularity": 1213687,
  "deleted": false,
  "released": "2023-07-18",
  "runtime": 114,
  "images": {
    "poster": { "full": "/images/movie/16612/poster/64ba61bb1dc73.jpg", "thumb": "/images/movie/16612/poster/64ba61bb1dc73.t.jpg" }
  },
  "imagesByLang": {
    "poster": [{ "full": "/images/movie/16612/poster/64ba61bb1dc73.jpg", "thumb": "…", "lang": "eng", "width": 680, "height": 1000, "score": 100007 }]
  },
  "cast": [
    { "id": 327479, "activityId": 44, "role": "Barbie", "slug": "margot-robbie", "topBilled": true, "deleted": false }
  ],
  "crew": [
    { "id": 569546, "activityId": 93, "job": "producer", "slug": "walter-f-parkes", "topBilled": false, "deleted": false }
  ],
  "topBilledIds": [327479],
  "genres": ["adventure", "comedy", "fantasy"],
  "languages": ["de", "en", "fr"],
  "remoteIds": { "imdb": "tt1517268", "tmdb": "346698" }
}

Créditos

Cada entrada de cast y crew:

CampoTipoDescripción
idnumberId de la persona.
activityIdnumberId del crédito, único por crédito.
rolestringPersonaje interpretado (reparto).
jobstringFunción (equipo): director, writer, producer, …
slugstringEl slug de la persona.
imageimageLa foto de la persona.
topBilledbooleanUn crédito destacado.
deletedbooleanTrue si la persona se eliminó.

Archivos de idioma

CampoTipoDescripción
typestringTipo de registro.
idnumberId de TheTVDB.
langstringIdioma de este archivo.
namestringNombre en este idioma.
overviewstringDescripción en este idioma.
credits{ [personId]: { name, role } }Por id de persona: su nombre en este idioma y su papel.

Ejemplo

{
  "type": "movie",
  "id": 16612,
  "lang": "en",
  "name": "Barbie",
  "overview": "Barbie and Ken are having the time of their lives…",
  "credits": { "327479": { "name": "Margot Robbie", "role": "Barbie" } }
}

Encontrar un título por su slug

Las URL de series y películas usan slugs (breaking-bad). El índice de slugs asigna cada slug a su id y está dividido en 256 archivos pequeños: el archivo de un slug se nombra con los dos primeros caracteres hexadecimales del SHA-1 del slug.

// Node.js
import { createHash } from "node:crypto"

const slug = "barbie"
const shard = createHash("sha1").update(slug, "utf8").digest("hex").slice(0, 2)
const index = await fetch(`https://api.watchittrackit.com/v1/movie/slugs/${shard}.json`).then((r) => r.json())
const id = index[slug]
const record = await fetch(`https://api.watchittrackit.com/v1/movie/${id}/base.json`).then((r) => r.json())