Ендпойнт, съвместим с OMDb

GET https://api.amodb.dev/omdb/ отговаря на заявки в стил OMDb със същите имена на параметри и полета. Търсете заглавие по IMDb id през i или по заглавие през t, или търсете списък през s. Връзките към постери сочат към img.amodb.dev. Поддържат се само r=json, филми и сериали. Сменете базовия URL и ключа и типичният клиент продължава да работи.

Обновено Отвори като Markdown

Търсене на заглавие по IMDb id или заглавие

GET https://api.amodb.dev/omdb/ връща едно заглавие като плосък JSON с имената на полетата на OMDb. Подайте i за IMDb id, например tt0137523, или t за заглавие. Удостоверяването е чрез параметъра на заявката apikey. В отговора Response е True при успех и False при неуспех.

Примерът зарежда Fight Club по IMDb id и спира с текста на грешката на OMDb, когато Response е 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)
}

Параметри

  • apikeyзаявказадължителен
    Вашият ключ за amodb.
  • iзаявкаедин от i, t, s
    IMDb id на заглавието: tt плюс 7 до 9 цифри, например tt0137523.
  • tзаявкаедин от i, t, s
    Заглавие за търсене, връща най-доброто съвпадение.
  • sзаявкаедин от i, t, s
    Текст за търсене от поне 3 букви, връща списък.
  • typeзаявка
    movie или series. episode не намира нищо.
  • yзаявка
    Година на излизане.
  • plotзаявка
    short или full. По подразбиране short.
  • pageзаявка
    Страница с резултати от търсене, от 1 до 100. Ползва се със s.
  • rзаявка
    Само json. Всяка друга стойност връща HTTP 400.

Параметрите Season, Episode, callback и v от оригиналното OMDb API не се поддържат и се игнорират.

Полета на отговора

ПолеБележки
Title, Year, Rated, Released, RuntimeТекст. Released изглежда като 15 Oct 1999.
Genre, Director, Writer, ActorsИмена, разделени със запетая.
Plot, Language, Country, AwardsТекст.
PosterАдрес на https://img.amodb.dev/t/p/w300/.
RatingsМасив от обекти със Source и Value.
Metascore, imdbRating, imdbVotes, imdbIDТекст, като броят гласове е записан със запетаи.
Typemovie или series.
DVD, BoxOffice, Production, WebsiteСамо за филми. BoxOffice носи стойност, когато е известна. DVD, Production и Website винаги са N/A.
totalSeasonsСамо за сериали, като текст. Отговорите за сериали нямат DVD, BoxOffice, Production или Website.
ResponseTrue или False, винаги низ.

Полетата следват OMDb, така че съществуващ парсер за OMDb не се нуждае от промяна освен на базовия URL.

Примерен отговор

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"
}

За сериал като The Wire (i=tt0306414) отговорът завършва с "Type": "series", "totalSeasons": "5" и "Response": "True".

Търсене със s

Подайте s, за да получите списък вместо едно заглавие. Всяка страница съдържа 10 елемента, а totalResults дава общия брой като низ. Поискайте page=2 за елементи от 11 до 20 и продължавайте, докато прочетете totalResults елемента. Страница след последната отговаря с Movie not found!.

curl
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"
ПолеБележки
SearchМасив до 10 елемента с Title, Year, imdbID, Type, Poster.
totalResultsБроят на всички съвпадения, като низ.
ResponseTrue или 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"
}

Списъкът е съкратен до 2 от 10 елемента.

Как да четете масива Ratings

Ratings съдържа по един обект за източник, всеки със Source и Value, а Value е текст като 8.8/10. Източниците са Internet Movie Database, Rotten Tomatoes и Metacritic, като са изброени само тези, които са известни за заглавието. Плоските полета imdbRating, imdbVotes и Metascore повтарят част от същите данни. Разделете Value по наклонената черта, ако ви трябва число. За типизирани числа и оценка от Kinopoisk и TMDB ползвайте вместо това ендпойнта рейтинги.

Грешки

Неуспешните търсения връщат {"Response":"False","Error":"..."}. Повечето идват с HTTP 200, така че четете Error и разклонявайте по текста, а не само по HTTP статуса.

Текст на ErrorHTTPКога
Movie not found!200Никое заглавие не съвпада с t, стойността на i е валидна, но непозната, или страницата на търсенето е след последната.
Incorrect IMDb ID.200Стойността на i няма формата на IMDb id.
Too many results.200Текстът за търсене е по-кратък от 3 букви или съвпада с твърде много заглавия. Удължете текста или добавете type или y.
Something went wrong.200Не е изпратен нито i, нито t, нито s.
Only r=json is supported.400r е зададен на нещо различно от json.
No API key provided. или Invalid API key!401apikey липсва или е грешен.
Request limit reached!429Надхвърлен е лимитът на заявки в минута. Изчакайте Retry-After секунди.

Приключил план отговаря с HTTP 402. Вижте грешки и лимити на заявките.

Миграция на клиент на OMDb

Миграцията са две промени: базовият URL и ключът. Нищо друго в заявката не се променя.

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;

Махнете r=xml, ако го изпращате. Клиент, който чете епизоди, Season или callback, има нужда от друг източник за тези части. Лимитът е на ключ, така че извикванията в стил OMDb и извикванията в стил TMDB споделят един бюджет от 20, 40 или 120 заявки в минута.

Практически бележки

  • Третирайте всяка стойност като текст. Преобразувайте Year, imdbRating и totalResults сами и считайте N/A за липсваща.
  • Ползвайте plot=full само когато показвате дългото описание на сюжета. short държи отговорите по-малки.
  • Търсенията по i или t се кешират по-дълго от търсенията със s, така че повторно търсене връща запазения отговор.
  • За да получите TMDB id от IMDb id, извикайте търсене по външен идентификатор.
  • Постерите са с размер w300. За други размери построете адреса от poster_path в стил TMDB и списъка с размери на страницата изображения.
  • Дръжте ключа на сървър. apikey в URL адреса на страница се вижда от всеки посетител.