# Алтернатива на 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/bg/pricing/) |
| Съвместимост       | Собствено API                                                        | Четене по TMDB v3 и OMDb                                     |

## С какво се различава amodb

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

## Къде TVmaze пасва по-добре

- **Няма бюджет.** Безплатен е за ползване, така че студентски проект или уикенд тракер не изисква плащане. amodb няма безплатен план и пробен период.
- **Само сериали, без излишно.** Ако моделът на данните ви се състои от сериали и епизоди и нищо друго, API, насочено към сериали, му отговаря.
- **Собствени конвенции.** Приложения, вече изградени около модела на TVmaze, спестяват работа, като останат при него.

Ако останете, спазвайте лиценза му с посочване на авторството. Формулировката вижте в документацията им.

## Миграция към amodb

Започнете със задача за съпоставяне. Прочетете външните id, изброени в запазените ви записи от TVmaze (имената на полетата вижте в документацията им), и ги разрешете през `/3/find`. Програмата по-долу съпоставя един IMDb id със сериал и отпечатва датата на следващия епизод.

```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 са изброени на страницата [търсене по външен идентификатор](https://amodb.dev/bg/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/bg/pricing/).

## Въпроси и отговори

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

TVmaze предлага безплатно публично API с лимити по IP адрес, а данните му са под лиценз с посочване на авторството. Вижте документацията им за текущите лимити и текста на лиценза. amodb е платен и няма безплатен план.

### Покрива ли amodb филмите, както и сериалите?

Да. Филмите, сериалите, сезоните, епизодите и личностите са на един ключ и един базов URL адрес. TVmaze е само за сериали, така че за страница на филм във вашето приложение там ви трябва втори източник.

### Как да съпоставя сериали от TVmaze с id в amodb?

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

### Защо е важен лимитът по IP?

Лимит, вързан за IP адрес, се споделя от всичко зад него, като пул от сървъри или офис мрежа. amodb брои заявките на ключ в плъзгащ се 60-секунден прозорец, откъдето и да идват извикванията.

### Мога ли да покажа датата на следващия епизод на сериал?

Да. Детайлите за сериал връщат next_episode_to_air с air_date, season_number и episode_number, или null, когато нищо не е насрочено. Edge кешира детайлите за 6 часа, затова ги обновявайте няколко пъти на ден.

## Свързани страници

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

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