Watch It? Track It.

Το base.json μιας σειράς περιέχει όλες τις σεζόν και τα επεισόδιά της, οπότε ένα αίτημα φέρνει ολόκληρη τη σειρά. Τα ονόματα και οι περιγραφές της σειράς, των σεζόν και των επεισοδίων της βρίσκονται στα αρχεία γλώσσας.

Αρχεία

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

Μια εικόνα είναι αντικείμενο με διαδρομές full και thumb.

base.json

ΠεδίοΤύποςΠεριγραφή
typestringΤύπος εγγραφής.
idnumberId του TheTVDB.
slugstringSlug του URL, μοναδικό εντός του τύπου.
popularitynumberΒαθμολογία δημοφιλίας του TheTVDB· όσο υψηλότερη, τόσο πιο δημοφιλές. Οι βαθμολογίες συγκρίνονται μόνο εντός του ίδιου τύπου.
deletedbooleanTrue αν η εγγραφή αφαιρέθηκε. Τα αρχεία της παραμένουν δημοσιευμένα.
firstAiredstringΗμερομηνία του πρώτου επεισοδίου (YYYY-MM-DD).
lastAiredstringΗμερομηνία του πιο πρόσφατου επεισοδίου.
statusstringΚατάσταση προβολής από το TheTVDB, π.χ. Continuing ή Ended.
networkstringΔίκτυο.
originalLanguagestringΚωδικός αρχικής γλώσσας.
originalCountrystringΧώρα προέλευσης (κωδικός τριών γραμμάτων).
imageimageΚύρια εικόνα: αφίσα για τους τίτλους, φωτογραφία για τα πρόσωπα.
images{ [kind]: image }Η καλύτερη εικόνα κάθε είδους: poster, background, banner, icon, clearart, clearlogo.
imagesByLang{ [kind]: image[] }Ανά είδος, η καλύτερη εικόνα σε κάθε γλώσσα, με τον κωδικό γλώσσας, το μέγεθος και τη βαθμολογία της.
castcredit[]Ηθοποιοί, με τη σειρά των τίτλων.
crewcredit[]Όλοι οι υπόλοιποι συντελεστές, με τη θέση τους.
topBilledIdsnumber[]Id των προσώπων που προβάλλονται πρώτα.
seasonsseason[]Σεζόν με τη σειρά προβολής, η καθεμία με τα επεισόδιά της.
genresstring[]Slug ειδών, όπως τα ορίζει το TheTVDB.
languagesstring[]Γλώσσες για τις οποίες η εγγραφή έχει αρχεία.
remoteIds{ [site]: string }Id σε άλλους ιστότοπους (imdb, tmdb, wikidata, …), με κλειδί τον ιστότοπο.

Παράδειγμα

{
  "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" }
}

Σεζόν

ΠεδίοΤύποςΠεριγραφή
idnumberId του TheTVDB.
numbernumberΑριθμός σεζόν· το 0 είναι τα ειδικά επεισόδια.
deletedbooleanTrue αν η εγγραφή αφαιρέθηκε. Τα αρχεία της παραμένουν δημοσιευμένα.
imageimageΚύρια εικόνα: αφίσα για τους τίτλους, φωτογραφία για τα πρόσωπα.
images{ [kind]: image }Η καλύτερη εικόνα κάθε είδους: poster, background, banner, icon, clearart, clearlogo.
imagesByLang{ [kind]: image[] }Ανά είδος, η καλύτερη εικόνα σε κάθε γλώσσα, με τον κωδικό γλώσσας, το μέγεθος και τη βαθμολογία της.
episodesepisode[]Τα επεισόδια της σεζόν.

Επεισόδια

ΠεδίοΤύποςΠεριγραφή
idnumberId του TheTVDB.
numbernumberΑριθμός επεισοδίου μέσα στη σεζόν του.
airedstringΗμερομηνία προβολής (YYYY-MM-DD).
runtimenumberΔιάρκεια σε λεπτά.
imageimageΚύρια εικόνα: αφίσα για τους τίτλους, φωτογραφία για τα πρόσωπα.
criticalToStorybooleanΣημειωμένο ως ουσιώδες για την πλοκή.
specialTypestringΤι είδους ειδικό επεισόδιο είναι (επεισόδια της σεζόν 0).
deletedbooleanTrue αν η εγγραφή αφαιρέθηκε. Τα αρχεία της παραμένουν δημοσιευμένα.

Συντελεστές

Κάθε στοιχείο στα cast και crew:

ΠεδίοΤύποςΠεριγραφή
idnumberId του προσώπου.
activityIdnumberId της συμμετοχής, μοναδικό για κάθε συμμετοχή.
rolestringΡόλος που υποδύεται (ηθοποιοί).
jobstringΘέση (συντελεστές): director, writer, producer, …
slugstringΤο slug του προσώπου.
imageimageΗ φωτογραφία του προσώπου.
topBilledbooleanΠροβεβλημένη συμμετοχή.
deletedbooleanTrue αν το πρόσωπο αφαιρέθηκε.

Αρχεία γλώσσας

ΠεδίοΤύποςΠεριγραφή
typestringΤύπος εγγραφής.
idnumberId του TheTVDB.
langstringΓλώσσα αυτού του αρχείου.
namestringΌνομα σε αυτή τη γλώσσα.
overviewstringΠεριγραφή σε αυτή τη γλώσσα.
credits{ [personId]: { name, role } }Ανά id προσώπου: το όνομά του σε αυτή τη γλώσσα και ο ρόλος του.
seasons{ [seasonId]: { name, overview } }Ανά id σεζόν: το όνομα και η περιγραφή της.
episodes{ [episodeId]: { name, overview } }Ανά id επεισοδίου: το όνομα και η περιγραφή του.

Παράδειγμα

{
  "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…" } }
}

Εύρεση τίτλου από το slug του

Τα URL σειρών και ταινιών χρησιμοποιούν slug (breaking-bad). Το ευρετήριο slug αντιστοιχίζει κάθε slug στο id του και είναι χωρισμένο σε 256 μικρά αρχεία: το αρχείο ενός slug ονομάζεται από τους δύο πρώτους δεκαεξαδικούς χαρακτήρες του SHA-1 του slug.

// 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())