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.

Actualizat Vezi ca Markdown

Obține o colecție

GET /3/collection/{collection_id} î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.

bashjspyphpgo
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_idcaleobligatoriu
    ID numeric de colecție, de exemplu 10.
  • api_keyinterogareuna dintre cele două
    Cheia ta. Folosește-o pe aceasta sau antetul Authorization: Bearer.
  • languageinterogare
    Una dintre cele 14 limbi servite, de exemplu en-US sau fr-FR. Setează limba titlului și a descrierii fiecărei părți. Implicit en-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âmpTipObservații
idnumăr întregID-ul colecției.
nameșirNumele francizei.
overviewșirDescriere scurtă. Goală la unele colecții.
poster_path, backdrop_pathșir sau nullSe adaugă la https://img.amodb.dev/t/p/{size}. Vezi imagini.
partsarrayRezumate de filme, cu cel mai vechi release_date primul.
parts[].idnumăr întregID-ul filmului. Transmite-l la detalii film.
parts[].title, parts[].original_titleșirTitlul localizat și cel original.
parts[].overviewșirSinopsis localizat.
parts[].release_dateșirYYYY-MM-DD sau un șir gol pentru un film fără dată. Acele părți vin la sfârșit.
parts[].media_typeșirMereu movie într-o colecție.
parts[].genre_idsarrayID-uri numerice. Numele vin de la genuri.
parts[].adult, parts[].videobooleanadult este mereu false, pentru că titlurile pentru adulți nu sunt servite.
parts[].original_languageșirCod de limbă din două litere.
parts[].popularitynumărScor de popularitate.
parts[].poster_path, parts[].backdrop_pathșir sau nullImaginile filmului.
parts[].vote_average, parts[].vote_countnumăr, număr întregScor agregat al utilizatorilor.

Exemplu de răspuns

Sunt arătate două dintre cele nouă părți.

JSON
{
  "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.

JSON
{
  "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.

JavaScript
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 /collection/{collection_id}/images și /collection/{collection_id}/translations, 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 /3/search/collection?query=matrix, descris la căutare. Fiecare rezultat are id, name, overview, poster_path, backdrop_path, original_language, original_name și adult.

Erori

HTTPstatus_codeCând
4017Cheia lipsește sau este greșită.
40236Perioada planului s-a încheiat.
40434Nu există o colecție cu acel ID sau ID-ul nu este un număr.
40537Ai folosit o metodă de scriere pe o cale de colecție.
42925Ai 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[].id drept cheie pentru un film, nu poziția lui în franciză. Ordinile și datele se corectează în timp.
  • Verifică dacă name este în limba ta de afișare înainte să-l arăți. Unele colecții au un nume în altă limbă, iar language nu îl schimbă.