# Alternatywa dla API TVmaze

> TVmaze obejmuje tylko seriale, jest darmowe, limituje na adres IP, a jego dane podlegają licencji z atrybucją. Szczegóły sprawdź w ich dokumentacji. amodb to płatne API dla seriali, filmów i osób, z limitami liczonymi na klucz i ścieżkami TMDB v3. Wybieraj według zakresu i budżetu.

## Wybierz według zakresu i budżetu

TVmaze obejmuje tylko seriale. Jest darmowe jako publiczne API z limitami na adres IP, a jego dane podlegają licencji z atrybucją, więc szczegóły sprawdź w ich dokumentacji. amodb jest płatne i obejmuje seriale, filmy i osoby. Jeśli twoja aplikacja to tracker seriali, a darmowe źródło spełnia twoje potrzeby, TVmaze to rozsądny start. Jeśli pokazujesz też filmy, strony aktorów lub plakaty w kilku językach, jeden klucz amodb zastępuje kilka źródeł.

## Co poszczególne zakresy znaczą dla twojej aplikacji

| Twoja aplikacja pokazuje | TVmaze                   | amodb                                          |
| ------------------------ | ------------------------ | ---------------------------------------------- |
| Stronę serialu           | Tak                      | `GET /3/tv/{series_id}`                        |
| Listę odcinków           | Tak                      | `GET /3/tv/{series_id}/season/{season_number}` |
| Stronę filmu             | Brak filmów              | `GET /3/movie/{movie_id}`                      |
| Stronę aktora            | Sprawdź ich dokumentację | `GET /3/person/{person_id}` i połączone role   |
| Seriale emitowane dziś   | Sprawdź ich dokumentację | `GET /3/tv/airing_today`                       |
| Przetłumaczony opis      | Sprawdź ich dokumentację | Parametr `language`, 14 języków                |
| Wyniki z kilku serwisów  | Sprawdź ich dokumentację | Rozszerzenie `/ratings`                        |

Wiersz o filmach rozstrzyga większość przypadków. Jeśli nie masz stron filmów, dodatkowy zakres nic ci nie daje.

## Luki do sprawdzenia przed przejściem

Endpointy sezonów i odcinków podążają za kształtem TMDB, a kilka ich części wraca pustych. Przetestuj ekrany, które ich używają.

- **Obsada odcinka.** W odcinku `cast` to pusta tablica. `guest_stars` i `crew` są wypełnione, a główną obsadę ma wywołanie `/credits` serialu.
- **Dodatki sezonów.** `images`, `videos` i `translations` sezonów są puste, więc plakat sezonu pochodzi z rekordu sezonu, a nie z listy obrazów.
- **Zewnętrzne ID.** `external_ids` sezonów i odcinków mają wszystkie wartość null. Odcinki przypisuj do własnych rekordów według `season_number` i `episode_number`.
- **Twórcy.** `created_by` w serialu jest puste dla większości seriali.
- **Brak kanału zmian.** amodb nie ma endpointu wypisującego seriale zmienione od daty.

## Porównanie funkcji

| Funkcja           | TVmaze                                                 | amodb                                                        |
| ----------------- | ------------------------------------------------------ | ------------------------------------------------------------ |
| Model cenowy      | Darmowe w użyciu publiczne API                         | Przedpłata, od 1 do 24 miesięcy na zakup                     |
| Darmowy plan      | Tak, całe publiczne API                                | Brak, ani wersji próbnej                                     |
| Uwierzytelnianie  | Sprawdź ich dokumentację                               | `api_key` lub nagłówek Bearer                                |
| Format odpowiedzi | JSON, sprawdź ich dokumentację                         | JSON w kształcie TMDB v3                                     |
| Języki            | Sprawdź ich dokumentację                               | 14 języków interfejsu                                        |
| Filmy             | Nie                                                    | Tak                                                          |
| Seriale           | Tak, jedyny profil                                     | Tak                                                          |
| Osoby             | Sprawdź ich dokumentację                               | Tak                                                          |
| Obrazy            | Sprawdź ich dokumentację                               | `img.amodb.dev`, dziesięć tokenów rozmiaru                   |
| Oceny             | Sprawdź ich dokumentację                               | Pięć źródeł, gdy znane                                       |
| Limit żądań       | Na adres IP, liczby sprawdź w ich dokumentacji         | 20, 40 lub 120 na minutę na klucz                            |
| Użycie komercyjne | Dane na licencji z atrybucją, sprawdź ich dokumentację | Płatne plany, zobacz [cennik](https://amodb.dev/pl/pricing/) |
| Zgodność          | Własne API                                             | Odczyty TMDB v3 i OMDb                                       |

## Czym amodb się różni

- **Limit podąża za kluczem.** Wszystkie twoje serwery dzielą jeden licznik w przesuwanym oknie 60 sekund, a odpowiedzi niosą `X-RateLimit-Remaining`. Nic nie zależy od tego, z jakiego adresu wychodzi żądanie.
- **Filmy, seriale i osoby w jednym miejscu.** Jeden klient, jeden format błędów i jeden zestaw nagłówków obejmują całą aplikację.
- **Języki.** Tytuły i opisy wracają w dowolnym z 14 języków, a `original_name` zachowuje tytuł oryginalny.
- **Ugruntowany protokół.** Biblioteki napisane pod odczyty TMDB v3 działają z nowym bazowym URL. Endpointy seriali zobacz na stronie [API seriali](https://amodb.dev/pl/tv-show-api/).

## Kiedy TVmaze pasuje lepiej

- **Brak budżetu.** Jest darmowe, więc projekt studencki lub weekendowy tracker nie wymaga płatności. amodb nie ma darmowego planu ani wersji próbnej.
- **Tylko seriale, prosto.** Jeśli twój model danych ma seriale i odcinki i nic więcej, API skupione na serialach mu odpowiada.
- **Własne konwencje.** Aplikacje zbudowane już wokół modelu TVmaze oszczędzają pracę, zostając przy nim.

Jeśli zostajesz, przestrzegaj jego licencji z atrybucją. Brzmienie sprawdź w ich dokumentacji.

## Przejście na amodb

Zacznij od zadania mapowania. Odczytaj zewnętrzne ID wymienione w zapisanych rekordach TVmaze (nazwy pól sprawdź w ich dokumentacji) i rozwiąż je przez `/3/find`. Poniższy program mapuje jedno ID z IMDb na serial i wypisuje datę następnego odcinka.

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

Typ wskaźnikowy `NextEpisode` obsługuje `null`, które zwracają zakończone seriale. Wykonaj mapowanie raz, zapisz ID amodb przy każdym swoim rekordzie i od tej pory wywołuj `/3/tv/{id}`. Na 429 odpowiada się `Retry-After`, a strona [wyszukiwanie po zewnętrznym ID](https://amodb.dev/pl/find-by-external-id/) wymienia inne źródła ID.

## Wymiarowanie nocnej synchronizacji

Załóżmy, że co noc odświeżasz 300 seriali. To 300 żądań, bo jedno wywołanie serialu zwraca jeden serial. Przy 20 żądaniach na minutę zadanie trwa 15 minut, przy 40 trwa 7.5 minuty, a przy 120 trwa 2.5 minuty. Dodaj do każdego wywołania `append_to_response=credits,ratings`, aby obsada i wyniki przyszły w tym samym żądaniu zamiast kosztować po dwa kolejne na serial. Czytaj `X-RateLimit-Remaining` i wstrzymaj się, gdy dojdzie do zera, a potem kontynuuj po `X-RateLimit-Reset` sekundach.

## Cennik

amodb jest przedpłacone i nigdy nie odnawia się samo. Wybierz 1, 3, 6, 12 lub 24 miesiące i plan z 20, 40 lub 120 żądaniami na minutę. Dłuższe okresy są tańsze o 10, 20, 30 lub 40 procent, a każdy plan obejmuje wszystkie dane. Kwoty są na stronie [cennik](https://amodb.dev/pl/pricing/).

## Pytania i odpowiedzi

### Czy API TVmaze jest darmowe?

TVmaze oferuje darmowe publiczne API z limitami na adres IP, a jego dane podlegają licencji z atrybucją. Aktualne limity i tekst licencji sprawdź w ich dokumentacji. amodb jest płatne i nie ma darmowego planu.

### Czy amodb obejmuje filmy, a nie tylko seriale?

Tak. Filmy, seriale, sezony, odcinki i osoby są pod tym samym kluczem i bazowym URL. TVmaze obejmuje tylko seriale, więc strona filmu w twojej aplikacji potrzebuje tam drugiego źródła.

### Jak zmapować seriale z TVmaze na ID amodb?

Rekordy seriali TVmaze wymieniają ID z innych baz, takich jak IMDb (dokładne pola sprawdź w ich dokumentacji). Wywołaj endpoint find z ID z IMDb i external_source=imdb_id, a potem zapisz ID z tv_results.

### Dlaczego limit na adres IP ma znaczenie?

Limit związany z adresem IP dzieli wszystko, co za nim stoi, na przykład pula serwerów lub sieć biurowa. amodb liczy żądania na klucz w przesuwanym oknie 60 sekund, skąd by nie przychodziły wywołania.

### Czy mogę pokazać datę następnego odcinka serialu?

Tak. Szczegóły serialu zwracają next_episode_to_air z air_date, season_number i episode_number albo null, gdy nic nie zaplanowano. Edge trzyma szczegóły w cache przez 6 godzin, więc odświeżaj kilka razy dziennie.

## Powiązane strony

- [API seriali: seriale, sezony i odcinki](https://amodb.dev/pl/tv-show-api/): API seriali ze statusem, sieciami telewizyjnymi, sezonami, odcinkami i next_episode_to_air. JSON zgodny z TMDB v3 w 14 językach, od 20 żądań na minutę.
- [API przewodnika po odcinkach](https://amodb.dev/pl/episode-guide-api/): API przewodnika po odcinkach z endpointami TMDB v3: nazwy, daty emisji, czas trwania, kadry i listy grup odcinków dowolnego serialu w 14 językach.
- [API sezonów i odcinków seriali](https://amodb.dev/pl/tv-seasons-episodes/): API sezonów i odcinków seriali z tymi samymi ścieżkami i JSON co TMDB v3. Odczytaj sezon ze wszystkimi odcinkami albo jeden odcinek z datą emisji i kadrem.
- [Wyszukiwanie po zewnętrznym ID](https://amodb.dev/pl/find-by-external-id/): Znajdź film, serial lub osobę po ID z IMDb, TVDB, Wikidata lub Kinopoisk przez endpoint find z TMDB oraz odczytaj zewnętrzne ID i fakty z Wikidata o tytule.
- [Limity żądań](https://amodb.dev/pl/rate-limits/): amodb limituje klucz liczbą żądań na minutę w przesuwanym oknie 60 sekund: 20, 40 lub 120 zależnie od planu. Czytaj nagłówki limitu i obsłuż 429 z Retry-After.
- [Cennik](https://amodb.dev/pl/pricing/): Plany amodb płatne z góry różnią się tylko limitem żądań na minutę: 20, 40 lub 120. Każdy plan ma wszystkie dane TMDB v3 i OMDb. Bez odnowień i okresu próbnego.

Zaktualizowano: 2026-10-18. Source: https://amodb.dev/pl/tvmaze-api-alternative/
