נקודת קצה תואמת OMDb
GET https://api.amodb.dev/omdb/ עונה לבקשות בסגנון OMDb עם אותם שמות פרמטרים ושדות. מחפשים כותר לפי מזהה IMDb עם i או לפי כותרת עם t, או מחפשים עם s. קישורי פוסטר מצביעים על img.amodb.dev. מוגשים רק r=json, סרטים וסדרות. מחליפים את כתובת הבסיס ואת המפתח, ולקוח טיפוסי ממשיך לעבוד.
חיפוש כותר לפי מזהה IMDb או לפי כותרת
GET https:/ מחזיר כותר אחד כ-JSON שטוח עם שמות שדות של OMDb. העבירו i למזהה IMDb כמו tt0137523, או t לכותרת. האימות הוא פרמטר השאילתה apikey. בתגובה Response הוא True בהצלחה ו-False בכשל.
הדוגמה טוענת את Fight Club לפי מזהה IMDb ונעצרת עם טקסט השגיאה של OMDb כש-Response הוא 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)
}פרמטרים
apikeyשאילתהחובהמפתח amodb שלכם.iשאילתהאחד מ-i,t,sמזהה IMDb של הכותר: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 מה-API המקורי של OMDb אינם נתמכים ומתעלמים מהם.
שדות התגובה
| שדה | הערות |
|---|---|
Title, Year, Rated, Released, Runtime | טקסט. Released נראה כמו 15 Oct 1999. |
Genre, Director, Writer, Actors | שמות מופרדים בפסיקים. |
Plot, Language, Country, Awards | טקסט. |
Poster | כתובת ב-https:/. |
Ratings | מערך אובייקטים עם Source ו-Value. |
Metascore, imdbRating, imdbVotes, imdbID | טקסט, כולל מספר ההצבעות עם פסיקים. |
Type | movie או series. |
DVD, BoxOffice, Production, Website | סרטים בלבד. ב-BoxOffice יש ערך כשהוא ידוע. DVD, Production ו-Website תמיד N/A. |
totalSeasons | סדרות בלבד, כטקסט. בתגובות סדרה אין DVD, BoxOffice, Production או Website. |
Response | True או False, תמיד מחרוזת. |
השדות עוקבים אחרי OMDb, ולכן מפענח OMDb קיים לא צריך שום שינוי מלבד כתובת הבסיס.
תגובה לדוגמה
{
"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 -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"| שדה | הערות |
|---|---|
Search | מערך של עד 10 פריטים עם Title, Year, imdbID, Type, Poster. |
totalResults | מספר כל ההתאמות, כמחרוזת. |
Response | True או 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"
}הרשימה קוצרה ל-2 מתוך 10 פריטים.
קריאת המערך Ratings
Ratings מחזיק אובייקט אחד לכל מקור, כל אחד עם Source ו-Value, וה-Value הוא טקסט כמו 8.8/10. המקורות הם Internet Movie Database, Rotten Tomatoes ו-Metacritic, ורק אלה שידועים לכותר מופיעים. השדות השטוחים imdbRating, imdbVotes ו-Metascore חוזרים על חלק מאותם נתונים. פצלו את Value לפי הלוכסן אם אתם צריכים מספר. למספרים עם טיפוסים ולציוני Kinopoisk ו-TMDB השתמשו במקום זה בנקודת הקצה של דירוגים.
שגיאות
כשלי חיפוש מחזירים {"Response":"False",. רובם מגיעים עם HTTP 200, ולכן קראו את Error והסתעפו לפי הטקסט, לא לפי סטטוס ה-HTTP בלבד.
טקסט Error | HTTP | מתי |
|---|---|---|
Movie not found! | 200 | אין כותר שמתאים ל-t, ערך i תקין אבל לא מוכר, או עמוד חיפוש אחרי האחרון. |
Incorrect IMDb ID. | 200 | ערך i אינו בצורה של מזהה IMDb. |
Too many results. | 200 | טקסט החיפוש קצר מ-3 אותיות או שמתאים ליותר מדי כותרים. הארכו את הטקסט או הוסיפו type או y. |
Something went wrong. | 200 | לא נשלח אף אחד מ-i, t ו-s. |
Only r= | 400 | r קבוע לכל דבר מלבד json. |
No API key provided. או Invalid API key! | 401 | ה-apikey חסר או שגוי. |
Request limit reached! | 429 | מעל הבקשות שלכם לדקה. המתינו Retry-After שניות. |
מסלול שהסתיים עונה HTTP 402. ראו שגיאות ומגבלות קצב.
מעבר מלקוח OMDb
המעבר הוא שני שינויים: כתובת הבסיס והמפתח. שום דבר אחר בבקשה לא משתנה.
// 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 ממזהה IMDb, קראו לנקודת הקצה חיפוש לפי מזהה חיצוני.
- פוסטרים הם ב-
w300. לגדלים אחרים בנו את הכתובת מ-poster_pathבסגנון TMDB ומרשימת הגדלים בעמוד תמונות. - שמרו את המפתח בשרת.
apikeyבכתובת עמוד גלוי לכל מבקר.