Ендпоінт, сумісний з 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, тому повторний запит повертає збережену відповідь.
  • Щоб отримати id TMDB за IMDb id, викличіть пошук за зовнішнім ID.
  • Постери мають розмір w300. Для інших розмірів побудуйте адресу з poster_path у стилі TMDB і списку розмірів з розділу API зображень.
  • Тримайте ключ на сервері. apikey в URL сторінки видно кожному відвідувачу.