# API postere filme și CDN de imagini

> Posterele se încarcă de la https://img.amodb.dev/t/p/{size}/{file} fără cheie API. Partea file este poster_path din orice răspuns de film, căutare sau listă. Numele dimensiunilor merg de la w92 la original, iar include_image_language alege posterele după limbă. Doar apelurile JSON care întorc numele fișierului cer cheia ta.

## Postere de filme de la o gazdă de imagini fără cheie

Un URL de poster este `https://img.amodb.dev/t/p/{size}/{file}`. Partea file este șirul `poster_path` din orice răspuns de film, căutare sau listă și începe cu o bară oblică. Partea size este un nume precum `w342`. Imaginile nu cer cheie, așa că browserele și aplicațiile le pot încărca direct. JSON-ul care îți spune numele fișierului cere în continuare cheia ta, iar amodb este un API independent care vorbește protocolul TMDB v3, deci codul existent pentru imagini continuă să funcționeze după schimbarea gazdei.

Ce primești:

- Postere, imagini de fundal, logo-uri, fotografii de profil și cadre de episod pe aceeași gazdă.
- Zece nume de dimensiuni, de la `w92` la `original`.
- Liste de postere pentru fiecare titlu, cu limba, lățimea și înălțimea pentru fiecare element.
- Cache la margine de 30 de zile pentru imagini.

## Ce date primești

| Imagine                    | Numele fișierului vine din                           | Dimensiuni uzuale                                         |
| -------------------------- | ---------------------------------------------------- | --------------------------------------------------------- |
| Poster de film             | `poster_path` din `/3/movie/{movie_id}` și din liste | `w92`, `w154`, `w185`, `w342`, `w500`, `w780`, `original` |
| Imagine de fundal          | `backdrop_path`                                      | `w300`, `w780`, `w1280`, `original`                       |
| Fotografie de persoană     | `profile_path` din `/3/person/{person_id}`           | `w185`, `h632`, `original`                                |
| Logo de companie sau rețea | `logo_path`                                          | `w92`, `w154`, `w185`, `w300`, `w500`, `original`         |
| Cadru de episod            | `still_path`                                         | `w92`, `w185`, `w300`, `original`                         |
| Toate posterele unui titlu | `GET /3/movie/{movie_id}/images`                     | array-ul `posters`                                        |

Serialele TV, sezoanele și colecțiile au și ele `poster_path`. Citește o singură dată la pornire listele exacte de dimensiuni din blocul `images` al `GET /3/configuration`, în loc să le scrii fix în cod. Referința pentru imagini este la [imagini](https://amodb.dev/ro/images-api/).

## Începe în 3 pași

1. Alege un plan la [prețuri](https://amodb.dev/ro/pricing/). El stabilește ritmul apelurilor JSON: 20, 40 sau 120 de cereri pe minut.
2. Creează o cheie în panoul contului tău.
3. Citește `poster_path` dintr-un apel de detalii sau de listă, apoi pune-l după gazda de imagini și un nume de dimensiune.

## Exemplu de cerere

Programul Go listează posterele din The Matrix (ID de film 603) în engleză și fără text, alege cel mai lat, afișează un `srcset` gata de folosit și salvează fișierul `w342`. Cheia merge doar la apelul JSON.

```bash
# 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"
```

```go
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)
}
```

Un răspuns de imagini scurtat pentru `include_image_language=en,null`: 3 dintre cele 145 de postere, unul în engleză, cel mai lat în engleză și unul fără text. Răspunsul conține și `backdrops` și `logos`, omise aici.

```json
{
  "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
    }
  ]
}
```

## Alege o dimensiune

Numărul dintr-o dimensiune `w` este lățimea imaginii în pixeli, iar `h632` este o înălțime. Numele mici economisesc lățime de bandă, cele mari păstrează detaliile pe ecrane dense.

| Dimensiune     | Utilizare tipică                                     |
| -------------- | ---------------------------------------------------- |
| `w92`          | Sugestii de căutare și rânduri foarte mici din liste |
| `w154`, `w185` | Liste dense și carduri                               |
| `w342`         | Plăci de grilă pe telefoane                          |
| `w500`         | Pagină de detalii                                    |
| `w780`         | Ecrane mari și ecrane 2x                             |
| `original`     | Arhivă sau tipar, fișierul nescalat                  |

Oferă browserului mai multe lățimi și lasă-l să aleagă. Programul Go de mai sus afișează un `srcset` cu candidați `185w`, `342w`, `500w` și `780w`. Asociază-l cu un atribut `sizes` care se potrivește cu aspectul tău, de exemplu `sizes="(max-width: 600px) 45vw, 185px"` pe elementul `img`.

## Limbile posterelor

Fiecare element din `posters` are o valoare `iso_639_1`, fie un cod de limbă, fie null pentru grafică fără text. Parametrul `include_image_language` primește o listă de coduri separate prin virgulă.

| Valoare   | Întoarce                                |
| --------- | --------------------------------------- |
| `en`      | Postere marcate ca engleze              |
| `en,null` | Postere în engleză și postere fără text |
| `null`    | Doar postere fără text                  |

O ordine bună de rezervă este posterul în limba utilizatorului tău, apoi unul fără text, apoi engleza. În fiecare grup, sortează după `width` și păstrează primul la egalitate. `vote_average` și `vote_count` sunt `0` la imaginile de film și de serial, deci nu ordonează nimic. Limbile posterelor descriu textul tipărit pe grafică, așa că nu urmează cele 14 limbi de interfață. Verifică `iso_639_1` la ce primești, pentru că setul depinde de titlu.

## Stocarea și păstrarea în cache a posterelor

- Salvează `poster_path`, nu URL-ul complet. Din el se poate construi mai târziu orice dimensiune.
- Marginea ține imaginile în cache 30 de zile. Detaliile sunt ținute în cache 6 ore, așa că citește din nou `poster_path` după aceea ca să vezi dacă s-a schimbat.
- Ține cheia pe serverul tău. Trimite browserului doar URL-urile imaginilor.
- Când `poster_path` este null, afișează un substituent în loc de o imagine stricată.

## Cum se compară

| Capacitate                 | Extragi imagini din pagini                | Îți găzduiești propriile copii        | Gazda de imagini amodb                                         |
| -------------------------- | ----------------------------------------- | ------------------------------------- | -------------------------------------------------------------- |
| Cheie necesară             | Niciuna, se aplică termenii fiecărui site | Niciuna                               | Fără cheie pentru imagini                                      |
| Variante de dimensiune     | Orice dimensiune servește pagina          | Le generezi și le stochezi pe fiecare | Nume fixe de dimensiuni în URL, de la `w92` până la `original` |
| Găsirea fișierului         | Analizezi HTML                            | Propria ta bază de date               | `poster_path` în fiecare răspuns                               |
| Limbile graficii           | Pagină cu pagină                          | Ce ai colectat                        | `include_image_language` pe endpoint-urile de imagini          |
| Stocare și lățime de bandă | Ale tale, plus cele ale sursei            | Ale tale                              | Browserul încarcă de la `img.amodb.dev`                        |
| Cache                      | Al tău                                    | Al tău                                | 30 de zile la margine                                          |

## Prețuri

Descărcările de imagini nu poartă cheie. Planul tău limitează doar apelurile JSON care îți dau numele fișierelor, iar răspunsurile de listă includ deja `poster_path` pentru fiecare element, deci un singur apel de listă alimentează o grilă întreagă. Alege 20, 40 sau 120 de cereri pe minut la [prețuri](https://amodb.dev/ro/pricing/). Accesul este plătit în avans pentru 1, 3, 6, 12 sau 24 de luni, cu reduceri de 0, 10, 20, 30 și 40 la sută, nimic nu se reînnoiește singur și nu există nivel gratuit.

## Întrebări și răspunsuri

### Descărcarea posterelor cere o cheie API?

Nu. Imaginile vin de la https://img.amodb.dev/t/p/{size}/{file} fără cheie, deci un browser le poate încărca direct. Doar apelurile JSON care întorc poster_path folosesc cheia ta.

### Ce dimensiuni de poster sunt disponibile?

Numele dimensiunilor sunt w92, w154, w185, w300, w342, w500, w780, w1280, h632 și original. Care se potrivesc unui tip de imagine este listat în blocul images din GET /3/configuration.

### Cum obțin un poster într-o anumită limbă?

Apelează /3/movie/{id}/images?include_image_language=en,null și citește iso_639_1 la fiecare poster. Valoarea null marchează grafica fără text. Apoi alege după lățime. vote_average și vote_count sunt 0 la imaginile de film și de serial.

### Cât timp sunt păstrate imaginile în cache?

Marginea păstrează imaginile 30 de zile. Stochează valoarea poster_path, nu URL-ul complet, ca să poți construi mai târziu orice altă dimensiune fără o nouă căutare.

### Ce afișez când poster_path este null?

Unele titluri nu au poster. Arată un substituent din designul tău și, opțional, apelează endpoint-ul de imagini ca să cauți alte postere înainte să renunți.

## Pagini conexe

- [API imagini și gazdă de imagini](https://amodb.dev/ro/images-api/): API imagini filme cu căi TMDB v3: listează postere, imagini de fundal, logouri și cadre, apoi încarcă-le de la img.amodb.dev în 10 dimensiuni, fără cheie.
- [API detalii film](https://amodb.dev/ro/movies/): API detalii film cu aceleași căi și același JSON ca TMDB v3. Preia un film după ID, adaugă credite, evaluări și atmosferă cu append_to_response, în 14 limbi.
- [API seriale TV](https://amodb.dev/ro/tv-series/): API seriale TV cu căile și JSON-ul TMDB v3. Preia un serial după ID cu sezoane, rețele și următorul episod, plus clasificări de conținut și furnizori.
- [API căutare](https://amodb.dev/ro/search/): API căutare cu căile și JSON-ul TMDB v3. Găsește filme, seriale, persoane, colecții, companii și cuvinte-cheie după text, cu filtre de an și paginare.
- [Ghid rapid](https://amodb.dev/ro/quickstart/): Fă primul apel amodb: ia o cheie, cere detaliile unui film în curl, JavaScript, Python, PHP sau Go, apoi încarcă posterul de pe img.amodb.dev. Sub 2 minute.
- [Autentificare](https://amodb.dev/ro/authentication/): Cum trimiți cheia amodb: api_key în interogare, antetul Authorization Bearer sau apikey pentru apelurile OMDb. Format, stocare, rotire și erorile 401.

Actualizat: 2026-10-18. Source: https://amodb.dev/ro/movie-poster-api/
