API credite
Endpoint-urile de credite întorc distribuția și echipa unui film la GET /3/movie/{movie_id}/credits, precum și ale serialelor, sezoanelor și episoadelor sub /3/tv. JSON-ul se potrivește cu TMDB v3, inclusiv credit_id, order, department și job. Creditele de episod adaugă un array guest_stars lângă crew, iar array-ul lor cast este gol.
Obține creditele unui film
GET / întoarce două array-uri pentru un film: cast pentru persoanele care apar pe ecran și crew pentru cele care au lucrat în spatele camerei. Fiecare intrare conține ID-ul persoanei, deci poți deschide fișa completă pe pagina persoane. Aceleași date sunt disponibile în răspunsul filmului cu append_.
Exemplul citește Inception, afișează regizorul și listează primii cinci actori de pe generic.
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)
}
}Parametri
movie_idcaleobligatoriuID numeric de film, de exemplu27205.api_keyinterogareuna dintre cele douăCheia ta. Folosește-o pe aceasta sau antetulAuthorization: Bearer.languageinterogareEtichetă TMDB precumen-USsaufr-FR. Etichetele din afara celor 14 limbi de bază revin laen.
Câmpurile răspunsului
| Câmp | Se aplică la | Observații |
|---|---|---|
id | nivelul superior | ID-ul filmului, serialului, sezonului sau episodului cărora le aparțin creditele. |
cast, crew | nivelul superior | Array-uri de intrări. Creditele de episod adaugă guest_stars. |
id | fiecare intrare | ID-ul persoanei. Deschide-l cu persoane. |
name, original_name | fiecare intrare | Numele persoanei. |
known_for_department | fiecare intrare | Meseria principală a persoanei în general, nu meseria din acest titlu. |
gender, popularity, adult | fiecare intrare | Aceeași semnificație ca în fișa persoanei. |
profile_path | fiecare intrare | Calea imaginii sau null. Se adaugă la https:/. |
credit_id | fiecare intrare | Șir care identifică acest singur credit. |
character | distribuție, actori invitați | Numele rolului, gol la unele intrări. |
order | distribuție, actori invitați | Poziția pe generic, 0 este prima. |
department | echipă | Grup precum Directing, Writing, Production, Camera, Editing, Sound, Art, Visual Effects, Lighting, Costume & Make-Up sau Crew. |
job | echipă | Meserie specifică, de exemplu Director, Screenplay sau Editor. |
Exemplu de răspuns
GET /. Răspunsul are azi 52 de intrări în distribuție și 735 în echipă, deci ambele array-uri sunt tăiate aici la două:
{
"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"
}
]
}Credite pentru TV, sezon și episod
Toate căile de mai jos au baza https:/ și primesc language.
| Metodă și cale | Întoarce |
|---|---|
GET / | Distribuția și echipa serialului, o intrare pe persoană și rol. |
GET / | Distribuția și echipa unui sezon. |
GET / | crew și guest_stars pentru un episod. cast este un array gol. |
Aceleași date sunt disponibile cu append_ pe căile de serial, sezon și episod. Structura intrărilor se potrivește cu creditele de film de mai sus. Actorii invitați ai unui episod poartă character și order, iar intrările din echipă poartă department și job.
GET /, cu array-urile tăiate la două intrări:
{
"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 nu oferă credite TV agregate sau căutare după credit_id. Pentru lista distribuției unui serial, citește / și sortează cast după order.
Citirea distribuției și a echipei într-o aplicație
| Sarcină | Cum |
|---|---|
| Arată regizorul | Alege intrările crew cu job egal cu Director. Un film poate avea mai mulți. |
| Arată distribuția principală | Sortează cast după order și ia primii 10. |
| Grupează echipa | Grupează după department. O persoană cu două meserii apare de două ori, deci îmbină după id-ul persoanei. |
| Arată distribuția unui serial | Citește creditele serialului și sortează cast după order. |
| Listează toate departamentele și meseriile | Citește lista de referință descrisă la genuri și liste de referință. |
Erori
| HTTP | status_code | Când |
|---|---|---|
| 401 | 7 | Cheia lipsește sau este greșită. |
| 402 | 36 | Perioada planului s-a încheiat. |
| 404 | 34 | Filmul, serialul, sezonul sau episodul nu există sau calea nu este oferită. |
| 405 | 37 | Ai apelat o metodă de scriere. |
| 429 | 25 | Ai depășit cererile pe minut. Așteaptă numărul de secunde din Retry-After. |
Detaliile sunt la erori și limite de cereri.
Note practice
- Creditele sunt ținute în cache 6 ore, ca detaliile. Un nou membru al distribuției poate dura atât să apară.
- O producție mare poate lista sute de intrări în echipă. Taie array-urile înainte să le afișezi.
profile_patheste null pentru persoanele fără fotografie. Foloseștew185pentru rândurile din liste șih632pentru vizualizările de detalii.- Fișele de film și de serial sunt la filme și seriale TV. Fișele de sezon și de episod sunt la sezoane și episoade.