API obsady i ekipy

Endpointy credits zwracają obsadę i ekipę filmu pod GET /3/movie/{movie_id}/credits oraz seriali, sezonów i odcinków pod /3/tv. JSON odpowiada TMDB v3, w tym credit_id, order, department i job. Obsada odcinków dodaje obok crew tablicę guest_stars, a ich tablica cast jest pusta.

Zaktualizowano Zobacz jako Markdown

Pobieranie obsady i ekipy filmu

GET /3/movie/{movie_id}/credits zwraca dla jednego filmu dwie tablice: cast dla osób widocznych na ekranie i crew dla osób pracujących za kamerą. Każda pozycja zawiera ID osoby, więc pełny rekord otworzysz na stronie osoby. Te same dane są dostępne w odpowiedzi filmu z append_to_response=credits.

Przykład odczytuje Inception, wypisuje reżysera i pięciu pierwszych aktorów z czołówki.

bashjspyphpgo
curl -sSf "https://api.amodb.dev/3/movie/27205/credits?language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"
const url = 'https://api.amodb.dev/3/movie/27205/credits?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 credits = await res.json();
const director = credits.crew.find((c) => c.job === 'Director');
console.log('Director:', director?.name);
for (const c of [...credits.cast].sort((a, b) => a.order - b.order).slice(0, 5)) {
  console.log(c.order, c.name, 'as', c.character);
}
import os
import requests

r = requests.get(
    "https://api.amodb.dev/3/movie/27205/credits",
    params={"language": "en-US"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
r.raise_for_status()
credits = r.json()
director = next((c for c in credits["crew"] if c["job"] == "Director"), None)
print("Director:", director and director["name"])
for c in sorted(credits["cast"], key=lambda c: c["order"])[:5]:
    print(c["order"], c["name"], "as", c["character"])
<?php
$url = 'https://api.amodb.dev/3/movie/27205/credits?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");
}
$credits = json_decode($body, true);
usort($credits['cast'], fn ($a, $b) => $a['order'] <=> $b['order']);
foreach (array_slice($credits['cast'], 0, 5) as $c) {
    echo $c['order'], ' ', $c['name'], ' as ', $c['character'], PHP_EOL;
}
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"
	"time"
)

type Credits struct {
	Cast []struct {
		Order     int    `json:"order"`
		Name      string `json:"name"`
		Character string `json:"character"`
	} `json:"cast"`
	Crew []struct {
		Name string `json:"name"`
		Job  string `json:"job"`
	} `json:"crew"`
}

func main() {
	req, _ := http.NewRequest("GET", "https://api.amodb.dev/3/movie/27205/credits?language=en-US", 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 Credits
	if err := json.NewDecoder(res.Body).Decode(&c); err != nil {
		panic(err)
	}
	for _, m := range c.Crew {
		if m.Job == "Director" {
			fmt.Println("Director:", m.Name)
		}
	}
	for i, a := range c.Cast {
		if i == 5 {
			break
		}
		fmt.Println(a.Order, a.Name, "as", a.Character)
	}
}

Parametry

  • movie_idpathwymagany
    Numeryczne ID filmu, na przykład 27205.
  • api_keyqueryjeden z dwóch
    Twój klucz. Użyj go albo nagłówka Authorization: Bearer.
  • languagequery
    Tag TMDB, na przykład en-US lub fr-FR. Tagi spoza 14 języków bazowych wracają do en.

Pola odpowiedzi

PoleDotyczyUwagi
idnajwyższy poziomID filmu, serialu, sezonu lub odcinka, do którego należy obsada.
cast, crewnajwyższy poziomTablice pozycji. Obsada odcinków dodaje guest_stars.
idkażda pozycjaID osoby. Otwórz je przez osoby.
name, original_namekażda pozycjaImię i nazwisko osoby.
known_for_departmentkażda pozycjaGłówne zajęcie osoby ogółem, a nie funkcja w tym tytule.
gender, popularity, adultkażda pozycjaTakie samo znaczenie jak w rekordzie osoby.
profile_pathkażda pozycjaŚcieżka obrazu lub null. Dołącz do https://img.amodb.dev/t/p/{size}.
credit_idkażda pozycjaCiąg identyfikujący ten jeden wpis.
charactercast, gościnni aktorzyNazwa roli, w niektórych pozycjach pusta.
ordercast, gościnni aktorzyPozycja w czołówce, 0 jest pierwsza.
departmentcrewGrupa taka jak Directing, Writing, Production, Camera, Editing, Sound, Art, Visual Effects, Lighting, Costume & Make-Up lub Crew.
jobcrewKonkretna funkcja, na przykład Director, Screenplay lub Editor.

Przykładowa odpowiedź

GET /3/movie/27205/credits?language=en-US. Odpowiedź ma dziś 52 pozycje cast i 735 pozycji crew, więc obie tablice są tu przycięte do dwóch:

JSON
{
  "id": 27205,
  "cast": [
    {
      "adult": false,
      "gender": 2,
      "id": 6193,
      "known_for_department": "Acting",
      "name": "Leonardo DiCaprio",
      "original_name": "Leonardo DiCaprio",
      "popularity": 9.3213,
      "profile_path": "/wo2hJpn04vbtmh0B9utCFdsQhxM.jpg",
      "character": "Dom Cobb",
      "credit_id": "52fe4534c3a368484e04de03",
      "order": 0
    },
    {
      "adult": false,
      "gender": 2,
      "id": 24045,
      "known_for_department": "Acting",
      "name": "Joseph Gordon-Levitt",
      "original_name": "Joseph Gordon-Levitt",
      "popularity": 5.6202,
      "profile_path": "/z2FA8js799xqtfiFjBTicFYdfk.jpg",
      "character": "Arthur",
      "credit_id": "52fe4534c3a368484e04de0b",
      "order": 1
    }
  ],
  "crew": [
    {
      "adult": false,
      "gender": 2,
      "id": 1025090,
      "known_for_department": "Crew",
      "name": "Jim Wilkey",
      "original_name": "Jim Wilkey",
      "popularity": 0.9114,
      "profile_path": "/peEdS7ZYHwEeMJAwInJj732AeYs.jpg",
      "credit_id": "6634553bad59b501286dab5f",
      "department": "Crew",
      "job": "Stunt Driver"
    },
    {
      "adult": false,
      "gender": 2,
      "id": 1741194,
      "known_for_department": "Sound",
      "name": "James Thatcher",
      "original_name": "James Thatcher",
      "popularity": 0.6215,
      "profile_path": null,
      "credit_id": "5bcdece8925141613e0216d3",
      "department": "Sound",
      "job": "Musician"
    }
  ]
}

Obsada seriali, sezonów i odcinków

Wszystkie poniższe ścieżki mają wspólną bazę https://api.amodb.dev/3 i przyjmują language.

Metoda i ścieżkaZwraca
GET /tv/{series_id}/creditsObsada i ekipa serialu, jedna pozycja na osobę i rolę.
GET /tv/{series_id}/season/{season_number}/creditsObsada i ekipa jednego sezonu.
GET /tv/{series_id}/season/{season_number}/episode/{episode_number}/creditscrew i guest_stars jednego odcinka. cast to pusta tablica.

Te same dane są dostępne z append_to_response=credits na ścieżkach serialu, sezonu i odcinka. Kształt pozycji odpowiada obsadzie filmu powyżej. Gościnni aktorzy odcinków niosą character i order, a pozycje ekipy niosą department i job.

GET /3/tv/1399/season/1/episode/1/credits?language=en-US, tablice przycięte do dwóch pozycji:

JSON
{
  "id": 63056,
  "cast": [],
  "crew": [
    {
      "department": "Writing",
      "job": "Writer",
      "credit_id": "5256c8a019c2956ff6046e2b",
      "adult": false,
      "gender": 2,
      "id": 9813,
      "known_for_department": "Writing",
      "name": "David Benioff",
      "original_name": "David Benioff",
      "popularity": 2.0354,
      "profile_path": "/xvNN5huL0X8yJ7h3IZfGG4O2zBD.jpg"
    },
    {
      "department": "Editing",
      "job": "Editor",
      "credit_id": "54eef2ab925141795f005d4f",
      "adult": false,
      "gender": 2,
      "id": 18077,
      "known_for_department": "Editing",
      "name": "Oral Norrie Ottey",
      "original_name": "Oral Norrie Ottey",
      "popularity": 0,
      "profile_path": null
    }
  ],
  "guest_stars": [
    {
      "character": "Benjen Stark",
      "credit_id": "5256c8b919c2956ff604836a",
      "order": 61,
      "adult": false,
      "gender": 2,
      "id": 119783,
      "known_for_department": "Acting",
      "name": "Joseph Mawle",
      "original_name": "Joseph Mawle",
      "popularity": 1.4645,
      "profile_path": "/1Ocb9v3h54beGVoJMm4w50UQhLf.jpg"
    },
    {
      "character": "Rickon Stark",
      "credit_id": "566a83bcc3a3683f56003604",
      "order": 80,
      "adult": false,
      "gender": 2,
      "id": 1050248,
      "known_for_department": "Acting",
      "name": "Art Parkinson",
      "original_name": "Art Parkinson",
      "popularity": 1.2594,
      "profile_path": "/ejAKOJME1DsvHECLWdQ7dEtXyyc.jpg"
    }
  ]
}

amodb nie udostępnia zbiorczej obsady seriali ani wyszukiwania po credit_id. Listę obsady serialu odczytaj z /tv/{series_id}/credits i posortuj cast według order.

Odczyt obsady i ekipy w aplikacji

ZadanieJak
Pokazać reżyseraWybierz pozycje crew, w których job to Director. Film może mieć kilku.
Pokazać główną obsadęPosortuj cast według order i weź pierwszych 10.
Pogrupować ekipęGrupuj według department. Osoba z dwiema funkcjami pojawia się dwa razy, więc scal po id osoby.
Pokazać obsadę serialuOdczytaj obsadę serialu i posortuj cast według order.
Wypisać wszystkie działy i funkcjeOdczytaj słownik opisany na stronie gatunki i słowniki.

Błędy

HTTPstatus_codeKiedy
4017Brakuje klucza lub jest błędny.
40236Okres planu dobiegł końca.
40434Film, serial, sezon lub odcinek nie istnieje albo ścieżka nie jest udostępniana.
40537Wywołano metodę zapisu.
42925Przekroczono limit żądań na minutę. Poczekaj tyle sekund, ile podaje Retry-After.

Szczegóły są na stronach błędy i limity żądań.

Praktyczne uwagi

  • Obsada i ekipa są w cache przez 6 godzin, tak jak szczegóły. Nowy członek obsady może pojawić się dopiero po tym czasie.
  • Duża produkcja może mieć setki pozycji ekipy. Przytnij tablice przed renderowaniem.
  • profile_path ma wartość null u osób bez zdjęcia. Użyj w185 dla wierszy list i h632 dla widoków szczegółów.
  • Rekordy filmów i seriali są na stronach filmy i seriale. Rekordy sezonów i odcinków są na stronie sezony i odcinki.