Căutare după ID extern
GET /3/find/{external_id} transformă un ID IMDb, TVDB, Wikidata, Kinopoisk, Facebook, Twitter sau Instagram în rezultate în stil TMDB, iar endpoint-urile external_ids merg în sens invers. Un endpoint Wikidata adaugă buget, încasări, premii și titluri legate pentru un film sau serial. Toate folosesc cheia ta obișnuită.
Găsește un titlu după ID extern
GET / primește un ID dintr-un alt sistem și întoarce înregistrările care se potrivesc. Calea conține ID-ul, iar parametrul de interogare external_source spune din ce sistem provine. amodb acceptă douăsprezece surse, iar șapte dintre ele se rezolvă în înregistrări: imdb_id, tvdb_id, wikidata_id, kinopoisk_id, facebook_id, twitter_id și instagram_id.
Exemplul mapează ID-ul IMDb tt0137523 la un ID TMDB.
curl -sf "https://api.amodb.dev/3/find/tt0137523?external_source=imdb_id" \
-H "Authorization: Bearer $AMODB_KEY"const url = 'https://api.amodb.dev/3/find/tt0137523?external_source=imdb_id';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const found = await res.json();
const movie = found.movie_results[0];
console.log(movie ? `${movie.id} ${movie.title}` : 'no match');import os
import requests
r = requests.get(
"https://api.amodb.dev/3/find/tt0137523",
params={"external_source": "imdb_id"},
headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
timeout=10,
)
r.raise_for_status()
results = r.json()["movie_results"]
print(f"{results[0]['id']} {results[0]['title']}" if results else "no match")<?php
$url = 'https://api.amodb.dev/3/find/tt0137523?external_source=imdb_id';
$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");
}
$movies = json_decode($body, true)['movie_results'];
echo $movies ? $movies[0]['id'] . ' ' . $movies[0]['title'] : 'no match', PHP_EOL;package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
type Found struct {
MovieResults []struct {
ID int `json:"id"`
Title string `json:"title"`
} `json:"movie_results"`
}
func main() {
url := "https://api.amodb.dev/3/find/tt0137523?external_source=imdb_id"
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 f Found
if err := json.NewDecoder(res.Body).Decode(&f); err != nil {
panic(err)
}
if len(f.MovieResults) == 0 {
fmt.Println("no match")
return
}
fmt.Println(f.MovieResults[0].ID, f.MovieResults[0].Title)
}Parametri
external_idcaleobligatoriuID-ul din celălalt sistem, de exemplutt0137523.external_sourceinterogareobligatoriuUna dintreimdb_id,tvdb_id,wikidata_id,kinopoisk_id,facebook_id,twitter_id,instagram_id. Alte cinci sunt acceptate și nu întorc nimic:freebase_mid,freebase_id,tvrage_id,tiktok_id,youtube_id.languageinterogareUna dintre cele 14 limbi, precumensauru-RU. Alte valori revin laen.api_keyinterogareuna dintre cele douăCheia ta. Folosește-o pe aceasta sau antetulAuthorization: Bearer.
Un external_source lipsă, sau unul care nu este în listă, răspunde 400 cu status_code 22. Valoarea trebuie să fie cu litere mici.
Câmpurile răspunsului
| Câmp | Tip | Observații |
|---|---|---|
movie_results | array | Înregistrări de filme cu aceleași câmpuri ca un rezultat de căutare, plus media_type setat la movie. |
person_results | array | Persoane potrivite după ID. Fiecare are known_for ca array gol și media_type setat la person. |
tv_results | array | Înregistrări de seriale TV cu media_type setat la tv. |
tv_episode_results | array | Mereu gol. |
tv_season_results | array | Mereu gol. |
Exemplu de răspuns
{
"movie_results": [
{
"adult": false,
"backdrop_path": "/c6OLXfKAk5BKeR6broC8pYiCquX.jpg",
"genre_ids": [18, 53],
"id": 550,
"original_language": "en",
"original_title": "Fight Club",
"overview": "A ticking-time-bomb insomniac and a slippery soap salesman channel primal male aggression into a shocking n...",
"popularity": 39.0054,
"poster_path": "/jSziioSwPVrOy9Yow3XhWIBDjq1.jpg",
"release_date": "1999-10-15",
"title": "Fight Club",
"video": false,
"vote_average": 8.437,
"vote_count": 33039,
"media_type": "movie"
}
],
"person_results": [],
"tv_results": [],
"tv_episode_results": [],
"tv_season_results": []
}Descrierea este tăiată.
Ce sursă găsește ce
external_source | Cum arată ID-ul | Exemplu | Array-ul de rezultate uzual |
|---|---|---|---|
imdb_id | tt plus cifre pentru titluri, nm plus cifre pentru persoane | tt0137523, nm0000093 (Brad Pitt) | movie_results, tv_results sau person_results |
tvdb_id | Număr | 81189 (Breaking Bad) | tv_results |
wikidata_id | Q plus cifre | Q190050 (Fight Club), Q1079 (Breaking Bad), Q35332 (Brad Pitt) | movie_results, tv_results sau person_results |
kinopoisk_id | Număr | 361 (Fight Club), 404900 (Breaking Bad) | movie_results sau tv_results |
facebook_id, twitter_id, instagram_id | Nume de cont | FightClub | Depinde de cont |
Un nume de cont poate corespunde mai multor titluri. De exemplu instagram_ întoarce serialul și filmul El Camino, deci citește fiecare array.
curl -sf "https://api.amodb.dev/3/find/361?external_source=kinopoisk_id" \
-H "Authorization: Bearer $AMODB_KEY"ID-urile externe ale unui titlu cunoscut
Sensul invers este un set de endpoint-uri external_ids. Ele întorc ID-urile pe care alte sisteme le folosesc pentru o înregistrare pe care o ai deja.
| Metodă și cale | Întoarce | Parametri |
|---|---|---|
GET / | imdb_id, wikidata_id, facebook_id, instagram_id, twitter_id, kinopoisk_id | movie_id |
GET / | Aceleași plus freebase_mid, freebase_id, tvdb_id, tvrage_id | tv_id |
GET / | imdb_id, wikidata_id, facebook_id, instagram_id, tiktok_id, twitter_id, youtube_id | person_id |
Un ID pe care un titlu nu îl are vine ca null. kinopoisk_id este un șir și este prezent pentru un film sau serial doar când amodb îl cunoaște. Un răspuns real pentru /:
{
"id": 550,
"imdb_id": "tt0137523",
"wikidata_id": "Q190050",
"facebook_id": "FightClub",
"instagram_id": null,
"twitter_id": null,
"kinopoisk_id": "361"
}Un răspuns real pentru /:
{
"id": 1396,
"imdb_id": "tt0903747",
"freebase_mid": null,
"freebase_id": null,
"tvdb_id": 81189,
"tvrage_id": null,
"wikidata_id": "Q1079",
"facebook_id": "BreakingBad",
"instagram_id": "breakingbad",
"twitter_id": "BreakingBad",
"kinopoisk_id": "404900"
}Endpoint-urile external_ids de sezon și de episod există, dar fiecare ID din ele este azi null, deci sari peste ele.
Fapte Wikidata
GET / și GET / întorc ID-ul Wikidata al unui titlu și fapte despre el: bani, vecini dintr-o serie, pagini Wikipedia, premii și locuri. Fiecare cheie este mereu prezentă. Un fapt necunoscut este null pentru o singură valoare și [] pentru o listă.
| Metodă și cale | Întoarce | Parametri |
|---|---|---|
GET / | ID Wikidata și fapte | movie_id, language |
GET / | ID Wikidata și fapte | tv_id, language |
append_ | Același bloc sub wikidata, cu id-ul său | Adăugat la un apel de detalii |
Acesta este răspunsul pentru Fight Club (filmul 550), tăiat la o dimensiune lizibilă:
{
"id": 550,
"wikidata_id": "Q190050",
"budget": {
"value": 63000000,
"currency": "USD"
},
"box_office": {
"value": 101209702,
"currency": "USD",
"worldwide": true
},
"follows": null,
"followed_by": null,
"sitelinks": {
"en": "Fight Club",
"ru": "Бойцовский клуб (фильм)",
"uk": "Бійцівський клуб (фільм)"
},
"awards": [
{
"wikidata_id": "Q28044798",
"label": "Empire Awards, UK for best british actress"
},
{
"wikidata_id": "Q943908",
"label": "Jupiter Award",
"year": 2000
}
],
"nominations": [
{
"wikidata_id": "Q488645",
"label": "Academy Award for Best Sound Editing",
"year": 2000
}
],
"based_on": [
{
"wikidata_id": "Q837283",
"label": "Fight Club",
"author": {
"wikidata_id": "Q268181",
"label": "Chuck Palahniuk"
}
}
],
"filming_locations": [
{
"wikidata_id": "Q65",
"label": "Los Angeles"
}
],
"narrative_locations": [
{
"wikidata_id": "Q65",
"label": "Los Angeles"
}
],
"original_broadcasters": []
}Obiectul sitelinks are 14 intrări, iar awards are 5. Ambele sunt tăiate aici.
| Câmp | Tip | Observații |
|---|---|---|
id | număr întreg | ID-ul TMDB al titlului. Rămâne când folosești append_to_response. |
wikidata_id | șir sau null | Element Wikidata precum Q190050. |
budget | obiect sau null | value este un număr întreg rotunjit, iar currency este un cod ISO sau null. |
box_office | obiect sau null | La fel ca budget, plus worldwide setat la true sau false. |
follows, followed_by | obiect sau null | Titlul anterior și cel următor dintr-o serie de filme, ca link. |
sitelinks | obiect | Mapează un cod de limbă la titlul paginii Wikipedia. Cheile sunt cele 14 limbi servite. {} când nu există. |
awards, nominations | array | Linkuri cu un year opțional. |
based_on | array | Lucrări sursă cu wikidata_id, label și un obiect author sau null. |
filming_locations, narrative_locations, original_broadcasters | array | Linkuri. Breaking Bad are AMC în original_broadcasters. |
Un link are wikidata_id, label și, când elementul este un titlu din catalog, tmdb_id și media_type. Pentru The Matrix Reloaded (filmul 604), vecinii sunt linkuri către filmele 603 și 605:
{
"follows": {
"wikidata_id": "Q83495",
"label": "The Matrix",
"tmdb_id": 603,
"media_type": "movie"
},
"followed_by": {
"wikidata_id": "Q207536",
"label": "The Matrix Revolutions",
"tmdb_id": 605,
"media_type": "movie"
}
}Fiecare label vine în language din cerere și revine la engleză. Cu language=ru, autorul de mai sus se citește Чак Паланик.
Erori
Erorile folosesc corpul TMDB, de exemplu {"success": false,.
| HTTP | status_code | Când |
|---|---|---|
| 400 | 22 | external_source lipsește, nu este cu litere mici sau nu este în listă. |
| 401 | 7 | Cheia lipsește sau este greșită. |
| 402 | 36 | Perioada planului s-a încheiat. |
| 404 | 34 | ID-ul titlului dintr-o cale wikidata nu există. |
| 429 | 25 | Ai depășit cererile pe minut. Așteaptă numărul de secunde din Retry-After. |
Un ID extern necunoscut la find nu este o eroare: așteaptă-te la cinci array-uri goale. Nici endpoint-urile external_ids nu răspund 404 pentru un ID necunoscut. Ele răspund 200 cu fiecare ID null. Vezi erori și autentificare.
Note practice
- Salvează ID-ul TMDB prima dată când rezolvi un ID extern. Apelurile următoare sar atunci peste
findși merg direct la calea de detalii, ceea ce economisește o cerere pe titlu. - Testează mereu că array-ul dorit are un element.
findpoate întoarce mai multe array-uri deodată pentru un ID. - Detaliile și ID-urile externe sunt ținute în cache la margine 6 ore. O căutare repetată în acest interval întoarce răspunsul stocat.
wikidata_idfuncționează în ambele sensuri: transmite-l lafindca să obții un titlu sau citește-l dinexternal_idsca să faci legătura în exterior.- Ca să aduci căutările IMDb în stil OMDb, vezi endpoint-ul OMDb. Pentru scoruri după ce ai rezolvat un titlu, vezi evaluări.