API
Die base.json einer Serie enthält all ihre Staffeln und Folgen, sodass eine einzige Anfrage die ganze Serie liefert. Namen und Beschreibungen der Serie, ihrer Staffeln und Folgen stehen in den Sprachdateien.
Dateien
https://api.watchittrackit.com/v1/tv/{id}/base.jsonhttps://api.watchittrackit.com/v1/tv/{id}/{lang}.jsonhttps://api.watchittrackit.com/v1/tv/slugs/{shard}.json
Ein Bild ist ein Objekt mit den Pfaden full und thumb.
base.json
| Feld | Typ | Beschreibung |
|---|---|---|
| type | string | Datensatztyp. |
| id | number | TheTVDB-ID. |
| slug | string | URL-Slug, eindeutig innerhalb des Typs. |
| popularity | number | Beliebtheitswert von TheTVDB; höher bedeutet beliebter. Werte sind nur innerhalb eines Typs vergleichbar. |
| deleted | boolean | True, wenn der Datensatz entfernt wurde. Seine Dateien bleiben veröffentlicht. |
| firstAired | string | Datum der ersten Folge (YYYY-MM-DD). |
| lastAired | string | Datum der neuesten Folge. |
| status | string | Ausstrahlungsstatus von TheTVDB, etwa Continuing oder Ended. |
| network | string | Sender. |
| originalLanguage | string | Code der Originalsprache. |
| originalCountry | string | Ursprungsland (dreistelliger Code). |
| image | image | Hauptbild: ein Poster für Titel, ein Foto für Personen. |
| images | { [kind]: image } | Das beste Bild jeder Art: poster, background, banner, icon, clearart, clearlogo. |
| imagesByLang | { [kind]: image[] } | Pro Art das beste Bild in jeder Sprache, mit Sprachcode, Größe und Bewertung. |
| cast | credit[] | Schauspieler in der Reihenfolge der Nennung. |
| crew | credit[] | Alle weiteren Mitwirkenden mit ihrer Tätigkeit. |
| topBilledIds | number[] | IDs der Personen, die zuerst hervorgehoben werden. |
| seasons | season[] | Staffeln in Ausstrahlungsreihenfolge, jeweils mit ihren Folgen. |
| genres | string[] | Genre-Slugs, wie TheTVDB sie definiert. |
| languages | string[] | Sprachen, für die dieser Datensatz Dateien hat. |
| remoteIds | { [site]: string } | IDs auf anderen Websites (imdb, tmdb, wikidata, …), nach Website geordnet. |
Beispiel
{
"type": "tv",
"id": 81189,
"slug": "breaking-bad",
"popularity": 3287090,
"deleted": false,
"firstAired": "2008-01-20",
"lastAired": "2013-09-29",
"status": "Ended",
"images": {
"poster": { "full": "/images/tv/81189/1340353429.jpg", "thumb": "/images/tv/81189/1340353429.t.jpg" }
},
"cast": [
{ "id": 255211, "activityId": 180, "role": "Walter White", "slug": "bryan-cranston", "topBilled": false, "deleted": false }
],
"seasons": [
{
"id": 30272, "number": 1, "deleted": false,
"episodes": [{ "id": 349232, "number": 1, "aired": "2008-01-20", "runtime": 58, "deleted": false }]
}
],
"genres": ["drama", "crime"],
"languages": ["de", "en", "fr"],
"remoteIds": { "imdb": "tt0903747" }
}Staffeln
| Feld | Typ | Beschreibung |
|---|---|---|
| id | number | TheTVDB-ID. |
| number | number | Staffelnummer; 0 steht für Specials. |
| deleted | boolean | True, wenn der Datensatz entfernt wurde. Seine Dateien bleiben veröffentlicht. |
| image | image | Hauptbild: ein Poster für Titel, ein Foto für Personen. |
| images | { [kind]: image } | Das beste Bild jeder Art: poster, background, banner, icon, clearart, clearlogo. |
| imagesByLang | { [kind]: image[] } | Pro Art das beste Bild in jeder Sprache, mit Sprachcode, Größe und Bewertung. |
| episodes | episode[] | Die Folgen der Staffel. |
Folgen
| Feld | Typ | Beschreibung |
|---|---|---|
| id | number | TheTVDB-ID. |
| number | number | Folgennummer innerhalb der Staffel. |
| aired | string | Ausstrahlungsdatum (YYYY-MM-DD). |
| runtime | number | Länge in Minuten. |
| image | image | Hauptbild: ein Poster für Titel, ein Foto für Personen. |
| criticalToStory | boolean | Als wesentlich für die Handlung markiert. |
| specialType | string | Art des Specials (Folgen der Staffel 0). |
| deleted | boolean | True, wenn der Datensatz entfernt wurde. Seine Dateien bleiben veröffentlicht. |
Mitwirkende
Jeder Eintrag in cast und crew:
| Feld | Typ | Beschreibung |
|---|---|---|
| id | number | Personen-ID. |
| activityId | number | Credit-ID, eindeutig pro Credit. |
| role | string | Gespielte Rolle (Besetzung). |
| job | string | Tätigkeit (Crew): director, writer, producer, … |
| slug | string | Der Slug der Person. |
| image | image | Das Foto der Person. |
| topBilled | boolean | Ein hervorgehobener Credit. |
| deleted | boolean | True, wenn die Person entfernt wurde. |
Sprachdateien
| Feld | Typ | Beschreibung |
|---|---|---|
| type | string | Datensatztyp. |
| id | number | TheTVDB-ID. |
| lang | string | Sprache dieser Datei. |
| name | string | Name in dieser Sprache. |
| overview | string | Beschreibung in dieser Sprache. |
| credits | { [personId]: { name, role } } | Pro Personen-ID: der Name in dieser Sprache und die Rolle. |
| seasons | { [seasonId]: { name, overview } } | Pro Staffel-ID: Name und Beschreibung. |
| episodes | { [episodeId]: { name, overview } } | Pro Folgen-ID: Name und Beschreibung. |
Beispiel
{
"type": "tv",
"id": 81189,
"lang": "en",
"name": "Breaking Bad",
"overview": "When Walter White, a chemistry teacher, …",
"credits": { "255211": { "name": "Bryan Cranston", "role": "Walter White" } },
"seasons": { "30272": { "overview": "High school chemistry teacher Walter White…" } },
"episodes": { "349232": { "name": "Pilot", "overview": "When an unassuming high school chemistry teacher…" } }
}Einen Titel über seinen Slug finden
Serien- und Film-URLs verwenden Slugs (breaking-bad). Der Slug-Index ordnet jedem Slug seine ID zu und ist auf 256 kleine Dateien verteilt: Die Datei eines Slugs ist nach den ersten beiden Hex-Zeichen des SHA-1 des Slugs benannt.
// Node.js
import { createHash } from "node:crypto"
const slug = "breaking-bad"
const shard = createHash("sha1").update(slug, "utf8").digest("hex").slice(0, 2)
const index = await fetch(`https://api.watchittrackit.com/v1/tv/slugs/${shard}.json`).then((r) => r.json())
const id = index[slug]
const record = await fetch(`https://api.watchittrackit.com/v1/tv/${id}/base.json`).then((r) => r.json())