Filmové plakáty z hostitele obrázků, který nepotřebuje klíč
URL plakátu je https:/. Část file je řetězec poster_path z libovolné odpovědi s filmem, vyhledáváním nebo seznamem a začíná lomítkem. Část size je název jako w342. Obrázky klíč nepotřebují, takže je prohlížeče a aplikace mohou načítat přímo. JSON, který prozradí název souboru, klíč stále vyžaduje, a amodb je nezávislé API mluvící protokolem TMDB v3, takže stávající kód pro obrázky po změně hostitele funguje dál.
Co dostanete:
- Plakáty, pozadí, loga, profilové fotografie a záběry epizod na jednom hostiteli.
- Deset názvů velikostí, od
w92pooriginal. - Seznamy plakátů pro každý titul, s jazykem, šířkou a výškou u každé položky.
- Cache na edge pro obrázky na 30 dní.
Jaká data dostanete
| Obrázek | Název souboru pochází z | Běžné velikosti |
|---|---|---|
| Filmový plakát | poster_path na /3/movie/{movie_id} a v seznamech | w92, w154, w185, w342, w500, w780, original |
| Pozadí | backdrop_path | w300, w780, w1280, original |
| Fotografie osoby | profile_path na /3/person/{person_id} | w185, h632, original |
| Logo společnosti nebo sítě | logo_path | w92, w154, w185, w300, w500, original |
| Záběr epizody | still_path | w92, w185, w300, original |
| Všechny plakáty jednoho titulu | GET / | pole posters |
Seriály, sezóny a kolekce nesou také poster_path. Přesné seznamy velikostí přečtěte jednou při startu z bloku images v GET /3/configuration místo jejich pevného zadání. Reference obrázků je na stránce obrázky.
Začněte ve 3 krocích
- Vyberte tarif na stránce ceník. Určuje rychlost volání JSON: 20, 40 nebo 120 požadavků za minutu.
- Vytvořte klíč v panelu účtu.
- Přečtěte
poster_pathz volání detailů nebo seznamu a pak jej umístěte za hostitele obrázků a název velikosti.
Příklad požadavku
Program v Go vypíše plakáty filmu The Matrix (ID filmu 603) v angličtině a bez textu, vybere nejširší, vypíše hotový srcset a uloží soubor w342. Klíč jde jen do volání 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)
}Zkrácená odpověď s obrázky pro include_: 3 ze 145 plakátů, anglický, nejširší anglický a bez textu. Odpověď obsahuje také backdrops a logos, zde vynechané.
{
"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
}
]
}Volba velikosti
Číslo v názvu w je šířka obrázku v pixelech a h632 je výška. Malé názvy šetří přenos, velké zachovávají detail na hustých displejích.
| Velikost | Typické použití |
|---|---|
w92 | Návrhy ve vyhledávání a drobné řádky seznamů |
w154, w185 | Husté seznamy a karty |
w342 | Dlaždice mřížky na telefonech |
w500 | Stránka detailu |
w780 | Velké obrazovky a displeje 2x |
original | Archiv nebo tisk, neškálovaný soubor |
Dejte prohlížeči několik šířek a nechte ho vybrat. Program v Go výše vypíše srcset s kandidáty 185w, 342w, 500w a 780w. Spárujte jej s atributem sizes, který odpovídá vašemu rozvržení, například sizes= na prvku img.
Jazyky plakátů
Každá položka v posters má hodnotu iso_639_1, buď kód jazyka, nebo null pro grafiku bez textu. Parametr include_image_language přijímá seznam kódů oddělených čárkou.
| Hodnota | Vrací |
|---|---|
en | Plakáty označené jako anglické |
en,null | Anglické plakáty a plakáty bez textu |
null | Jen plakáty bez textu |
Dobré pořadí záložních voleb je plakát v jazyce uživatele, pak bez textu, pak anglický. V každé skupině seřaďte podle width a při shodě ponechte první. vote_average a vote_count jsou u obrázků filmů a seriálů 0, takže nic neřadí. Jazyky plakátů popisují text vytištěný na grafice, takže se neřídí 14 jazyky rozhraní. Zkontrolujte iso_639_1 u toho, co přijde, protože sada závisí na titulu.
Ukládání a cachování plakátů
- Ukládejte
poster_path, ne celou URL. Z něj lze později sestavit libovolnou velikost. - Edge cachuje obrázky 30 dní. Detaily se cachují 6 hodin, takže po této době přečtěte
poster_pathznovu a zjistěte, zda se změnil. - Klíč držte na serveru. Prohlížeči posílejte jen URL obrázků.
- Když je
poster_pathnull, vykreslete zástupný obrázek místo rozbitého.
Jak si stojí v porovnání
| Schopnost | Scrapování stránek kvůli obrázkům | Vlastní hostované kopie | Hostitel obrázků amodb |
|---|---|---|---|
| Potřebný klíč | Žádný, platí podmínky každého webu | Žádný | Obrázky bez klíče |
| Varianty velikostí | Jakou velikost stránka nabízí | Každou generujete a ukládáte sami | Pevné názvy velikostí v URL, od w92 po original |
| Nalezení souboru | Parsovat HTML | Vaše vlastní databáze | poster_path v každé odpovědi |
| Jazyky grafiky | Stránku po stránce | Co jste nasbírali | include_image_language na endpointech obrázků |
| Úložiště a přenos | Vaše plus zdroje | Vaše | Prohlížeč načítá z img.amodb.dev |
| Cache | Vaše | Vaše | 30 dní na edge |
Ceník
Stahování obrázků klíč nenese. Váš tarif omezuje jen volání JSON, která vracejí názvy souborů, a odpovědi se seznamy už obsahují poster_path pro každou položku, takže jedno volání seznamu naplní celou mřížku. Vyberte 20, 40 nebo 120 požadavků za minutu na stránce ceník. Přístup je předplacený na 1, 3, 6, 12 nebo 24 měsíců se slevou 0, 10, 20, 30 a 40 procent, nic se neobnovuje samo a bezplatný tarif neexistuje.