# Альтернатива TVmaze API

> TVmaze охватывает только сериалы, бесплатен, ограничивает запросы по IP-адресу, а его данные идут под лицензией с указанием источника. Подробности смотрите в их документации. amodb это платный API для сериалов, фильмов и людей с лимитами на ключ и путями TMDB v3. Выбирайте по охвату и бюджету.

## Выбирайте по охвату и бюджету

TVmaze охватывает только сериалы. Он бесплатен как публичный API с лимитами на IP-адрес, а его данные идут под лицензией с указанием источника, поэтому подробности смотрите в их документации. amodb платный и охватывает сериалы, фильмы и людей. Если ваше приложение это трекер сериалов и вам хватает бесплатного источника, TVmaze разумное начало. Если вы показываете еще и фильмы, страницы актеров или постеры на нескольких языках, один ключ amodb заменит несколько источников.

## Что значит охват для вашего приложения

| Ваше приложение показывает | TVmaze              | amodb                                              |
| -------------------------- | ------------------- | -------------------------------------------------- |
| Страницу сериала           | Да                  | `GET /3/tv/{series_id}`                            |
| Список серий               | Да                  | `GET /3/tv/{series_id}/season/{season_number}`     |
| Страницу фильма            | Фильмов нет         | `GET /3/movie/{movie_id}`                          |
| Страницу актера            | См. их документацию | `GET /3/person/{person_id}` и сводные списки работ |
| Сериалы, выходящие сегодня | См. их документацию | `GET /3/tv/airing_today`                           |
| Переведенное описание      | См. их документацию | Параметр `language`, 14 языков                     |
| Оценки с нескольких сайтов | См. их документацию | Расширение `/ratings`                              |

Строка про фильмы решает большинство случаев. Если у вас нет страниц фильмов, дополнительный охват вам не нужен.

## Что проверить до переезда

Эндпоинты сезонов и серий следуют форме TMDB, и некоторые их части приходят пустыми. Проверьте экраны, которые ими пользуются.

- **Актеры серии.** У серии `cast` это пустой массив. Поля `guest_stars` и `crew` заполнены, а основной актерский состав есть в вызове `/credits` сериала.
- **Дополнения сезона.** Поля `images`, `videos` и `translations` сезона пусты, поэтому постер сезона берется из записи сезона, а не из списка изображений.
- **Внешние ID.** Поля `external_ids` у сезонов и серий все равны null. Сопоставляйте серии со своими записями по `season_number` и `episode_number`.
- **Создатели.** Поле `created_by` у сериала для большинства шоу пусто.
- **Нет ленты изменений.** В amodb нет эндпоинта, который перечисляет шоу, изменившиеся с определенной даты.

## Сравнение возможностей

| Функция                    | TVmaze                                                          | amodb                                                     |
| -------------------------- | --------------------------------------------------------------- | --------------------------------------------------------- |
| Модель оплаты              | Бесплатный публичный API                                        | Предоплата, от 1 до 24 месяцев за покупку                 |
| Бесплатный тариф           | Да, весь публичный API                                          | Нет, пробного периода тоже нет                            |
| Аутентификация             | См. их документацию                                             | `api_key` или заголовок Bearer                            |
| Формат ответа              | JSON, см. их документацию                                       | JSON в формате TMDB v3                                    |
| Языки                      | См. их документацию                                             | 14 языков интерфейса                                      |
| Фильмы                     | Нет                                                             | Да                                                        |
| Сериалы                    | Да, единственный профиль                                        | Да                                                        |
| Люди                       | См. их документацию                                             | Да                                                        |
| Изображения                | См. их документацию                                             | `img.amodb.dev`, десять токенов размеров                  |
| Рейтинги                   | См. их документацию                                             | Пять источников, где есть данные                          |
| Лимит запросов             | На IP-адрес, цифры см. в их документации                        | 20, 40 или 120 в минуту на ключ                           |
| Коммерческое использование | Данные под лицензией с указанием источника, см. их документацию | Платные тарифы, см. [цены](https://amodb.dev/ru/pricing/) |
| Совместимость              | Собственный API                                                 | Чтение TMDB v3 и OMDb                                     |

## Чем отличается amodb

- **Лимит следует за ключом.** Все ваши серверы делят один счетчик в скользящем окне 60 секунд, а в ответах есть `X-RateLimit-Remaining`. Ничто не зависит от того, с какого адреса ушел запрос.
- **Фильмы, сериалы и люди в одном месте.** Один клиент, один формат ошибок и один набор заголовков покрывают все приложение.
- **Языки.** Названия и описания приходят на любом из 14 языков, а `original_name` сохраняет название на родном языке.
- **Устоявшийся протокол.** Библиотеки, написанные для чтения TMDB v3, работают с новым базовым URL. Эндпоинты сериалов описаны на странице [API сериалов](https://amodb.dev/ru/tv-show-api/).

## Когда TVmaze подходит лучше

- **Нет бюджета.** Он бесплатен, поэтому студенческому проекту или трекеру выходного дня платить не нужно. В amodb нет ни бесплатного тарифа, ни пробного периода.
- **Только сериалы, без лишнего.** Если ваша модель данных состоит из шоу и серий и ничего больше, API, ориентированный на сериалы, ей соответствует.
- **Собственные соглашения.** Приложения, уже построенные вокруг модели TVmaze, экономят силы, оставаясь на нем.

Если вы остаетесь, соблюдайте его лицензию с указанием источника. Формулировку смотрите в их документации.

## Миграция на amodb

Начните с задачи сопоставления. Прочитайте внешние ID, которые перечислены в сохраненных записях TVmaze (названия полей смотрите в их документации), и разрешите их через `/3/find`. Программа ниже сопоставляет один ID IMDb с сериалом и печатает дату следующей серии.

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"
	"time"
)

type findResult struct {
	TVResults []struct {
		ID   int    `json:"id"`
		Name string `json:"name"`
	} `json:"tv_results"`
}

type episode struct {
	AirDate       string `json:"air_date"`
	SeasonNumber  int    `json:"season_number"`
	EpisodeNumber int    `json:"episode_number"`
}

type series struct {
	Name        string   `json:"name"`
	Status      string   `json:"status"`
	NextEpisode *episode `json:"next_episode_to_air"`
}

var client = &http.Client{Timeout: 10 * time.Second}

func get(path string, out any) error {
	req, err := http.NewRequest(http.MethodGet, "https://api.amodb.dev/3"+path, nil)
	if err != nil {
		return err
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	res, err := client.Do(req)
	if err != nil {
		return err
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		return fmt.Errorf("amodb returned %s", res.Status)
	}
	return json.NewDecoder(res.Body).Decode(out)
}

func main() {
	var found findResult
	if err := get("/find/tt0903747?external_source=imdb_id", &found); err != nil {
		fmt.Println(err)
		return
	}
	if len(found.TVResults) == 0 {
		fmt.Println("no match")
		return
	}
	var s series
	if err := get(fmt.Sprintf("/tv/%d", found.TVResults[0].ID), &s); err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(s.Name, s.Status)
	if s.NextEpisode != nil {
		fmt.Println("next episode:", s.NextEpisode.AirDate)
	}
}
```

Указательный тип у `NextEpisode` справляется с `null`, который возвращают завершенные шоу. Выполните сопоставление один раз, сохраните ID amodb в каждой своей записи и дальше вызывайте `/3/tv/{id}`. На 429 приходит `Retry-After`, а другие источники ID перечислены на странице [поиск по внешнему ID](https://amodb.dev/ru/find-by-external-id/).

## Расчет ночной синхронизации

Допустим, вы обновляете 300 шоу каждую ночь. Это 300 запросов, потому что один вызов сериала возвращает одно шоу. При 20 запросах в минуту задача займет 15 минут, при 40 это 7.5 минут, а при 120 это 2.5 минуты. Добавьте `append_to_response=credits,ratings` к каждому вызову, чтобы актерский состав и оценки приходили в том же запросе, а не стоили еще двух на шоу. Читайте `X-RateLimit-Remaining` и делайте паузу, когда значение достигает нуля, затем продолжайте через `X-RateLimit-Reset` секунд.

## Цены

amodb работает по предоплате и никогда не продлевается сам. Выберите 1, 3, 6, 12 или 24 месяца и тариф на 20, 40 или 120 запросов в минуту. Длинные периоды дешевле на 10, 20, 30 или 40 процентов, а каждый тариф включает все данные. Суммы указаны на странице [цены](https://amodb.dev/ru/pricing/).

## Вопросы и ответы

### Бесплатен ли TVmaze API?

TVmaze предлагает бесплатный публичный API с лимитами на IP-адрес, а его данные идут под лицензией с указанием источника. Актуальные лимиты и текст лицензии смотрите в их документации. amodb платный и бесплатного тарифа не имеет.

### Охватывает ли amodb фильмы наряду с сериалами?

Да. Фильмы, сериалы, сезоны, серии и люди доступны с одним ключом и одним базовым URL. TVmaze охватывает только сериалы, поэтому для страницы фильма в приложении там нужен второй источник.

### Как сопоставить шоу TVmaze с ID amodb?

Записи шоу в TVmaze содержат ID в других базах, например IMDb (точные поля смотрите в их документации). Вызовите эндпоинт find с ID IMDb и external_source=imdb_id, затем сохраните id из tv_results.

### Почему важен лимит на IP-адрес?

Лимит, привязанный к IP-адресу, делят все, кто за ним находится, например пул серверов или офисная сеть. amodb считает запросы на ключ в скользящем окне 60 секунд, откуда бы ни приходили вызовы.

### Можно ли показать дату следующей серии шоу?

Да. Сведения о сериале возвращают next_episode_to_air с полями air_date, season_number и episode_number или null, когда ничего не запланировано. Граница сети кэширует сведения на 6 часов, поэтому обновляйте данные несколько раз в день.

## Связанные страницы

- [API сериалов: сериалы, сезоны и серии](https://amodb.dev/ru/tv-show-api/): API сериалов со статусом, телесетями, сезонами, сериями и полем next_episode_to_air. JSON формата TMDB v3 на 14 языках, тарифы от 20 запросов в минуту.
- [API списка серий](https://amodb.dev/ru/episode-guide-api/): API списка серий на эндпоинтах сезонов и серий TMDB v3: названия, даты выхода, длительность, кадры и группы серий для любого сериала, на 14 языках.
- [API сезонов и серий сериала](https://amodb.dev/ru/tv-seasons-episodes/): API сезонов и серий сериала с теми же путями и JSON, что в TMDB v3. Читайте сезон со всеми сериями или одну серию с датой выхода, длительностью и кадром.
- [Поиск по внешнему ID](https://amodb.dev/ru/find-by-external-id/): Найдите фильм, сериал или персону по ID IMDb, TVDB, Wikidata или Kinopoisk через эндпоинт find TMDB, а также прочитайте внешние ID и факты Wikidata о проекте.
- [Лимиты запросов](https://amodb.dev/ru/rate-limits/): amodb ограничивает ключ запросами в минуту в скользящем окне 60 секунд: 20, 40 или 120 по тарифу. Читайте заголовки лимита и обрабатывайте 429 с Retry-After.
- [Цены](https://amodb.dev/ru/pricing/): Тарифы amodb различаются только запросами в минуту: 20, 40 или 120. В каждом все данные в стиле TMDB v3 и OMDb. Предоплата, без продления и пробного периода.

Обновлено: 2026-10-18. Source: https://amodb.dev/ru/tvmaze-api-alternative/
