API акторського складу та знімальної групи

Ендпоінти credits повертають акторський склад і знімальну групу фільму за GET /3/movie/{movie_id}/credits, а також серіалів, сезонів і серій у /3/tv. JSON збігається з TMDB v3, зокрема credit_id, order, department і job. Credits серії додають масив guest_stars поруч із crew, а їхній масив cast порожній.

Оновлено Відкрити в Markdown

Credits фільму

GET /3/movie/{movie_id}/credits повертає для одного фільму два масиви: cast для людей, які з'являються на екрані, і crew для тих, хто працював за кадром. Кожен запис містить id персони, тож повний запис можна відкрити на сторінці персони. Ті самі дані доступні у відповіді про фільм через append_to_response=credits.

Приклад читає Inception, виводить режисера і перелічує п'ятьох акторів, названих у титрах першими.

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)
	}
}

Параметри

  • movie_idшляхобов'язковий
    Числовий id фільму, наприклад 27205.
  • api_keyqueryодне з двох
    Ваш ключ. Використовуйте його або заголовок Authorization: Bearer.
  • languagequery
    Тег TMDB, наприклад en-US або fr-FR. Теги поза 14 базовими мовами відкочуються на en.

Поля відповіді

ПолеДе застосовуєтьсяПримітки
idверхній рівеньid фільму, серіалу, сезону чи серії, до яких належать credits.
cast, crewверхній рівеньМасиви записів. Credits серії додають guest_stars.
idкожен записid персони. Відкрийте його через персони.
name, original_nameкожен записІм'я людини.
known_for_departmentкожен записОсновна професія людини загалом, а не робота в цьому проєкті.
gender, popularity, adultкожен записЗначення те саме, що й у записі персони.
profile_pathкожен записШлях до зображення або null. Додайте до https://img.amodb.dev/t/p/{size}.
credit_idкожен записРядок, що ідентифікує цю окрему участь.
characterактори, запрошені зіркиНазва ролі, у деяких записів порожня.
orderактори, запрошені зіркиПозиція в титрах, 0 означає першого.
departmentзнімальна групаГрупа, наприклад Directing, Writing, Production, Camera, Editing, Sound, Art, Visual Effects, Lighting, Costume & Make-Up або Crew.
jobзнімальна групаКонкретна посада, наприклад Director, Screenplay або Editor.

Приклад відповіді

GET /3/movie/27205/credits?language=en-US. Нині відповідь містить 52 записи cast і 735 записів crew, тому обидва масиви тут скорочено до двох:

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

Credits серіалів, сезонів і серій

Усі шляхи нижче мають спільну основу https://api.amodb.dev/3 і приймають language.

Метод і шляхЩо повертає
GET /tv/{series_id}/creditsАкторський склад і знімальна група серіалу, один запис на людину та роль.
GET /tv/{series_id}/season/{season_number}/creditsАкторський склад і знімальна група одного сезону.
GET /tv/{series_id}/season/{season_number}/episode/{episode_number}/creditscrew і guest_stars однієї серії. cast це порожній масив.

Ті самі дані доступні через append_to_response=credits на шляхах серіалу, сезону та серії. Структура запису збігається з credits фільму вище. Запрошені зірки серії мають character і order, а записи crew мають department і job.

GET /3/tv/1399/season/1/episode/1/credits?language=en-US, масиви скорочено до двох записів:

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 не надає зведених credits для серіалів і пошуку за credit_id. Щоб отримати акторський склад серіалу, прочитайте /tv/{series_id}/credits і відсортуйте cast за order.

Як читати акторів і знімальну групу в застосунку

ЗавданняЯк
Показати режисераВиберіть записи crew, де job дорівнює Director. У фільму їх може бути кілька.
Показати головних акторівВідсортуйте cast за order і візьміть перші 10.
Згрупувати знімальну групуЗгрупуйте за department. Людина з двома посадами з'являється двічі, тож об'єднуйте за id персони.
Показати акторів серіалуПрочитайте credits серіалу й відсортуйте cast за order.
Перелічити всі відділи та посадиПрочитайте довідковий список, описаний на сторінці жанри та довідкові списки.

Помилки

HTTPstatus_codeКоли
4017Ключ відсутній або неправильний.
40236Термін дії тарифу закінчився.
40434Фільму, серіалу, сезону чи серії не існує, або такий шлях не надається.
40537Ви викликали метод запису.
42925Перевищено ліміт запитів на хвилину. Зачекайте стільки секунд, скільки вказано в Retry-After.

Подробиці дивіться на сторінках помилки та ліміти запитів.

Практичні поради

  • Credits кешуються на 6 годин, як і деталі. Новий актор може з'явитися лише через цей час.
  • Велика постановка може містити сотні записів crew. Обрізайте масиви, перш ніж виводити їх.
  • profile_path дорівнює null для людей без фото. Використовуйте w185 для рядків списку і h632 для детальних сторінок.
  • Записи фільмів і серіалів описані на сторінках фільми та серіали. Записи сезонів і серій є на сторінці сезони та серії.