Vyberte podle rozsahu a rozpočtu

TVmaze je jen pro seriály. Používá se zdarma jako veřejné API s limity na IP adresu a jeho data podléhají licenci s uvedením zdroje, podrobnosti proto ověřte v jejich dokumentaci. amodb je placené a pokrývá seriály, filmy a osoby. Pokud je vaše aplikace sledovač seriálů a bezplatný zdroj vám stačí, je TVmaze rozumný začátek. Pokud zobrazujete také filmy, stránky herců nebo plakáty ve více jazycích, jeden klíč amodb nahradí několik zdrojů.

Co jednotlivé rozsahy znamenají pro vaši aplikaci

Vaše aplikace zobrazujeTVmazeamodb
Stránku seriáluAnoGET /3/tv/{series_id}
Seznam epizodAnoGET /3/tv/{series_id}/season/{season_number}
Stránku filmuŽádné filmyGET /3/movie/{movie_id}
Stránku hercePodívejte se do jejich dokumentaceGET /3/person/{person_id} a sloučené záznamy účasti
Seriály vysílané dnesPodívejte se do jejich dokumentaceGET /3/tv/airing_today
Přeložený popisPodívejte se do jejich dokumentaceParametr language, 14 jazyků
Skóre z několika webůPodívejte se do jejich dokumentaceRozšíření /ratings

Řádek o filmech rozhoduje většinu případů. Pokud nemáte stránky filmů, nemá pro vás rozsah navíc žádnou hodnotu.

Mezery k ověření před přechodem

Endpointy sezón a epizod sledují tvar TMDB a několik jejich částí se vrací prázdných. Otestujte obrazovky, které je používají.

  • Obsazení epizody. U epizody je cast prázdné pole. guest_stars a crew jsou vyplněné a hlavní obsazení má volání /credits seriálu.
  • Doplňky sezón. images, videos a translations sezón jsou prázdné, plakát sezóny proto pochází ze záznamu sezóny, ne ze seznamu obrázků.
  • Externí ID. external_ids sezón a epizod jsou všechna null. Epizody k vlastním záznamům přiřazujte podle season_number a episode_number.
  • Tvůrci. created_by u seriálu je u většiny seriálů prázdné.
  • Žádný feed změn. amodb nemá endpoint, který by vypsal seriály změněné od data.

Srovnání funkcí

FunkceTVmazeamodb
Cenový modelBezplatně použitelné veřejné APIPředplatné, 1 až 24 měsíců na nákup
Bezplatný tarifAno, celé veřejné APIŽádný, ani zkušební verze
OvěřeníPodívejte se do jejich dokumentaceapi_key nebo hlavička Bearer
Formát odpovědiJSON, podívejte se do jejich dokumentaceJSON ve tvaru TMDB v3
JazykyPodívejte se do jejich dokumentace14 jazyků rozhraní
FilmyNeAno
SeriályAno, jediné zaměřeníAno
OsobyPodívejte se do jejich dokumentaceAno
ObrázkyPodívejte se do jejich dokumentaceimg.amodb.dev, deset tokenů velikostí
HodnoceníPodívejte se do jejich dokumentacePět zdrojů, kde jsou známé
Limit požadavkůNa IP adresu, čísla viz jejich dokumentace20, 40 nebo 120 za minutu na klíč
Komerční užitíData podléhají licenci s uvedením zdroje, podívejte se do jejich dokumentacePlacené tarify, viz ceník
KompatibilitaVlastní APIČtení TMDB v3 a OMDb

V čem se amodb liší

  • Limit následuje klíč. Všechny vaše servery sdílejí jeden čítač v klouzavém okně 60 sekund a odpovědi nesou X-RateLimit-Remaining. Nic nezávisí na tom, z jaké adresy požadavek odchází.
  • Filmy, seriály a osoby na jednom místě. Jeden klient, jeden formát chyb a jedna sada hlaviček pokryjí celou aplikaci.
  • Jazyky. Názvy a popisy přicházejí v kterémkoli ze 14 jazyků a original_name drží původní název.
  • Zavedený protokol. Knihovny napsané pro čtení TMDB v3 fungují s novou základní URL. Endpointy seriálů viz stránka API seriálů.

Kdy se TVmaze hodí lépe

  • Žádný rozpočet. Používá se zdarma, takže studentský projekt nebo víkendový sledovač nepotřebuje platbu. amodb nemá bezplatný tarif ani zkušební verzi.
  • Jen seriály, jednoduše. Pokud váš datový model má seriály a epizody a nic jiného, API zaměřené na seriály mu odpovídá.
  • Vlastní konvence. Aplikace už postavené kolem modelu TVmaze ušetří práci tím, že zůstanou.

Pokud zůstanete, dodržujte jeho licenci s uvedením zdroje. Znění ověřte v jejich dokumentaci.

Přechod na amodb

Začněte úlohou mapování. Přečtěte externí ID, která uvádějí vaše uložené záznamy TVmaze (názvy polí viz jejich dokumentace), a převeďte je přes /3/find. Program níže namapuje jedno ID z IMDb na seriál a vypíše datum další epizody.

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 ukazatele u NextEpisode zvládá null, které vracejí skončené seriály. Mapování proveďte jednou, uložte ID amodb ke každému svému záznamu a od té chvíle volejte /3/tv/{id}. Na 429 se odpovídá Retry-After a stránka hledání podle externího ID uvádí další zdroje ID.

Dimenzování noční synchronizace

Předpokládejte, že každou noc obnovujete 300 seriálů. To je 300 požadavků, protože jedno volání seriálu vrací jeden seriál. Při 20 požadavcích za minutu úloha trvá 15 minut, při 40 trvá 7.5 minuty a při 120 trvá 2.5 minuty. Ke každému volání přidejte append_to_response=credits,ratings, aby obsazení a skóre přišly ve stejném požadavku místo dvou dalších na seriál. Čtěte X-RateLimit-Remaining a při nule se pozastavte, pak pokračujte po X-RateLimit-Reset sekundách.

Ceník

amodb je předplacené a samo se nikdy neobnovuje. Zvolte 1, 3, 6, 12 nebo 24 měsíců a tarif s 20, 40 nebo 120 požadavky za minutu. Delší období jsou o 10, 20, 30 nebo 40 procent levnější a každý tarif zahrnuje všechna data. Částky jsou na stránce ceník.