# Žánry a číselníky

> Endpointy žánrů a číselníků vracejí malé referenční seznamy, které stačí načíst jednou: ID žánrů filmů a seriálů s názvy ve 14 jazycích, dále země, jazyky, profese štábu, věkové hodnocení a poskytovatele streamování. Používají cesty a tvary TMDB v3, nemají stránkování a mění se zřídka, takže je cachujte na den.

## Endpoint

`GET /3/genre/movie/list`

```bash
curl "https://api.amodb.dev/3/genre/movie/list?language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"
```

Odpověď:

```json
{
  "genres": [
    {
      "id": 28,
      "name": "Action"
    },
    {
      "id": 12,
      "name": "Adventure"
    },
    {
      "id": 16,
      "name": "Animation"
    }
  ]
}
```

## Získání seznamu filmových žánrů

`GET /3/genre/movie/list` vrací každý filmový žánr jako `id` a `name`. ID jsou čísla, která nese `genre_ids` u položek seznamů a která očekává `with_genres` v [discover](https://amodb.dev/cs/discover/). Názvy se řídí parametrem `language`.

Příklad načte seznam a sestaví mapu ID na název, což je první věc, kterou většina aplikací potřebuje.

```bash
curl -s "https://api.amodb.dev/3/genre/movie/list?language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```js
const url = 'https://api.amodb.dev/3/genre/movie/list?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 { genres } = await res.json();
const names = new Map(genres.map((g) => [g.id, g.name]));
console.log(names.get(878), names.size);
```

```python
import os
import requests

r = requests.get(
    "https://api.amodb.dev/3/genre/movie/list",
    params={"language": "en-US"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
r.raise_for_status()
names = {g["id"]: g["name"] for g in r.json()["genres"]}
print(names[878], len(names))
```

```php
<?php
$url = 'https://api.amodb.dev/3/genre/movie/list?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");
}
$names = [];
foreach (json_decode($body, true)['genres'] as $g) {
    $names[$g['id']] = $g['name'];
}
echo $names[878], ' ', count($names), PHP_EOL;
```

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"
	"time"
)

type Genres struct {
	Genres []struct {
		ID   int    `json:"id"`
		Name string `json:"name"`
	} `json:"genres"`
}

func main() {
	url := "https://api.amodb.dev/3/genre/movie/list?language=en-US"
	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 g Genres
	if err := json.NewDecoder(res.Body).Decode(&g); err != nil {
		panic(err)
	}
	names := map[int]string{}
	for _, x := range g.Genres {
		names[x.ID] = x.Name
	}
	fmt.Println(names[878], len(names))
}
```

### Parametry

| Parametr   | Kde   | Povinný       | Popis                                                                                              |
| ---------- | ----- | ------------- | -------------------------------------------------------------------------------------------------- |
| `api_key`  | query | jeden ze dvou | Váš klíč. Použijte jej, nebo hlavičku `Authorization: Bearer`.                                     |
| `language` | query | ne            | Tag TMDB, například `en-US`, `ru-RU` nebo `pt-BR`. Názvy se vrátí v tomto jazyce. Výchozí `en-US`. |

### Pole odpovědi

| Pole            | Typ     | Poznámky                                       |
| --------------- | ------- | ---------------------------------------------- |
| `genres`        | array   | Celý seznam v jedné odpovědi, bez stránkování. |
| `genres[].id`   | integer | Stabilní ID žánru.                             |
| `genres[].name` | string  | Název žánru v požadovaném jazyce.              |

### Příklad odpovědi

```json
{
  "genres": [
    { "id": 12, "name": "Adventure" },
    { "id": 14, "name": "Fantasy" },
    { "id": 16, "name": "Animation" },
    { "id": 18, "name": "Drama" }
  ]
}
```

Odpověď obsahuje 27 žánrů seřazených podle ID. Tato je zkrácena na první 4.

## ID žánrů

Obě cesty pro žánry vracejí těchto 27 žánrů seřazených podle ID. Níže jsou anglické názvy. Jiné jazyky vracejí stejná ID s přeloženými názvy.

| ID    | Název              |
| ----- | ------------------ |
| 12    | Adventure          |
| 14    | Fantasy            |
| 16    | Animation          |
| 18    | Drama              |
| 27    | Horror             |
| 28    | Action             |
| 35    | Comedy             |
| 36    | History            |
| 37    | Western            |
| 53    | Thriller           |
| 80    | Crime              |
| 99    | Documentary        |
| 878   | Science Fiction    |
| 9648  | Mystery            |
| 10402 | Music              |
| 10749 | Romance            |
| 10751 | Family             |
| 10752 | War                |
| 10759 | Action & Adventure |
| 10762 | Kids               |
| 10763 | News               |
| 10764 | Reality            |
| 10765 | Sci-Fi & Fantasy   |
| 10766 | Soap               |
| 10767 | Talk               |
| 10768 | War & Politics     |
| 10770 | TV Movie           |

## Seznam seriálových žánrů

`GET /3/genre/tv/list` přijímá stejný parametr `language` a vrací totožný seznam, takže jedna mapa ID na název pokryje filmy i seriály. V datech seznamů se ID `10759` a `10762` až `10768` objevují jen u seriálových položek a ID jako `28`, `12` a `878` u filmových. Když v [discover](https://amodb.dev/cs/discover/) filtrujete seriály, použijte seriálová ID, například `10765` pro Sci-Fi a fantasy.

## Číselníky

Tyto cesty vracejí referenční data pro formuláře, filtry a obrazovky nastavení. Všechny vyžadují klíč, žádná nepřijímá `page`.

| Metoda a cesta                            | Parametry                  | Položka nebo tvar                                                     |
| ----------------------------------------- | -------------------------- | --------------------------------------------------------------------- |
| `GET /configuration/countries`            | žádné                      | Pole `{ iso_3166_1, english_name, native_name }`                      |
| `GET /configuration/languages`            | žádné                      | Pole `{ iso_639_1, english_name, name }`                              |
| `GET /configuration/primary_translations` | žádné                      | Pole 14 řetězců, například `ru-RU`                                    |
| `GET /configuration/jobs`                 | žádné                      | Pole `{ department, jobs }`, kde `jobs` obsahuje názvy profesí        |
| `GET /certification/movie/list`           | žádné                      | `{ certifications }` podle kódu země, 10 zemí                         |
| `GET /certification/tv/list`              | žádné                      | `{ certifications }` podle kódu země, jeden klíč na zemi v katalogu   |
| `GET /watch/providers/regions`            | `language`                 | `{ results }` s položkami `{ iso_3166_1, english_name, native_name }` |
| `GET /watch/providers/movie`              | `language`, `watch_region` | `{ results }` s poskytovateli                                         |
| `GET /watch/providers/tv`                 | `language`, `watch_region` | `{ results }` s poskytovateli                                         |

`/configuration/countries` a `/configuration/languages` ignorují `language` a vždy vracejí stejné názvy. `native_name` v seznamu regionů se řídí parametrem `language`. amodb nenabízí `/configuration/timezones`.

Položka věkového hodnocení uvádí označení, jeho význam a pořadí řazení. Položky jsou seskupené podle kódu země, takže jedno volání pokryje všechny trhy. Filmový seznam obsahuje texty hodnocení. V seriálovém seznamu je `meaning` prázdný řetězec.

```json
{
  "certifications": {
    "US": [
      { "certification": "PG", "meaning": "Some material may not be suitable for children under 10.", "order": 3 },
      { "certification": "R", "meaning": "Under 17 requires accompanying parent or adult guardian.", "order": 5 }
    ]
  }
}
```

Příklad je zkrácen na 2 ze 6 položek pro USA. Filmový seznam pokrývá AU, BR, CA, DE, ES, FR, GB, IT, RU a US.

Položka poskytovatele má `provider_id`, `provider_name`, `logo_path`, `display_priority` a `display_priorities`, tedy mapu kódu země na prioritu. Bez `watch_region` dostanete všechny poskytovatele. S `watch_region=US` zůstanou jen poskytovatelé, kteří danou zemi obsluhují. Neznámý region vrátí prázdné pole `results`. Předejte kód z `/watch/providers/regions`. Loga poskytovatelů se načítají z hostitele obrázků, viz [obrázky](https://amodb.dev/cs/images-api/).

```json
{
  "display_priorities": { "AT": 1, "DE": 1, "GB": 1, "JP": 1, "US": 3 },
  "display_priority": 3,
  "logo_path": "/gMZdpavHmxFNnLpMHwVxfqeux2g.png",
  "provider_name": "Amazon Prime Video",
  "provider_id": 9
}
```

Toto je jedna položka z `/watch/providers/movie?watch_region=US`.

## Chyby

| HTTP | status_code | Kdy                                                                                         |
| ---- | ----------- | ------------------------------------------------------------------------------------------- |
| 401  | 7           | Klíč chybí nebo je nesprávný.                                                               |
| 402  | 36          | Platnost tarifu skončila.                                                                   |
| 404  | 34          | Cesta neexistuje, například `/genre/book/list`.                                             |
| 405  | 37          | Použili jste metodu pro zápis na cestě s číselníkem.                                        |
| 429  | 25          | Překročili jste počet požadavků za minutu. Počkejte tolik sekund, kolik říká `Retry-After`. |

Podrobnosti ke každému kódu jsou na stránce [chyby](https://amodb.dev/cs/errors/). Limity tarifů jsou na stránce [limity požadavků](https://amodb.dev/cs/rate-limits/).

## Praktické poznámky

- Načtěte seznamy jednou pro každý jazyk při startu a držte je v paměti nebo v souboru. Edge cachuje cesty `/configuration` 24 hodin, takže stačí obnovovat je u vás jednou denně.
- V databázi ukládejte ID žánrů, ne názvy. Název se mění podle jazyka, ID ne.
- Obě cesty pro žánry vracejí stejných 27 položek, takže jedna mapa pokryje filmy i seriály. ID 10759 a 10762 až 10768 se objevují jen u seriálových položek.
- `with_genres=28,12` v [discover](https://amodb.dev/cs/discover/) znamená akční a dobrodružné dohromady. `with_genres=28|12` znamená kterékoli z nich.
- Názvy žánrů se řídí parametrem `language`. Tag mimo 14 základních jazyků ze stránky [jazyky](https://amodb.dev/cs/languages/) se vrátí k angličtině a několik názvů zůstává v některých jazycích anglicky, například `10759` v italštině.

## Otázky a odpovědi

### Mění se ID žánrů mezi jazyky?

Ne. ID zůstává stejné a překládá se jen název. Vyžádejte si seznam v jazyce, který zobrazujete, a v aplikaci si pro každý jazyk udržujte jednu mapu ID na název.

### Používají filmy a seriály různá ID žánrů?

Sdílejí jeden prostor ID. Obě cesty pro žánry vracejí stejných 27 žánrů. Filmové položky používají ID jako 28 a 12, seriálové sloučená ID jako 10759 pro Akci a dobrodružství. Jedna mapa pokryje obojí.

### Jak filtrovat podle dvou žánrů najednou?

Předejte do discover parametr with_genres. Čárka mezi ID znamená všechny, takže 28,12 je akční a dobrodružné dohromady. Svislá čára znamená kterýkoli z nich. K vyloučení použijte without_genres.

### Potřebují číselníky stránkování?

Ne. Každá cesta s číselníkem vrací celý seznam v jedné odpovědi. Načtěte je při startu a uložte do cache na den. Cesty configuration se na edge cachují 24 hodin.

## Související stránky

- [Discover API](https://amodb.dev/cs/discover/): Discover API se stejnými filtry jako TMDB v3. Vypisujte filmy a seriály podle žánru, společnosti, klíčového slova, roku, hodnocení, délky a poskytovatele.
- [API detailu filmu](https://amodb.dev/cs/movies/): API detailu filmu se stejnými cestami a JSON jako TMDB v3. Načtěte film podle ID, přidejte obsazení, hodnocení a nálady přes append_to_response, 14 jazyků.
- [API detailu seriálu](https://amodb.dev/cs/tv-series/): API detailu seriálu se stejnými cestami a JSON jako TMDB v3. Seriál podle ID se sezónami, sítěmi, věkovým hodnocením a poskytovateli streamování.
- [Jazyky](https://amodb.dev/cs/languages/): amodb vrací názvy, popisy a jména ve 14 jazycích. Do language předejte tag ve stylu TMDB, např. ru-RU nebo pt-BR; jakýkoli jiný tag použije angličtinu.
- [API obrázků a hostitel obrázků](https://amodb.dev/cs/images-api/): API obrázků filmů s cestami TMDB v3: vypište plakáty, pozadí, loga a záběry každého titulu a načtěte je z img.amodb.dev v 10 velikostech bez klíče.
- [Rychlý start](https://amodb.dev/cs/quickstart/): První volání amodb: získejte klíč, vyžádejte detail filmu v curl, JavaScriptu, Pythonu, PHP nebo Go a načtěte plakát z img.amodb.dev. Za méně než 2 minuty.

Aktualizováno: 2026-10-18. Source: https://amodb.dev/cs/genres/
