Постери на филми от хост за изображения, който не иска ключ
URL адресът на постер е https:/. Частта file е низът poster_path от всеки отговор за филм, търсене или списък и започва с наклонена черта. Частта size е име като w342. Изображенията не искат ключ, така че браузъри и приложения могат да ги зареждат директно. JSON, който ви дава името на файла, още иска ключа ви, а amodb е независимо API, което работи по протокола на TMDB v3, така че съществуващ код за изображения продължава да работи след смяна на хоста.
Какво получавате:
- Постери, фонови изображения, лога, профилни снимки и кадри от епизоди на един хост.
- Десет имена на размери, от
w92доoriginal. - Списъци с постери за заглавие, с език, ширина и височина във всеки елемент.
- 30-дневен edge кеш за изображенията.
Какви данни получавате
| Изображение | Името на файла идва от | Обичайни размери |
|---|---|---|
| Постер на филм | poster_path в /3/movie/{movie_id} и в списъци | w92, w154, w185, w342, w500, w780, original |
| Фоново изображение | backdrop_path | w300, w780, w1280, original |
| Снимка на личност | profile_path в /3/person/{person_id} | w185, h632, original |
| Лого на компания или мрежа | logo_path | w92, w154, w185, w300, w500, original |
| Кадър от епизод | still_path | w92, w185, w300, original |
| Всички постери на едно заглавие | GET / | Масив posters |
Сериалите, сезоните и колекциите също носят poster_path. Четете точните списъци с размери веднъж при старт от блока images на GET /3/configuration, вместо да ги вписвате в кода. Справочникът за изображенията е на страницата изображения.
Започнете в 3 стъпки
- Изберете план на страницата с цените. Той определя скоростта на JSON извикванията: 20, 40 или 120 заявки в минута.
- Създайте ключ в личния си профил.
- Прочетете
poster_pathот извикване за детайли или списък, после го сложете зад хоста за изображения и име на размер.
Пример със заявка
Go програмата изброява постерите на The Matrix (id на филма 603) на английски и без текст, избира най-широкия, отпечатва готов srcset и записва файла w342. Ключът отива само към JSON извикването.
# the JSON call needs the key
curl -s "https://api.amodb.dev/3/movie/603/images?include_image_language=en,null" \
-H "Authorization: Bearer $AMODB_KEY"
# the image call does not
curl -s -o poster.jpg "https://img.amodb.dev/t/p/w342/aOIuZAjPaRIE6CMzbazvcHuHXDc.jpg"package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"strings"
"time"
)
const imgBase = "https://img.amodb.dev/t/p/"
type poster struct {
FilePath string `json:"file_path"`
Lang *string `json:"iso_639_1"`
Width int `json:"width"`
}
type images struct {
Posters []poster `json:"posters"`
}
func srcset(file string) string {
var parts []string
for _, w := range []int{185, 342, 500, 780} {
parts = append(parts, fmt.Sprintf("%sw%d%s %dw", imgBase, w, file, w))
}
return strings.Join(parts, ", ")
}
func main() {
client := &http.Client{Timeout: 10 * time.Second}
url := "https://api.amodb.dev/3/movie/603/images?include_image_language=en,null"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
res, err := client.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
panic(res.Status)
}
var imgs images
if err := json.NewDecoder(res.Body).Decode(&imgs); err != nil {
panic(err)
}
if len(imgs.Posters) == 0 {
fmt.Println("no posters")
return
}
best := imgs.Posters[0]
for _, p := range imgs.Posters {
if p.Width > best.Width {
best = p
}
}
lang := "none"
if best.Lang != nil {
lang = *best.Lang
}
fmt.Println("best poster:", best.FilePath, "language:", lang, "width:", best.Width)
fmt.Println("srcset:", srcset(best.FilePath))
// Image requests carry no key.
pic, err := client.Get(imgBase + "w342" + best.FilePath)
if err != nil {
panic(err)
}
defer pic.Body.Close()
if pic.StatusCode != http.StatusOK {
panic(pic.Status)
}
out, err := os.Create("poster.jpg")
if err != nil {
panic(err)
}
defer out.Close()
io.Copy(out, pic.Body)
}Съкратен отговор за изображения при include_: 3 от 145-те постера, един английски, най-широкият английски и един без текст. Отговорът съдържа още backdrops и logos, пропуснати тук.
{
"id": 603,
"posters": [
{
"aspect_ratio": 0.667,
"height": 2250,
"iso_639_1": "en",
"file_path": "/dXNAPwY7VrqMAo51EKhhCJfaGb5.jpg",
"vote_average": 0,
"vote_count": 0,
"width": 1500
},
{
"aspect_ratio": 0.667,
"height": 3000,
"iso_639_1": "en",
"file_path": "/aOIuZAjPaRIE6CMzbazvcHuHXDc.jpg",
"vote_average": 0,
"vote_count": 0,
"width": 2000
},
{
"aspect_ratio": 0.701,
"height": 1426,
"iso_639_1": null,
"file_path": "/iLWzJxatuwwMT76dtMuwh3FEp2X.jpg",
"vote_average": 0,
"vote_count": 0,
"width": 1000
}
]
}Изберете размер
Числото в размер w е ширината на изображението в пиксели, а h632 е височина. Малките имена пестят трафик, големите запазват детайлите на плътни екрани.
| Размер | Типична употреба |
|---|---|
w92 | Подсказки при търсене и съвсем малки редове в списъци |
w154, w185 | Плътни списъци и карти |
w342 | Плочки в мрежа на телефони |
w500 | Страница с детайли |
w780 | Големи екрани и дисплеи 2x |
original | Архив или печат, немащабираният файл |
Дайте на браузъра няколко ширини и го оставете да избира. Go програмата по-горе отпечатва srcset с кандидати 185w, 342w, 500w и 780w. Съчетайте го с атрибут sizes, който съответства на вашето оформление, например sizes= на елемента img.
Езици на постерите
Всеки елемент в posters има стойност iso_639_1, или езиков код, или null за оформление без текст. Параметърът include_image_language приема списък с кодове, разделени със запетая.
| Стойност | Какво връща |
|---|---|
en | Постери, отбелязани като английски |
en,null | Английски постери и постери без текст |
null | Само постери без текст |
Добър резервен ред е постерът на езика на потребителя, после такъв без текст, после английският. Във всяка група сортирайте по width и при равенство вземете първия. vote_average и vote_count са 0 при изображения на филми и сериали, така че не класират нищо. Езиците на постерите описват текста, отпечатан върху оформлението, затова не следват 14-те езика на интерфейса. Проверявайте iso_639_1 на получения резултат, защото наборът зависи от заглавието.
Съхранение и кеширане на постери
- Пазете
poster_path, а не пълния URL. От него по-късно може да се построи всеки размер. - Edge кешира изображенията 30 дни. Детайлите се кешират 6 часа, затова след това прочетете
poster_pathотново, за да видите дали се е променил. - Дръжте ключа на вашия сървър. Изпращайте на браузъра само URL адресите на изображенията.
- Когато
poster_pathе null, показвайте заместител вместо счупено изображение.
Как се сравнява
| Възможност | Обработка на страници за изображения | Собствени копия на хостинг | Хостът за изображения на amodb |
|---|---|---|---|
| Нужен ключ | Не, важат условията на всеки сайт | Не | Без ключ за изображения |
| Варианти на размера | Какъвто размер сервира страницата | Вие генерирате и пазите всеки | Фиксирани имена на размери в URL, от w92 до original |
| Намиране на файла | Разчитане на HTML | Вашата база данни | poster_path във всеки отговор |
| Езици на оформлението | Страница по страница | Каквото сте събрали | include_image_language на ендпойнтите за изображения |
| Хранилище и трафик | Вашите, плюс на източника | Вашите | Браузърът зарежда от img.amodb.dev |
| Кеш | Вашият | Вашият | 30 дни на edge |
Цени
Изтеглянията на изображения не носят ключ. Планът ви ограничава само JSON извикванията, които дават имена на файлове, а отговорите със списъци вече включват poster_path за всеки елемент, така че едно извикване на списък захранва цяла мрежа. Изберете 20, 40 или 120 заявки в минута на страницата с цените. Достъпът е предплатен за 1, 3, 6, 12 или 24 месеца с отстъпка 0, 10, 20, 30 и 40 процента, нищо не се подновява само и няма безплатен план.