Scegli in base all'ambito e al budget
TVmaze copre solo le serie TV. È un'API pubblica gratuita con limiti per indirizzo IP, e i suoi dati sono sotto licenza con attribuzione, quindi controlla la loro documentazione per i dettagli. amodb è a pagamento e copre serie TV, film e persone. Se la tua app è un tracker di serie TV e una fonte gratuita soddisfa le tue esigenze, TVmaze è un inizio sensato. Se mostri anche film, pagine del cast o locandine in più lingue, una sola chiave amodb sostituisce più fonti.
Cosa significa ogni ambito per la tua app
| La tua app mostra | TVmaze | amodb |
|---|---|---|
| Una pagina di serie TV | Sì | GET /3/tv/{series_id} |
| Un elenco di episodi | Sì | GET / |
| Una pagina di film | Nessun film | GET / |
| Una pagina di attore | Vedi la loro documentazione | GET / e crediti combinati |
| Serie in onda oggi | Vedi la loro documentazione | GET /3/tv/airing_today |
| Una trama tradotta | Vedi la loro documentazione | Parametro language, 14 lingue |
| Punteggi da più siti | Vedi la loro documentazione | Estensione /ratings |
La riga dei film decide la maggior parte dei casi. Se non hai pagine di film, l'ambito in più non ha valore per te.
Lacune da controllare prima di migrare
Gli endpoint di stagioni ed episodi seguono la struttura TMDB, e alcune loro parti tornano vuote. Prova le schermate che li usano.
- Cast di un episodio. Su un episodio,
castè un array vuoto.guest_starsecrewsono compilati, e la chiamata/creditsdella serie contiene il cast principale. - Extra delle stagioni.
images,videosetranslationsdi una stagione sono vuoti, quindi la locandina di una stagione viene dalla scheda della stagione e non da un elenco di immagini. - ID esterni. Gli
external_idsdi stagioni ed episodi sono tutti nulli. Associa gli episodi ai tuoi record conseason_numberedepisode_number. - Autori.
created_bydi una serie è vuoto per la maggior parte delle serie. - Nessun feed delle modifiche. amodb non ha un endpoint che elenchi le serie modificate da una certa data.
Confronto delle funzionalità
| Funzionalità | TVmaze | amodb |
|---|---|---|
| Modello di prezzo | API pubblica di uso gratuito | Prepagato, da 1 a 24 mesi per acquisto |
| Piano gratuito | Sì, tutta l'API pubblica | Nessuno, e nessuna prova |
| Autenticazione | Vedi la loro documentazione | api_key o header Bearer |
| Formato della risposta | JSON, vedi la loro documentazione | JSON nel formato TMDB v3 |
| Lingue | Vedi la loro documentazione | 14 lingue dell'interfaccia |
| Film | No | Sì |
| Serie TV | Sì, il suo unico focus | Sì |
| Persone | Vedi la loro documentazione | Sì |
| Immagini | Vedi la loro documentazione | img.amodb.dev, dieci token di dimensione |
| Valutazioni | Vedi la loro documentazione | Cinque fonti, quando sono note |
| Limite di richieste | Per indirizzo IP, per i numeri vedi la loro documentazione | 20, 40 o 120 al minuto per chiave |
| Uso commerciale | Dati sotto licenza con attribuzione, vedi la loro documentazione | Piani a pagamento, vedi i prezzi |
| Compatibilità | La sua API | Letture TMDB v3 e OMDb |
Dove amodb è diverso
- Il limite segue la chiave. Tutti i tuoi server condividono un solo contatore in una finestra scorrevole di 60 secondi, e le risposte portano
X-RateLimit-Remaining. Nulla dipende dall'indirizzo da cui parte una richiesta. - Film, serie TV e persone in un solo posto. Un solo client, un solo formato di errore e un solo insieme di header coprono tutta l'app.
- Lingue. Titoli e trame tornano in una qualsiasi delle 14 lingue, e
original_nameconserva il titolo nativo. - Un protocollo consolidato. Le librerie scritte per le letture TMDB v3 funzionano con un nuovo URL di base. Vedi la pagina API per serie TV per gli endpoint delle serie.
Dove TVmaze è più adatto
- Nessun budget. L'uso è gratuito, quindi un progetto da studente o un tracker del fine settimana non richiede pagamenti. amodb non ha un piano gratuito né una prova.
- Solo serie TV, in modo semplice. Se il tuo modello di dati ha serie ed episodi e nient'altro, un'API incentrata sulle serie TV gli corrisponde.
- Le sue convenzioni. Le app già costruite attorno al modello di TVmaze risparmiano lavoro restando.
Se resti, rispetta la sua licenza con attribuzione. Per il testo controlla la loro documentazione.
Migrare ad amodb
Inizia con un job di associazione. Leggi gli ID esterni elencati dai tuoi record TVmaze salvati (per i nomi dei campi controlla la loro documentazione) e risolvili tramite /3/find. Il programma qui sotto associa un ID IMDb a una serie e stampa la data del prossimo episodio.
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)
}
}Il tipo puntatore di NextEpisode gestisce il null che restituiscono le serie concluse. Esegui l'associazione una volta, salva l'ID amodb con ciascuno dei tuoi record e da quel momento chiama /3/tv/{id}. Un 429 riceve risposta con Retry-After, e la pagina ricerca per ID esterno elenca le altre fonti di ID.
Dimensionare una sincronizzazione notturna
Supponi di aggiornare 300 serie ogni notte. Sono 300 richieste, perché una chiamata di serie restituisce una serie. A 20 richieste al minuto il job dura 15 minuti, a 40 dura 7,5 minuti e a 120 dura 2,5 minuti. Aggiungi append_ a ogni chiamata così cast e punteggi arrivano nella stessa richiesta, invece di costare due richieste in più per ogni serie. Leggi X-RateLimit-Remaining e fai una pausa quando arriva a zero, poi riprendi dopo i secondi di X-RateLimit-Reset.
Prezzi
amodb è prepagato e non si rinnova mai da solo. Scegli 1, 3, 6, 12 o 24 mesi e un piano da 20, 40 o 120 richieste al minuto. I periodi più lunghi costano il 10, 20, 30 o 40 per cento in meno, e ogni piano include tutti i dati. Gli importi sono nella pagina dei prezzi.