Endpoint compatible OMDb
GET https://api.amodb.dev/omdb/ répond aux requêtes de style OMDb avec les mêmes noms de paramètres et de champs. Cherchez un titre par id IMDb avec i ou par titre avec t, ou recherchez avec s. Les affiches pointent vers img.amodb.dev. Seuls r=json, films et séries sont servis. Changez l'URL de base et la clé : un client typique continue de marcher.
Chercher un titre par id IMDb ou par titre
GET https:/ renvoie un titre sous forme de JSON plat avec les noms de champs d'OMDb. Passez i pour un id IMDb comme tt0137523, ou t pour un titre. L'authentification se fait par le paramètre de requête apikey. La réponse a Response à True en cas de succès et à False en cas d'échec.
L'exemple charge Fight Club par id IMDb et s'arrête avec le texte d'erreur d'OMDb quand Response vaut False.
curl -sf "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"const params = new URLSearchParams({ i: 'tt0137523', plot: 'short', apikey: process.env.AMODB_KEY });
const res = await fetch(`https://api.amodb.dev/omdb/?${params}`);
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const data = await res.json();
if (data.Response === 'False') throw new Error(data.Error);
console.log(data.Title, data.Year, data.imdbRating);import os
import requests
r = requests.get(
"https://api.amodb.dev/omdb/",
params={"i": "tt0137523", "plot": "short", "apikey": os.environ["AMODB_KEY"]},
timeout=10,
)
r.raise_for_status()
data = r.json()
if data["Response"] == "False":
raise SystemExit(data["Error"])
print(data["Title"], data["Year"], data["imdbRating"])<?php
$query = http_build_query(['i' => 'tt0137523', 'plot' => 'short', 'apikey' => getenv('AMODB_KEY')]);
$ch = curl_init('https://api.amodb.dev/omdb/?' . $query);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
throw new RuntimeException("amodb returned $status");
}
$data = json_decode($body, true);
if ($data['Response'] === 'False') {
throw new RuntimeException($data['Error']);
}
echo $data['Title'], ' ', $data['Year'], ' ', $data['imdbRating'], PHP_EOL;package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"os"
"time"
)
type Title struct {
Title string `json:"Title"`
Year string `json:"Year"`
ImdbRating string `json:"imdbRating"`
Response string `json:"Response"`
Error string `json:"Error"`
}
func main() {
q := url.Values{"i": {"tt0137523"}, "plot": {"short"}, "apikey": {os.Getenv("AMODB_KEY")}}
client := &http.Client{Timeout: 10 * time.Second}
res, err := client.Get("https://api.amodb.dev/omdb/?" + q.Encode())
if err != nil {
panic(err)
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
panic(res.Status)
}
var t Title
if err := json.NewDecoder(res.Body).Decode(&t); err != nil {
panic(err)
}
if t.Response == "False" {
panic(t.Error)
}
fmt.Println(t.Title, t.Year, t.ImdbRating)
}Paramètres
apikeyrequêteobligatoireVotre clé amodb.irequêtel'un dei,t,sId IMDb du titre :ttplus 7 à 9 chiffres, par exemplett0137523.trequêtel'un dei,t,sTitre à chercher, renvoie la meilleure correspondance.srequêtel'un dei,t,sTexte de recherche d'au moins 3 lettres, renvoie une liste.typerequêtemovieouseries.episodene trouve rien.yrequêteAnnée de sortie.plotrequêteshortoufull. Par défautshort.pagerequêtePage de résultats de recherche, de 1 à 100. Utilisé avecs.rrequêtejsonuniquement. Toute autre valeur renvoie HTTP 400.
Les paramètres Season, Episode, callback et v de l'API OMDb d'origine ne sont pas pris en charge et sont ignorés.
Champs de la réponse
| Champ | Remarques |
|---|---|
Title, Year, Rated, Released, Runtime | Texte. Released ressemble à 15 Oct 1999. |
Genre, Director, Writer, Actors | Noms séparés par des virgules. |
Plot, Language, Country, Awards | Texte. |
Poster | Adresse sur https:/. |
Ratings | Tableau d'objets avec Source et Value. |
Metascore, imdbRating, imdbVotes, imdbID | Texte, y compris le nombre de votes avec des virgules. |
Type | movie ou series. |
DVD, BoxOffice, Production, Website | Films uniquement. BoxOffice porte une valeur quand elle est connue. DVD, Production et Website valent toujours N/A. |
totalSeasons | Séries uniquement, sous forme de texte. Les réponses de séries n'ont ni DVD, ni BoxOffice, ni Production, ni Website. |
Response | True ou False, toujours une chaîne. |
Les champs suivent OMDb : un analyseur OMDb existant n'a donc besoin d'aucun changement au-delà de l'URL de base.
Exemple de réponse
{
"Title": "Fight Club",
"Year": "1999",
"Rated": "R",
"Released": "15 Oct 1999",
"Runtime": "139 min",
"Genre": "Crime, Drama, Thriller",
"Director": "David Fincher",
"Writer": "Chuck Palahniuk, Jim Uhls",
"Actors": "Brad Pitt, Edward Norton, Meat Loaf",
"Plot": "A nameless first-person narrator attends support groups in an attempt to subdue his emotional state and relieve his insomniac state.",
"Language": "English",
"Country": "United States, Germany",
"Awards": "Nominated for 1 Oscar. 12 wins & 38 nominations total",
"Poster": "https://img.amodb.dev/t/p/w300/qkrH7rjYKU4KOwwIl6wF6H3ISvm.jpg",
"Ratings": [
{ "Source": "Internet Movie Database", "Value": "8.8/10" },
{ "Source": "Rotten Tomatoes", "Value": "81%" },
{ "Source": "Metacritic", "Value": "67/100" }
],
"Metascore": "67",
"imdbRating": "8.8",
"imdbVotes": "2,669,989",
"imdbID": "tt0137523",
"Type": "movie",
"DVD": "N/A",
"BoxOffice": "$38,003,039",
"Production": "N/A",
"Website": "N/A",
"Response": "True"
}Pour une série comme The Wire (i=tt0306414), la réponse se termine par "Type": "series", "totalSeasons": "5" et "Response": "True".
Rechercher avec s
Envoyez s pour obtenir une liste au lieu d'un seul titre. Chaque page contient 10 éléments, et totalResults donne le total sous forme de chaîne. Demandez page=2 pour les éléments 11 à 20, et continuez jusqu'à avoir lu totalResults éléments. Une page au-delà de la dernière répond Movie not found!.
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"| Champ | Remarques |
|---|---|
Search | Tableau d'au plus 10 éléments avec Title, Year, imdbID, Type, Poster. |
totalResults | Nombre de toutes les correspondances, sous forme de chaîne. |
Response | True ou False. |
{
"Search": [
{
"Title": "The Matrix",
"Year": "1999",
"imdbID": "tt0133093",
"Type": "movie",
"Poster": "https://img.amodb.dev/t/p/w300/kEDbym5htJgDQNenjUtSJxAHysB.jpg"
},
{
"Title": "The Matrix Reloaded",
"Year": "2003",
"imdbID": "tt0234215",
"Type": "movie",
"Poster": "https://img.amodb.dev/t/p/w300/d0xVNNxIYxId2qHkqpgE39soOvD.jpg"
}
],
"totalResults": "20",
"Response": "True"
}La liste est réduite à 2 des 10 éléments.
Lire le tableau Ratings
Ratings contient un objet par source, chacun avec Source et Value, et Value est un texte comme 8.8/10. Les sources sont Internet Movie Database, Rotten Tomatoes et Metacritic, et seules celles connues pour le titre sont listées. Les champs plats imdbRating, imdbVotes et Metascore reprennent une partie des mêmes données. Découpez Value sur la barre oblique si vous avez besoin d'un nombre. Pour des nombres typés et une note Kinopoisk et TMDB, utilisez plutôt le point de terminaison des notes.
Erreurs
Les échecs de recherche renvoient {"Response":"False",. La plupart viennent avec HTTP 200 : lisez donc Error et décidez d'après le texte, pas seulement d'après le statut HTTP.
Texte de Error | HTTP | Quand |
|---|---|---|
Movie not found! | 200 | Aucun titre ne correspond à t, la valeur de i est valide mais inconnue, ou une page de recherche est au-delà de la dernière. |
Incorrect IMDb ID. | 200 | La valeur de i n'a pas la forme d'un id IMDb. |
Too many results. | 200 | Le texte de recherche fait moins de 3 lettres ou correspond à trop de titres. Allongez le texte ou ajoutez type ou y. |
Something went wrong. | 200 | Aucun de i, t et s n'a été envoyé. |
Only r= | 400 | r est réglé sur autre chose que json. |
No API key provided. ou Invalid API key! | 401 | L'apikey est absente ou fausse. |
Request limit reached! | 429 | Au-dessus de vos requêtes par minute. Attendez les secondes de Retry-After. |
Une offre terminée répond HTTP 402. Voir erreurs et limites de débit.
Migrer un client OMDb
La migration tient en deux modifications : l'URL de base et la clé. Rien d'autre ne change dans la requête.
// Before: the base URL and key of your current OMDb setup.
// After:
const OMDB_BASE = 'https://api.amodb.dev/omdb/';
const OMDB_KEY = process.env.AMODB_KEY;Supprimez r=xml si vous l'envoyez. Un client qui lit des épisodes, Season ou callback a besoin d'une autre source pour ces parties. La limite de débit est par clé : les appels de style OMDb et les appels de style TMDB partagent donc un même budget de 20, 40 ou 120 requêtes par minute.
Remarques pratiques
- Traitez chaque valeur comme du texte. Convertissez vous-même
Year,imdbRatingettotalResults, et traitezN/Acomme une valeur manquante. - N'utilisez
plot=fullque lorsque vous affichez le long résumé.shortgarde des réponses plus petites. - Les recherches par
ioutsont mises en cache plus longtemps que les recherches avecs: une recherche répétée renvoie donc la réponse stockée. - Pour obtenir un id TMDB à partir d'un id IMDb, appelez la recherche par identifiant externe.
- Les affiches sont en
w300. Pour d'autres tailles, construisez l'adresse à partir duposter_pathde style TMDB et de la liste des tailles de images. - Gardez la clé sur un serveur. Une
apikeydans l'URL d'une page est visible de tous les visiteurs.