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 / |
| Stronę filmu | Brak filmów | GET / |
| Stronę aktora | Sprawdź ich dokumentację | GET / 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
castto pusta tablica.guest_starsicrewsą wypełnione, a główną obsadę ma wywołanie/creditsserialu. - Dodatki sezonów.
images,videositranslationssezonów są puste, więc plakat sezonu pochodzi z rekordu sezonu, a nie z listy obrazów. - Zewnętrzne ID.
external_idssezonów i odcinków mają wszystkie wartość null. Odcinki przypisuj do własnych rekordów wedługseason_numberiepisode_number. - Twórcy.
created_byw 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 |
| 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_namezachowuje tytuł oryginalny. - Ugruntowany protokół. Biblioteki napisane pod odczyty TMDB v3 działają z nowym bazowym URL. Endpointy seriali zobacz na stronie API seriali.
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.
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 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_, 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.