# Wyszukiwanie po zewnętrznym ID

> GET /3/find/{external_id} zamienia ID z IMDb, TVDB, Wikidata, Kinopoisk, Facebooka, Twittera lub Instagrama na wyniki w stylu TMDB, a endpointy external_ids działają w drugą stronę. Endpoint Wikidata dodaje budżet, przychody, nagrody i powiązane tytuły filmu lub serialu. Wszystko używa twojego zwykłego klucza API.

## Endpoint

`GET /3/find/{external_id}`

```bash
curl "https://api.amodb.dev/3/find/tt0137523?external_source=imdb_id" \
  -H "Authorization: Bearer $AMODB_KEY"
```

Odpowiedź:

```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 new form of therapy. Their concept catches on, with underground \"fight clubs\" forming in every town, until an eccentric gets in the wa...",
      "popularity": 39.0054,
      "poster_path": "/jSziioSwPVrOy9Yow3XhWIBDjq1.jpg",
      "release_date": "1999-10-15",
      "title": "Fight Club",
      "video": false,
      "vote_average": 8.437,
      "vote_count": 33042,
      "media_type": "movie"
    }
  ],
  "person_results": [],
  "tv_results": [],
  "tv_episode_results": [],
  "tv_season_results": []
}
```

## Znajdź tytuł po zewnętrznym ID

`GET /3/find/{external_id}` przyjmuje ID z innego systemu i zwraca pasujące rekordy. Ścieżka zawiera ID, a parametr zapytania `external_source` mówi, z jakiego systemu pochodzi. amodb przyjmuje dwanaście źródeł, a siedem z nich zamienia się na rekordy: `imdb_id`, `tvdb_id`, `wikidata_id`, `kinopoisk_id`, `facebook_id`, `twitter_id` i `instagram_id`.

Przykład mapuje ID z IMDb `tt0137523` na ID z TMDB.

```bash
curl -sf "https://api.amodb.dev/3/find/tt0137523?external_source=imdb_id" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```js
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');
```

```python
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
<?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;
```

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

### Parametry

| Parametr          | Gdzie | Wymagany      | Opis                                                                                                                                                                                                                                          |
| ----------------- | ----- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `external_id`     | path  | tak           | ID w innym systemie, na przykład `tt0137523`.                                                                                                                                                                                                 |
| `external_source` | query | tak           | Jedna z wartości `imdb_id`, `tvdb_id`, `wikidata_id`, `kinopoisk_id`, `facebook_id`, `twitter_id`, `instagram_id`. Kolejnych pięć jest przyjmowanych i nic nie zwraca: `freebase_mid`, `freebase_id`, `tvrage_id`, `tiktok_id`, `youtube_id`. |
| `language`        | query | nie           | Jeden z 14 języków, na przykład `en` lub `ru-RU`. Inne wartości wracają do `en`.                                                                                                                                                              |
| `api_key`         | query | jeden z dwóch | Twój klucz. Użyj go albo nagłówka `Authorization: Bearer`.                                                                                                                                                                                    |

Brakujące `external_source` albo wartość spoza listy odpowiada 400 z `status_code` 22. Wartość musi być pisana małymi literami.

### Pola odpowiedzi

| Pole                 | Typ   | Uwagi                                                                                                 |
| -------------------- | ----- | ----------------------------------------------------------------------------------------------------- |
| `movie_results`      | array | Rekordy filmów z tymi samymi polami co wynik wyszukiwania, plus `media_type` ustawione na `movie`.    |
| `person_results`     | array | Osoby dopasowane po ID. Każda ma `known_for` jako pustą tablicę i `media_type` ustawione na `person`. |
| `tv_results`         | array | Rekordy seriali z `media_type` ustawionym na `tv`.                                                    |
| `tv_episode_results` | array | Zawsze pusta.                                                                                         |
| `tv_season_results`  | array | Zawsze pusta.                                                                                         |

### Przykładowa odpowiedź

```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": []
}
```

Opis jest przycięty.

### Które źródło co znajduje

| `external_source`                           | ID wygląda jak                                        | Przykład                                                             | Zwykła tablica z wynikiem                          |
| ------------------------------------------- | ----------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------- |
| `imdb_id`                                   | `tt` plus cyfry dla tytułów, `nm` plus cyfry dla osób | `tt0137523`, `nm0000093` (Brad Pitt)                                 | `movie_results`, `tv_results` lub `person_results` |
| `tvdb_id`                                   | Liczba                                                | `81189` (Breaking Bad)                                               | `tv_results`                                       |
| `wikidata_id`                               | `Q` plus cyfry                                        | `Q190050` (Fight Club), `Q1079` (Breaking Bad), `Q35332` (Brad Pitt) | `movie_results`, `tv_results` lub `person_results` |
| `kinopoisk_id`                              | Liczba                                                | `361` (Fight Club), `404900` (Breaking Bad)                          | `movie_results` lub `tv_results`                   |
| `facebook_id`, `twitter_id`, `instagram_id` | Nazwa konta                                           | `FightClub`                                                          | Zależy od konta                                    |

Jedna nazwa konta może pasować do więcej niż jednego tytułu. Na przykład `instagram_id=breakingbad` zwraca serial i film El Camino, więc czytaj wszystkie tablice.

```bash
curl -sf "https://api.amodb.dev/3/find/361?external_source=kinopoisk_id" \
  -H "Authorization: Bearer $AMODB_KEY"
```

## Zewnętrzne ID znanego tytułu

Odwrotny kierunek zapewnia zestaw endpointów `external_ids`. Zwracają ID, których inne systemy używają dla rekordu, który już masz.

| Metoda i ścieżka                       | Zwraca                                                                                           | Parametry   |
| -------------------------------------- | ------------------------------------------------------------------------------------------------ | ----------- |
| `GET /movie/{movie_id}/external_ids`   | `imdb_id`, `wikidata_id`, `facebook_id`, `instagram_id`, `twitter_id`, `kinopoisk_id`            | `movie_id`  |
| `GET /tv/{tv_id}/external_ids`         | To samo plus `freebase_mid`, `freebase_id`, `tvdb_id`, `tvrage_id`                               | `tv_id`     |
| `GET /person/{person_id}/external_ids` | `imdb_id`, `wikidata_id`, `facebook_id`, `instagram_id`, `tiktok_id`, `twitter_id`, `youtube_id` | `person_id` |

ID, którego tytuł nie ma, wraca jako `null`. `kinopoisk_id` jest ciągiem i występuje w filmie lub serialu tylko wtedy, gdy amodb je zna. Prawdziwa odpowiedź dla `/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"
}
```

Prawdziwa odpowiedź dla `/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"
}
```

Endpointy `external_ids` sezonów i odcinków istnieją, ale każde ID w nich ma dziś wartość `null`, więc je pomiń.

## Fakty z Wikidata

`GET /3/movie/{movie_id}/wikidata` i `GET /3/tv/{tv_id}/wikidata` zwracają ID Wikidata tytułu i fakty o nim: pieniądze, sąsiadów w serii, strony Wikipedii, nagrody i miejsca. Każdy klucz jest zawsze obecny. Nieznany fakt to `null` dla pojedynczej wartości i `[]` dla listy.

| Metoda i ścieżka                 | Zwraca                                   | Parametry                        |
| -------------------------------- | ---------------------------------------- | -------------------------------- |
| `GET /movie/{movie_id}/wikidata` | ID Wikidata i fakty                      | `movie_id`, `language`           |
| `GET /tv/{tv_id}/wikidata`       | ID Wikidata i fakty                      | `tv_id`, `language`              |
| `append_to_response=wikidata`    | Ten sam blok pod `wikidata`, z jego `id` | Dodawany do wywołania szczegółów |

To odpowiedź dla Fight Club (film 550), przycięta do czytelnego rozmiaru:

```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": []
}
```

Obiekt `sitelinks` ma 14 pozycji, a `awards` ma 5. Oba są tu przycięte.

| Pole                                                                | Typ             | Uwagi                                                                                            |
| ------------------------------------------------------------------- | --------------- | ------------------------------------------------------------------------------------------------ |
| `id`                                                                | integer         | ID tytułu z TMDB. Zostaje przy użyciu `append_to_response`.                                      |
| `wikidata_id`                                                       | string lub null | Element Wikidata, na przykład `Q190050`.                                                         |
| `budget`                                                            | object lub null | `value` to zaokrąglona liczba całkowita, a `currency` to kod ISO lub `null`.                     |
| `box_office`                                                        | object lub null | Tak samo jak `budget`, plus `worldwide` ustawione na `true` lub `false`.                         |
| `follows`, `followed_by`                                            | object lub null | Poprzedni i następny tytuł w serii filmów, jako link.                                            |
| `sitelinks`                                                         | object          | Mapuje kod języka na tytuł strony Wikipedii. Klucze to 14 obsługiwanych języków. `{}`, gdy brak. |
| `awards`, `nominations`                                             | array           | Linki z opcjonalnym `year`.                                                                      |
| `based_on`                                                          | array           | Dzieła źródłowe z `wikidata_id`, `label` i obiektem `author` lub `null`.                         |
| `filming_locations`, `narrative_locations`, `original_broadcasters` | array           | Linki. Breaking Bad ma AMC w `original_broadcasters`.                                            |

Link ma `wikidata_id`, `label` oraz, gdy element jest tytułem w katalogu, `tmdb_id` i `media_type`. Dla The Matrix Reloaded (film 604) sąsiedzi to linki do filmów 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"
  }
}
```

Każdy `label` przychodzi w `language` żądania i wraca do angielskiego. Z `language=ru` autor powyżej brzmi `Чак Паланик`.

## Błędy

Błędy używają treści TMDB, na przykład `{"success": false, "status_code": 7, "status_message": "Invalid API key: You must be granted a valid key."}`.

| HTTP | status_code | Kiedy                                                                                |
| ---- | ----------- | ------------------------------------------------------------------------------------ |
| 400  | 22          | `external_source` brakuje, nie jest pisane małymi literami albo nie ma go na liście. |
| 401  | 7           | Brakuje klucza lub jest błędny.                                                      |
| 402  | 36          | Okres planu dobiegł końca.                                                           |
| 404  | 34          | ID tytułu w ścieżce `wikidata` nie istnieje.                                         |
| 429  | 25          | Przekroczono limit żądań na minutę. Poczekaj tyle sekund, ile podaje `Retry-After`.  |

Nieznane zewnętrzne ID w `find` nie jest błędem: spodziewaj się pięciu pustych tablic. Endpointy `external_ids` również nie odpowiadają 404 dla nieznanego ID. Odpowiadają 200 z każdym ID równym `null`. Zobacz [błędy](https://amodb.dev/pl/errors/) i [uwierzytelnianie](https://amodb.dev/pl/authentication/).

## Praktyczne uwagi

- Zapisz ID z TMDB przy pierwszym rozwiązaniu zewnętrznego ID. Kolejne wywołania pomijają wtedy `find` i idą prosto do ścieżki szczegółów, co oszczędza jedno żądanie na tytuł.
- Zawsze sprawdzaj, czy tablica, której chcesz, ma pozycję. `find` może zwrócić kilka tablic naraz dla jednego ID.
- Szczegóły i zewnętrzne ID są w cache na edge przez 6 godzin. Powtórne wyszukiwanie w tym czasie zwraca zapisaną odpowiedź.
- `wikidata_id` działa w obu kierunkach: przekaż go do `find`, by dostać tytuł, albo odczytaj go z `external_ids`, by dodać link na zewnątrz.
- Aby przenieść wyszukiwania IMDb w stylu OMDb, zobacz [endpoint OMDb](https://amodb.dev/pl/omdb-endpoint/). Oceny po rozwiązaniu tytułu znajdziesz na stronie [oceny](https://amodb.dev/pl/ratings/).

## Pytania i odpowiedzi

### Jakie zewnętrzne źródła przyjmuje find?

Dla external_source przyjmowanych jest dwanaście wartości. Siedem z nich zamienia się na rekord: imdb_id, tvdb_id, wikidata_id, kinopoisk_id, facebook_id, twitter_id i instagram_id. Pozostałe pięć zwraca puste tablice. Wartość jest wymagana, pisana małymi literami i dokładna, na przykład external_source=imdb_id.

### Dlaczego find zwraca pięć tablic?

ID może wskazywać film, osobę, serial, odcinek lub sezon, więc odpowiedź ma jedną tablicę dla każdego rodzaju. W amodb pozycje zawierają tylko movie_results, person_results i tv_results. tv_episode_results i tv_season_results są zawsze puste.

### Co się dzieje, gdy ID jest nieznane?

Dostajesz status 200 ze wszystkimi pięcioma tablicami pustymi, tak jak w TMDB. Zanim odczytasz tablicę, sprawdź, czy ma choć jedną pozycję. Inaczej działa brakujące lub nieznane external_source: odpowiada 400 z status_code 22.

### Jak pobrać ID z Kinopoisk dla tytułu, który już mam?

Wywołaj endpoint external_ids filmu lub serialu. Zwraca kinopoisk_id jako ciąg, na przykład 361 dla Fight Club, albo null, gdy amodb go nie zna. Przekaż ten ciąg do find z external_source=kinopoisk_id, by wrócić.

### Czy mogę dołączyć wikidata do wywołania szczegółów?

Tak. Dodaj append_to_response=wikidata do żądania szczegółów filmu lub serialu, a blok Wikidata przyjdzie pod kluczem wikidata, w tym samym żądaniu i bez dodatkowego wywołania.

## Powiązane strony

- [API szczegółów filmu](https://amodb.dev/pl/movies/): API szczegółów filmu z tymi samymi ścieżkami i JSON co TMDB v3. Pobierz film po ID, dołącz obsadę, oceny i nastroje przez append_to_response, 14 języków.
- [API szczegółów serialu](https://amodb.dev/pl/tv-series/): API szczegółów serialu z tymi samymi ścieżkami i JSON co TMDB v3. Serial po ID z sezonami, sieciami, klasyfikacją wiekową i dostawcami streamingu.
- [Oceny filmów i seriali](https://amodb.dev/pl/ratings/): API ocen filmów zwraca wyniki z IMDb, Kinopoisk, Metacritic, Rotten Tomatoes i TMDB dla tytułu jednym wywołaniem, z null dla każdego nieznanego źródła.
- [API szczegółów osoby](https://amodb.dev/pl/people/): API szczegółów osoby z tymi samymi ścieżkami i JSON co TMDB v3. Aktor lub ekipa po ID z biografią, filmografią, zewnętrznymi ID i listą popularnych osób.
- [Endpoint zgodny z OMDb](https://amodb.dev/pl/omdb-endpoint/): Endpoint zgodny z OMDb API pod api.amodb.dev/omdb/. Szukaj przez i lub t, wyszukuj przez s, czytaj tablicę Ratings i zachowaj klienta, zmieniając bazowy URL.
- [Uwierzytelnianie](https://amodb.dev/pl/authentication/): Jak wysłać klucz amodb: api_key w zapytaniu, nagłówek Authorization Bearer albo apikey dla wywołań OMDb. Format klucza, przechowywanie, rotacja i błędy 401.

Zaktualizowano: 2026-10-18. Source: https://amodb.dev/pl/find-by-external-id/
