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ă.

Actualizat Vezi ca Markdown

Găsește un titlu după ID extern

GET /3/find/{external_id} 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.

bashjspyphpgo
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_idcaleobligatoriu
    ID-ul din celălalt sistem, de exemplu tt0137523.
  • external_sourceinterogareobligatoriu
    Una dintre imdb_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.
  • languageinterogare
    Una dintre cele 14 limbi, precum en sau ru-RU. Alte valori revin la en.
  • api_keyinterogareuna dintre cele două
    Cheia ta. Folosește-o pe aceasta sau antetul Authorization: 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âmpTipObservații
movie_resultsarrayÎnregistrări de filme cu aceleași câmpuri ca un rezultat de căutare, plus media_type setat la movie.
person_resultsarrayPersoane potrivite după ID. Fiecare are known_for ca array gol și media_type setat la person.
tv_resultsarrayÎnregistrări de seriale TV cu media_type setat la tv.
tv_episode_resultsarrayMereu gol.
tv_season_resultsarrayMereu gol.

Exemplu de răspuns

JSON
{
  "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_sourceCum arată ID-ulExempluArray-ul de rezultate uzual
imdb_idtt plus cifre pentru titluri, nm plus cifre pentru persoanett0137523, nm0000093 (Brad Pitt)movie_results, tv_results sau person_results
tvdb_idNumăr81189 (Breaking Bad)tv_results
wikidata_idQ plus cifreQ190050 (Fight Club), Q1079 (Breaking Bad), Q35332 (Brad Pitt)movie_results, tv_results sau person_results
kinopoisk_idNumăr361 (Fight Club), 404900 (Breaking Bad)movie_results sau tv_results
facebook_id, twitter_id, instagram_idNume de contFightClubDepinde de cont

Un nume de cont poate corespunde mai multor titluri. De exemplu instagram_id=breakingbad întoarce serialul și filmul El Camino, deci citește fiecare array.

curl
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ÎntoarceParametri
GET /movie/{movie_id}/external_idsimdb_id, wikidata_id, facebook_id, instagram_id, twitter_id, kinopoisk_idmovie_id
GET /tv/{tv_id}/external_idsAceleași plus freebase_mid, freebase_id, tvdb_id, tvrage_idtv_id
GET /person/{person_id}/external_idsimdb_id, wikidata_id, facebook_id, instagram_id, tiktok_id, twitter_id, youtube_idperson_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 /3/movie/550/external_ids:

JSON
{
  "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 /3/tv/1396/external_ids:

JSON
{
  "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 /3/movie/{movie_id}/wikidata și GET /3/tv/{tv_id}/wikidata î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ÎntoarceParametri
GET /movie/{movie_id}/wikidataID Wikidata și faptemovie_id, language
GET /tv/{tv_id}/wikidataID Wikidata și faptetv_id, language
append_to_response=wikidataAcelași bloc sub wikidata, cu id-ul săuAdăugat la un apel de detalii

Acesta este răspunsul pentru Fight Club (filmul 550), tăiat la o dimensiune lizibilă:

JSON
{
  "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âmpTipObservații
idnumăr întregID-ul TMDB al titlului. Rămâne când folosești append_to_response.
wikidata_idșir sau nullElement Wikidata precum Q190050.
budgetobiect sau nullvalue este un număr întreg rotunjit, iar currency este un cod ISO sau null.
box_officeobiect sau nullLa fel ca budget, plus worldwide setat la true sau false.
follows, followed_byobiect sau nullTitlul anterior și cel următor dintr-o serie de filme, ca link.
sitelinksobiectMapează un cod de limbă la titlul paginii Wikipedia. Cheile sunt cele 14 limbi servite. {} când nu există.
awards, nominationsarrayLinkuri cu un year opțional.
based_onarrayLucrări sursă cu wikidata_id, label și un obiect author sau null.
filming_locations, narrative_locations, original_broadcastersarrayLinkuri. 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:

JSON
{
  "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, "status_code": 7, "status_message": "Invalid API key: You must be granted a valid key."}.

HTTPstatus_codeCând
40022external_source lipsește, nu este cu litere mici sau nu este în listă.
4017Cheia lipsește sau este greșită.
40236Perioada planului s-a încheiat.
40434ID-ul titlului dintr-o cale wikidata nu există.
42925Ai 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. find poate î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_id funcționează în ambele sensuri: transmite-l la find ca să obții un titlu sau citește-l din external_ids ca 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.