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.

Mis à jour le Voir en Markdown

Chercher un titre par id IMDb ou par titre

GET https://api.amodb.dev/omdb/ 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.

bashjspyphpgo
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êteobligatoire
    Votre clé amodb.
  • irequêtel'un de i, t, s
    Id IMDb du titre : tt plus 7 à 9 chiffres, par exemple tt0137523.
  • trequêtel'un de i, t, s
    Titre à chercher, renvoie la meilleure correspondance.
  • srequêtel'un de i, t, s
    Texte de recherche d'au moins 3 lettres, renvoie une liste.
  • typerequête
    movie ou series. episode ne trouve rien.
  • yrequête
    Année de sortie.
  • plotrequête
    short ou full. Par défaut short.
  • pagerequête
    Page de résultats de recherche, de 1 à 100. Utilisé avec s.
  • rrequête
    json uniquement. 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

ChampRemarques
Title, Year, Rated, Released, RuntimeTexte. Released ressemble à 15 Oct 1999.
Genre, Director, Writer, ActorsNoms séparés par des virgules.
Plot, Language, Country, AwardsTexte.
PosterAdresse sur https://img.amodb.dev/t/p/w300/.
RatingsTableau d'objets avec Source et Value.
Metascore, imdbRating, imdbVotes, imdbIDTexte, y compris le nombre de votes avec des virgules.
Typemovie ou series.
DVD, BoxOffice, Production, WebsiteFilms uniquement. BoxOffice porte une valeur quand elle est connue. DVD, Production et Website valent toujours N/A.
totalSeasonsSéries uniquement, sous forme de texte. Les réponses de séries n'ont ni DVD, ni BoxOffice, ni Production, ni Website.
ResponseTrue 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

JSON
{
  "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
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"
ChampRemarques
SearchTableau d'au plus 10 éléments avec Title, Year, imdbID, Type, Poster.
totalResultsNombre de toutes les correspondances, sous forme de chaîne.
ResponseTrue ou False.
JSON
{
  "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","Error":"..."}. 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 ErrorHTTPQuand
Movie not found!200Aucun 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.200La valeur de i n'a pas la forme d'un id IMDb.
Too many results.200Le texte de recherche fait moins de 3 lettres ou correspond à trop de titres. Allongez le texte ou ajoutez type ou y.
Something went wrong.200Aucun de i, t et s n'a été envoyé.
Only r=json is supported.400r est réglé sur autre chose que json.
No API key provided. ou Invalid API key!401L'apikey est absente ou fausse.
Request limit reached!429Au-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.

JavaScript
// 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, imdbRating et totalResults, et traitez N/A comme une valeur manquante.
  • N'utilisez plot=full que lorsque vous affichez le long résumé. short garde des réponses plus petites.
  • Les recherches par i ou t sont mises en cache plus longtemps que les recherches avec s : 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 du poster_path de style TMDB et de la liste des tailles de images.
  • Gardez la clé sur un serveur. Une apikey dans l'URL d'une page est visible de tous les visiteurs.