API colecții
O colecție grupează filmele unei francize, precum o trilogie sau o serie lungă de filme. GET /3/collection/{collection_id} întoarce numele, descrierea, imaginile și un array parts cu filmele în ordinea lansării. Filmele trimit înapoi la colecția lor prin belongs_to_collection, deci poți merge în ambele direcții.
Obține o colecție
GET / întoarce o franciză: numele, o descriere, un poster, o imagine de fundal și array-ul parts. Fiecare parte este un rezumat de film cu câmpurile de care ai nevoie pentru un card, deci un singur apel poate desena un raft întreg de franciză.
Exemplul încarcă colecția 10, filmele Star Wars, și își afișează filmele în ordinea lansării.
curl -s "https://api.amodb.dev/3/collection/10?language=en-US" \
-H "Authorization: Bearer $AMODB_KEY"const url = 'https://api.amodb.dev/3/collection/10?language=en-US';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const collection = await res.json();
console.log(collection.name);
for (const p of collection.parts) console.log(p.release_date || 'not dated', p.title);import os
import requests
r = requests.get(
"https://api.amodb.dev/3/collection/10",
params={"language": "en-US"},
headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
timeout=10,
)
r.raise_for_status()
collection = r.json()
print(collection["name"])
for p in collection["parts"]:
print(p.get("release_date") or "not dated", p["title"])<?php
$url = 'https://api.amodb.dev/3/collection/10?language=en-US';
$ch = curl_init($url);
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");
}
$collection = json_decode($body, true);
echo $collection['name'], PHP_EOL;
foreach ($collection['parts'] as $p) {
echo $p['release_date'] ?: 'not dated', ' ', $p['title'], PHP_EOL;
}package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
type Collection struct {
Name string `json:"name"`
Parts []struct {
Title string `json:"title"`
ReleaseDate string `json:"release_date"`
} `json:"parts"`
}
func main() {
url := "https://api.amodb.dev/3/collection/10?language=en-US"
req, _ := http.NewRequest("GET", url, 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 c Collection
if err := json.NewDecoder(res.Body).Decode(&c); err != nil {
panic(err)
}
fmt.Println(c.Name)
for _, p := range c.Parts {
date := p.ReleaseDate
if date == "" {
date = "not dated"
}
fmt.Println(date, p.Title)
}
}Parametri
collection_idcaleobligatoriuID numeric de colecție, de exemplu10.api_keyinterogareuna dintre cele douăCheia ta. Folosește-o pe aceasta sau antetulAuthorization: Bearer.languageinterogareUna dintre cele 14 limbi servite, de exempluen-USsaufr-FR. Setează limba titlului și a descrierii fiecărei părți. Impliciten-US.
name și overview ale colecției vin așa cum sunt stocate și nu se schimbă cu language. La unele colecții nu sunt în engleză.
Câmpurile răspunsului
| Câmp | Tip | Observații |
|---|---|---|
id | număr întreg | ID-ul colecției. |
name | șir | Numele francizei. |
overview | șir | Descriere scurtă. Goală la unele colecții. |
poster_path, backdrop_path | șir sau null | Se adaugă la https:/. Vezi imagini. |
parts | array | Rezumate de filme, cu cel mai vechi release_date primul. |
parts[].id | număr întreg | ID-ul filmului. Transmite-l la detalii film. |
parts[].title, parts[].original_title | șir | Titlul localizat și cel original. |
parts[].overview | șir | Sinopsis localizat. |
parts[].release_date | șir | YYYY-MM-DD sau un șir gol pentru un film fără dată. Acele părți vin la sfârșit. |
parts[].media_type | șir | Mereu movie într-o colecție. |
parts[].genre_ids | array | ID-uri numerice. Numele vin de la genuri. |
parts[].adult, parts[].video | boolean | adult este mereu false, pentru că titlurile pentru adulți nu sunt servite. |
parts[].original_ | șir | Cod de limbă din două litere. |
parts[].popularity | număr | Scor de popularitate. |
parts[].poster_path, parts[].backdrop_path | șir sau null | Imaginile filmului. |
parts[].vote_average, parts[].vote_count | număr, număr întreg | Scor agregat al utilizatorilor. |
Exemplu de răspuns
Sunt arătate două dintre cele nouă părți.
{
"id": 10,
"name": "Star Wars Collection",
"overview": "An epic space-opera theatrical film series, which depicts the adventures of various cha...",
"poster_path": "/pWVLFh4OuejTpUaDQbB1C4zoS2p.jpg",
"backdrop_path": "/iY2ujEY2m68OTTlPFTiHub9joHS.jpg",
"parts": [
{
"adult": false,
"backdrop_path": "/zqkmTXzjkAgXmEWLRsY4UpTWCeo.jpg",
"genre_ids": [12, 28, 878],
"id": 11,
"original_language": "en",
"original_title": "Star Wars",
"overview": "Princess Leia is captured and held hostage by the evil Imperial forces in their effort...",
"popularity": 70.481,
"poster_path": "/fai0rspsNeJCS69wHNjOdWxcI7P.jpg",
"release_date": "1977-05-25",
"title": "Star Wars",
"video": false,
"vote_average": 8.207,
"vote_count": 23025,
"media_type": "movie"
},
{
"adult": false,
"backdrop_path": "/k9pshruhCpJAdH9RaGJO6jaWQ4X.jpg",
"genre_ids": [12, 28, 878],
"id": 1891,
"original_language": "en",
"original_title": "The Empire Strikes Back",
"overview": "The epic saga continues as Luke Skywalker, in hopes of defeating the evil Galactic Empi...",
"popularity": 29.9034,
"poster_path": "/nNAeTmF4CtdSgMDplXTDPOpYzsX.jpg",
"release_date": "1980-05-20",
"title": "The Empire Strikes Back",
"video": false,
"vote_average": 8.393,
"vote_count": 18990,
"media_type": "movie"
}
]
}Șirurile lungi sunt tăiate cu ... pe această pagină. Răspunsul real conține textul complet.
Găsește colecția unui film
Rareori pornești de la un ID de colecție. Pornești de la un film, iar fișa de detalii film îți spune cărei colecții aparține. Câmpul belongs_to_collection este un obiect cu id, name, poster_path și backdrop_path. Este null pentru un film care nu face parte dintr-o franciză, precum filmul 550.
{
"id": 11,
"title": "Star Wars",
"belongs_to_collection": {
"id": 10,
"name": "Star Wars Collection",
"poster_path": "/pWVLFh4OuejTpUaDQbB1C4zoS2p.jpg",
"backdrop_path": "/iY2ujEY2m68OTTlPFTiHub9joHS.jpg"
}
}Exemplul de mai jos urmează acea legătură de la un film la franciza lui în două cereri.
const base = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };
async function getJson(path) {
const res = await fetch(`${base}${path}`, { headers });
if (!res.ok) throw new Error(`${path} returned ${res.status}`);
return res.json();
}
const movie = await getJson('/movie/11');
if (movie.belongs_to_collection) {
const collection = await getJson(`/collection/${movie.belongs_to_collection.id}`);
console.log(movie.title, 'is one of', collection.parts.length, 'films in', collection.name);
}Imagini și căutare
Posterul și imaginea de fundal ale unei francize sunt câmpurile poster_path și backdrop_path din fișa colecției. Construiește adresa fișierului din ele, după cum este descris la imagini. amodb nu oferă căile / și /, deci o colecție nu are listă de postere alternative și nici rânduri pe limbi. Titlurile părților urmează în schimb parametrul language, iar traduceri acoperă căile care întorc rânduri pe limbi.
Ca să găsești o colecție după nume, folosește GET /, descris la căutare. Fiecare rezultat are id, name, overview, poster_path, backdrop_path, original_language, original_name și adult.
Erori
| HTTP | status_code | Când |
|---|---|---|
| 401 | 7 | Cheia lipsește sau este greșită. |
| 402 | 36 | Perioada planului s-a încheiat. |
| 404 | 34 | Nu există o colecție cu acel ID sau ID-ul nu este un număr. |
| 405 | 37 | Ai folosit o metodă de scriere pe o cale de colecție. |
| 429 | 25 | Ai depășit cererile pe minut. Așteaptă numărul de secunde din Retry-After. |
Vezi erori pentru lista completă și limite de cereri pentru limitele planurilor.
Note practice
- Colecțiile grupează doar filme. Un film are cel mult un obiect
belongs_to_collection, deci un film corespunde unei singure francize. - Părțile sosesc în ordinea lansării. Filmele cu dată goală vin la sfârșit, deci etichetează-le ca încă nedatate.
- Fișa colecției este ținută în cache la margine 6 ore, ca alte detalii, deci o pagină de franciză poate reutiliza un singur răspuns atât timp.
- O parte poartă doar câmpuri de rezumat. Preia durata, creditele și evaluările fiecărui film prin detalii film când utilizatorul îl deschide.
- Folosește
parts[].iddrept cheie pentru un film, nu poziția lui în franciză. Ordinile și datele se corectează în timp. - Verifică dacă
nameeste în limba ta de afișare înainte să-l arăți. Unele colecții au un nume în altă limbă, iarlanguagenu îl schimbă.