Choisir selon la portée et le budget
TVmaze ne couvre que les séries. C'est une API publique gratuite avec des limites par adresse IP, et ses données sont sous licence d'attribution : consultez leur documentation pour les détails. amodb est payant et couvre séries, films et personnes. Si votre application est un suivi de séries et qu'une source gratuite répond à vos besoins, TVmaze est un départ raisonnable. Si vous affichez aussi des films, des pages de distribution ou des affiches en plusieurs langues, une seule clé amodb remplace plusieurs sources.
Ce que chaque portée signifie pour votre application
| Votre application affiche | TVmaze | amodb |
|---|---|---|
| Une page de série | Oui | GET /3/tv/{series_id} |
| Une liste d'épisodes | Oui | GET / |
| Une page de film | Pas de films | GET / |
| Une page d'acteur | Voir leur documentation | GET / et crédits combinés |
| Les séries diffusées aujourd'hui | Voir leur documentation | GET /3/tv/airing_today |
| Un résumé traduit | Voir leur documentation | Paramètre language, 14 langues |
| Les notes de plusieurs sites | Voir leur documentation | Extension /ratings |
La ligne des films tranche la plupart des cas. Si vous n'avez pas de pages de films, la portée supplémentaire ne vous apporte rien.
Écarts à vérifier avant de migrer
Les points de terminaison de saisons et d'épisodes suivent la forme TMDB, et quelques-unes de leurs parties reviennent vides. Testez les écrans qui les utilisent.
- Distribution d'un épisode. Sur un épisode,
castest un tableau vide.guest_starsetcrewsont remplis, et l'appel/creditsde la série contient la distribution principale. - Extras de saison. Les
images,videosettranslationsd'une saison sont vides : l'affiche d'une saison vient donc de la fiche de saison et non d'une liste d'images. - Identifiants externes. Les
external_idsdes saisons et des épisodes sont tous nuls. Associez les épisodes à vos propres données parseason_numberetepisode_number. - Créateurs.
created_bysur une série est vide pour la plupart des séries. - Pas de flux de changements. amodb n'a pas de point de terminaison qui liste les séries modifiées depuis une date.
Comparatif des fonctionnalités
| Fonctionnalité | TVmaze | amodb |
|---|---|---|
| Modèle tarifaire | API publique d'usage gratuit | Prépayé, de 1 à 24 mois par achat |
| Offre gratuite | Oui, toute l'API publique | Aucune, et pas d'essai |
| Authentification | Voir leur documentation | api_key ou en-tête Bearer |
| Format de réponse | JSON, voir leur documentation | JSON au format TMDB v3 |
| Langues | Voir leur documentation | 14 langues d'interface |
| Films | Non | Oui |
| Séries | Oui, son seul objectif | Oui |
| Personnes | Voir leur documentation | Oui |
| Images | Voir leur documentation | img.amodb.dev, dix jetons de taille |
| Notes | Voir leur documentation | Cinq sources quand elles sont connues |
| Limite de débit | Par adresse IP, voir leur documentation pour les chiffres | 20, 40 ou 120 par minute et par clé |
| Usage commercial | Données sous licence d'attribution, voir leur documentation | Offres payantes, voir les tarifs |
| Compatibilité | Sa propre API | Lectures TMDB v3 et OMDb |
Ce qui distingue amodb
- La limite suit la clé. Tous vos serveurs partagent un seul compteur dans une fenêtre glissante de 60 secondes, et les réponses portent
X-RateLimit-Remaining. Rien ne dépend de l'adresse d'où part une requête. - Films, séries et personnes au même endroit. Un seul client, un seul format d'erreur et un seul jeu d'en-têtes couvrent toute l'application.
- Langues. Titres et résumés reviennent dans l'une des 14 langues, et
original_namegarde le titre d'origine. - Un protocole établi. Les bibliothèques écrites pour les lectures TMDB v3 fonctionnent avec une nouvelle URL de base. Voir la page API de séries TV pour les points de terminaison de séries.
Quand TVmaze convient mieux
- Pas de budget. L'usage est gratuit : un projet d'étudiant ou un suivi de week-end n'a besoin d'aucun paiement. amodb n'a ni offre gratuite ni essai.
- Séries uniquement, en restant simple. Si votre modèle de données ne contient que des séries et des épisodes, une API centrée sur les séries lui correspond.
- Ses propres conventions. Les applications déjà construites autour du modèle TVmaze économisent du travail en y restant.
Si vous restez, respectez sa licence d'attribution. Consultez leur documentation pour le libellé.
Migrer vers amodb
Commencez par un travail d'association. Lisez les identifiants externes que listent vos fiches TVmaze stockées (voir leur documentation pour les noms de champs) et résolvez-les via /3/find. Le programme ci-dessous associe un identifiant IMDb à une série et affiche la date du prochain épisode.
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)
}
}Le type pointeur de NextEpisode gère le null que renvoient les séries terminées. Lancez l'association une fois, enregistrez l'identifiant amodb avec chacune de vos fiches, puis appelez /3/tv/{id} ensuite. Une réponse 429 vient avec Retry-After, et la page recherche par identifiant externe liste les autres sources d'identifiants.
Dimensionner une synchronisation nocturne
Supposons que vous actualisiez 300 séries chaque nuit. Cela fait 300 requêtes, puisqu'un appel de série renvoie une série. À 20 requêtes par minute, le travail prend 15 minutes, à 40 il prend 7,5 minutes, et à 120 il prend 2,5 minutes. Ajoutez append_ à chaque appel pour que la distribution et les notes arrivent dans la même requête, au lieu de coûter deux requêtes de plus par série. Lisez X-RateLimit-Remaining et faites une pause quand il atteint zéro, puis reprenez après les secondes de X-RateLimit-Reset.
Tarifs
amodb est prépayé et ne se renouvelle jamais tout seul. Choisissez 1, 3, 6, 12 ou 24 mois et une offre de 20, 40 ou 120 requêtes par minute. Les périodes plus longues coûtent 10, 20, 30 ou 40 pour cent de moins, et chaque offre inclut toutes les données. Les montants sont sur les tarifs.