Watch It? Track It.

Το base.json μιας ταινίας περιέχει τα δεδομένα της που δεν εξαρτώνται από τη γλώσσα και τους συντελεστές· τα ονόματα και οι περιγραφές της βρίσκονται στα αρχεία γλώσσας.

Αρχεία

  • 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

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

base.json

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

Παράδειγμα

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

Συντελεστές

Κάθε στοιχείο στα 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 προσώπου: το όνομά του σε αυτή τη γλώσσα και ο ρόλος του.

Παράδειγμα

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

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

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