Evaluări pentru filme și TV
GET /3/movie/{movie_id}/ratings și GET /3/tv/{tv_id}/ratings întorc scorurile IMDb, Kinopoisk, Metacritic, Rotten Tomatoes și TMDB. Fiecare sursă este un obiect cu value și votes, sau null când este necunoscută. IMDb, Kinopoisk și TMDB sunt din 10, celelalte două din 100. Adaugă append_to_response=ratings ca să le îmbini în detalii.
Obține evaluările unui film
GET / întoarce scorurile pe care le publică sursele de evaluări pentru un film. Răspunsul are id-ul filmului și cinci chei de sursă: imdb, kinopoisk, metacritic, rotten_tomatoes și tmdb. Fiecare cheie de sursă conține un obiect cu value și votes, sau null când acea sursă nu este cunoscută pentru titlu.
Exemplul încarcă Fight Club (ID 550) și afișează fiecare sursă, marcând sursele necunoscute.
curl -sf "https://api.amodb.dev/3/movie/550/ratings" \
-H "Authorization: Bearer $AMODB_KEY"const res = await fetch('https://api.amodb.dev/3/movie/550/ratings', {
headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` },
});
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const ratings = await res.json();
for (const source of ['imdb', 'kinopoisk', 'metacritic', 'rotten_tomatoes', 'tmdb']) {
const score = ratings[source];
console.log(source, score ? `${score.value} (votes: ${score.votes ?? 'unknown'})` : 'not known');
}import os
import requests
r = requests.get(
"https://api.amodb.dev/3/movie/550/ratings",
headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
timeout=10,
)
r.raise_for_status()
ratings = r.json()
for source in ("imdb", "kinopoisk", "metacritic", "rotten_tomatoes", "tmdb"):
score = ratings[source]
if score is None:
print(source, "not known")
else:
print(source, score["value"], "votes:", score["votes"] or "unknown")<?php
$ch = curl_init('https://api.amodb.dev/3/movie/550/ratings');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AMODB_KEY')],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
throw new RuntimeException("amodb returned $status");
}
$ratings = json_decode($body, true);
foreach (['imdb', 'kinopoisk', 'metacritic', 'rotten_tomatoes', 'tmdb'] as $source) {
$score = $ratings[$source];
echo $source, ' ', $score === null ? 'not known' : $score['value'] . ' votes: ' . ($score['votes'] ?? 'unknown'), PHP_EOL;
}package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
type Score struct {
Value float64 `json:"value"`
Votes *int `json:"votes"`
}
type Ratings struct {
IMDb *Score `json:"imdb"`
Kinopoisk *Score `json:"kinopoisk"`
Metacritic *Score `json:"metacritic"`
RottenTomatoes *Score `json:"rotten_tomatoes"`
TMDB *Score `json:"tmdb"`
}
func show(name string, s *Score) {
if s == nil {
fmt.Println(name, "not known")
return
}
if s.Votes == nil {
fmt.Println(name, s.Value, "votes: unknown")
return
}
fmt.Println(name, s.Value, "votes:", *s.Votes)
}
func main() {
req, _ := http.NewRequest("GET", "https://api.amodb.dev/3/movie/550/ratings", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
client := &http.Client{Timeout: 10 * time.Second}
res, err := client.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
panic(res.Status)
}
var r Ratings
if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
panic(err)
}
show("imdb", r.IMDb)
show("kinopoisk", r.Kinopoisk)
show("metacritic", r.Metacritic)
show("rotten_tomatoes", r.RottenTomatoes)
show("tmdb", r.TMDB)
}Parametri
movie_idcaleobligatoriuID numeric de film, de exemplu550.api_keyinterogareuna dintre cele douăCheia ta. Folosește-o pe aceasta sau antetulAuthorization: Bearer.
Câmpurile răspunsului
| Câmp | Tip | Observații |
|---|---|---|
id | număr întreg | ID-ul filmului. Lipsește când folosești append_to_response. |
imdb | obiect sau null | Scorul IMDb, din 10, cu o zecimală. |
kinopoisk | obiect sau null | Scorul Kinopoisk, din 10, cu o zecimală. |
metacritic | obiect sau null | Scorul Metacritic, din 100, ca număr întreg. |
rotten_tomatoes | obiect sau null | Scorul Rotten Tomatoes, din 100, ca număr întreg. |
tmdb | obiect sau null | Scorul utilizatorilor TMDB, din 10, cu până la trei zecimale. |
value | număr | În interiorul fiecărui obiect de sursă. Scorul pe scala proprie a sursei. |
votes | număr întreg sau null | În interiorul fiecărui obiect de sursă. Numărul de voturi din spatele scorului sau null când nu se cunoaște. |
Citește cele cinci chei de sursă după nume și sari peste orice altă cheie. Cheile de sursă vin mereu în aceeași ordine: imdb, kinopoisk, metacritic, rotten_tomatoes, tmdb.
Exemplu de răspuns
{
"id": 550,
"imdb": { "value": 8.8, "votes": 2669989 },
"kinopoisk": { "value": 8.7, "votes": null },
"metacritic": { "value": 67, "votes": null },
"rotten_tomatoes": { "value": 81, "votes": null },
"tmdb": { "value": 8.437, "votes": 33039 }
}Doar IMDb și TMDB vin aici cu număr de voturi. Kinopoisk, Metacritic și Rotten Tomatoes au un scor și un număr de voturi null.
Obține evaluările unui serial TV
GET / are aceleași chei și aceleași reguli pentru null. Transmite ID-ul serialului, de exemplu 1396 pentru Breaking Bad.
| Metodă și cale | Întoarce | Parametri |
|---|---|---|
GET / | id și cinci surse | movie_id |
GET / | id și cinci surse | tv_id |
curl -sf "https://api.amodb.dev/3/tv/1396/ratings" -H "Authorization: Bearer $AMODB_KEY"Breaking Bad nu are scor Metacritic, deci acea sursă este null:
{
"id": 1396,
"imdb": { "value": 9.5, "votes": 2671962 },
"kinopoisk": { "value": 8.9, "votes": null },
"metacritic": null,
"rotten_tomatoes": { "value": 96, "votes": null },
"tmdb": { "value": 9, "votes": 18863 }
}Adaugă evaluările la un apel de detalii
append_ funcționează la detaliile de film și de TV. Obiectul sosește sub cheia ratings, lângă câmpurile obișnuite, fără propriul id. O pagină de listă are nevoie de o cerere pe titlu în loc de două.
| Cerere | Unde apar scorurile |
|---|---|
/ | ratings în fișa filmului |
/ | ratings și credits în fișa serialului |
Vezi detalii film și seriale TV pentru celelalte valori pe care le poți atașa.
Surse și valori null
O sursă null nu este un scor zero. Înseamnă că scorul lipsește pentru titlu.
| Cheie | Sursă | Scală | Eticheta de afișat |
|---|---|---|---|
imdb | IMDb | 0 până la 10 | IMDb |
kinopoisk | Kinopoisk | 0 până la 10 | Kinopoisk |
metacritic | Metacritic | 0 până la 100 | Metacritic |
rotten_tomatoes | Rotten Tomatoes | 0 până la 100 | Rotten Tomatoes |
tmdb | TMDB | 0 până la 10 | TMDB |
Acoperirea variază după titlu, deci scrie codul pentru null, nu pentru o listă fixă de surse. Oricare dintre cele cinci chei poate fi null pentru orice titlu.
Cum diferă evaluările de vote_average
Câmpurile vote_average și vote_count din fișa unui film sau serial sunt scorul utilizatorilor TMDB. Cheia tmdb poartă același scor în aceeași structură ca celelalte patru, deci un singur apel îți dă toate cele cinci surse într-un singur format.
Fiecare sursă are publicul și scala ei. Nu le face media și nu compara o valoare dintr-o sursă cu numărul de voturi din alta.
Arată evaluările într-o aplicație
Afișează doar sursele prezente. O listă scurtă de insigne ajunge pentru un card. Adaugă scala, ca un cititor să poată deosebi 8.8 din 10 de 67 din 100.
const labels = {
imdb: ['IMDb', 10],
kinopoisk: ['Kinopoisk', 10],
metacritic: ['Metacritic', 100],
rotten_tomatoes: ['Rotten Tomatoes', 100],
tmdb: ['TMDB', 10],
};
function badges(ratings) {
return Object.entries(labels)
.filter(([key]) => ratings[key])
.map(([key, [label, max]]) => `${label} ${ratings[key].value}/${max}`);
}Arată eticheta la fiecare valoare. Când toate cele cinci sunt null, ascunde blocul în loc să arăți insigne goale.
Erori
Eșecurile păstrează corpul de eroare TMDB, în care success este false, iar status_code numește problema. Un titlu fără scoruri nu este una dintre ele.
| HTTP | status_code | Când |
|---|---|---|
| 401 | 7 | Cheia lipsește sau este greșită. |
| 402 | 36 | Perioada planului s-a încheiat. |
| 404 | 34 | Niciun film sau serial cu acel ID. |
| 429 | 25 | Ai depășit cererile pe minut. Așteaptă numărul de secunde din Retry-After. |
Un scor necunoscut este null, nu o eroare. Detaliile sunt la erori și limite de cereri.
Note practice
- Evaluările sunt ținute în cache la margine 6 ore, ca detaliile. O reîmprospătare mai deasă întoarce același corp.
- O cerere cu
append_se numără ca o singură cerere din cele 20, 40 sau 120 pe minut.to_ response= ratings - Stochează scorurile împreună cu data la care le-ai preluat. Voturile cresc în timp, iar cifrele se mișcă.
- Ca să mapezi mai întâi un ID IMDb sau Kinopoisk la un titlu, folosește căutare după ID extern. Pentru senzații în loc de scoruri, vezi atmosfere.