Obtenha o trailer oficial de um filme
GET / retorna todos os vídeos ligados a um filme. Cada item tem um type, uma flag official, um código de idioma, um timestamp published_at e o site e a key que identificam o vídeo. Mantenha os itens em que type é Trailer e official é true, e você tem o seu trailer.
Você recebe uma lista de registros de vídeo que pode classificar por conta própria, não um stream. A resposta nomeia o vídeo e diz onde ele está, e sua página monta o player a partir de site e key. O mesmo formato volta para séries de TV. Os caminhos de temporada e episódio respondem com uma lista vazia.
Quais dados você recebe
| Endpoint | Retorna |
|---|---|
GET / | Trailers, teasers, clipes, featurettes, bastidores e erros de gravação (bloopers) de um filme |
GET / | A mesma lista para uma série |
GET / | Sempre uma lista results vazia |
GET / | Sempre uma lista results vazia |
GET / com append_ | Detalhes e vídeos em uma requisição |
Campos de cada vídeo:
| Campo | Tipo | Uso |
|---|---|---|
type | string | Tipo de vídeo: Trailer, Teaser, Clip, Featurette, Behind the Scenes ou Bloopers, como na página de vídeos |
official | boolean | true quando o vídeo é marcado como oficial |
iso_639_1, iso_3166_1 | string | Códigos de idioma e de país do vídeo |
key, site | string | Identificador do vídeo e nome do site que o hospeda, YouTube em todos os vídeos vistos |
size | integer | Resolução vertical, 1080 em todos os vídeos vistos |
published_at | string | Timestamp ISO 8601, bom para ordenar do mais novo para o mais antigo |
name, id | string | Título do vídeo e seu id, que é a mesma string que key |
Comece em 3 passos
- Escolha um plano em preços. Todo plano retorna todos os dados, então você escolhe pelas requisições por minuto.
- Crie uma chave no painel da sua conta. Ela tem 32 caracteres hexadecimais em minúsculas.
- Chame
GET /com a chave em3/ movie/ {movie_ id}/ videos api_keyou em um headerAuthorization: Bearer.
Exemplo de requisição
O exemplo pede os vídeos de Inception (id 27205), classifica-os no código e imprime o melhor. A classificação coloca primeiro as correspondências de idioma, depois Trailer antes de Teaser, depois oficial antes de não oficial e por fim o published_at mais recente.
curl -s "https://api.amodb.dev/3/movie/27205/videos" \
-H "Authorization: Bearer $AMODB_KEY"const BASE = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };
const TYPE_RANK = { Trailer: 0, Teaser: 2 };
function rank(video, lang) {
const language = video.iso_639_1 === lang ? 0 : 10;
const type = TYPE_RANK[video.type] ?? 4;
return language + type + (video.official ? 0 : 1);
}
async function pickTrailer(movieId, lang = 'en') {
const res = await fetch(`${BASE}/movie/${movieId}/videos`, { headers });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const { results } = await res.json();
results.sort(
(a, b) => rank(a, lang) - rank(b, lang) || (b.published_at || '').localeCompare(a.published_at || ''),
);
return results[0] ?? null;
}
const trailer = await pickTrailer(27205, 'en');
console.log(trailer ? `${trailer.name}: ${trailer.site} ${trailer.key}` : 'no video found');Resposta reduzida: os 2 primeiros de 42 vídeos. A lista contém todos os idiomas.
{
"id": 27205,
"results": [
{
"iso_639_1": "en",
"iso_3166_1": "US",
"name": "The Dream Sequence",
"key": "mpj9dL7swwk",
"site": "YouTube",
"size": 1080,
"type": "Clip",
"official": true,
"published_at": "2022-03-09T01:00:20Z",
"id": "mpj9dL7swwk"
},
{
"iso_639_1": "en",
"iso_3166_1": "US",
"name": "35mm Theatrical Trailer #3",
"key": "cdx31ak4KbQ",
"site": "YouTube",
"size": 1080,
"type": "Trailer",
"official": false,
"published_at": "2022-03-07T06:00:19Z",
"id": "cdx31ak4KbQ"
}
]
}Escolha qual vídeo reproduzir
Um título costuma ter vários trailers oficiais (um primeiro anúncio, um corte final) ao lado de teasers e clipes. Classifique-os com uma ordem fixa para que a página nunca coloque um vídeo de erros de gravação no espaço do trailer.
| Prioridade | Filtro | Uso típico |
|---|---|---|
| 1 | Trailer, oficial, idioma coincide | O vídeo a reproduzir |
| 2 | Trailer, não oficial | Uploads regionais ou de fãs quando não existe nada oficial |
| 3 | Teaser, oficial | Chamadas curtas de pré-lançamento |
| 4 | Clip, Featurette | Alternativa para o espaço não ficar vazio |
| ignorar | Behind the Scenes, Bloopers | Mostre em uma lista separada de extras |
Desempate por published_at. O mais novo primeiro dá o corte mais recente, e o mais antigo primeiro dá o primeiro anúncio.
Idiomas dos trailers
Os vídeos recebem uma marca de idioma em iso_639_1, e um título pode ter trailers em vários. Inception tem 42 vídeos em 9 idiomas. O amodb retorna todos eles em uma só resposta. Os parâmetros language e include_video_language não têm efeito nos endpoints de vídeos, então escolha o idioma no seu código.
| Passo | O que fazer |
|---|---|
| 1 | Mantenha os vídeos cujo iso_639_1 corresponde ao seu usuário, por exemplo ru |
| 2 | Se nenhum corresponder, mantenha en |
| 3 | Se nenhum corresponder, mantenha o restante |
Classifique dentro de cada passo por tipo e pela flag official, como no exemplo. Os idiomas dos vídeos seguem o upload, não os 14 idiomas da interface listados em idiomas, então um trailer pode ser cs ou he.
Trailers de séries
O trailer de uma série fica em /3/tv/1396/videos (Breaking Bad), que tem 9 trailers. A função de classificação acima funciona como está, porque os campos não mudam. Caminhos de temporada e episódio como / respondem 200 com uma lista results vazia, então leia a lista da série. Veja vídeos e trailers para a lista completa de caminhos.
Monte uma fileira de trailers
Uma fileira de filmes em cartaz precisa de uma chamada de lista e uma chamada por título: GET / (veja em alta e listas) mais dez chamadas de vídeos dão 11 requisições para dez títulos. Guarde a key escolhida junto ao id do filme. Os trailers mudam pouco, então atualize uma escolha guardada a cada poucas horas ou quando um título for relançado.
Como se compara
| Recurso | Fazer scraping das páginas | API de metadados com plano gratuito | amodb |
|---|---|---|---|
| Flag de oficial | Deduzir pelo título da página | Veja a documentação deles | Booleano official em todo vídeo |
| Filtro por tipo de vídeo | Interpretar texto | Veja a documentação deles | Seis valores de type |
| Escolha de idioma | Uma localidade por página | Veja a documentação deles | iso_639_1 e iso_3166_1 em todo vídeo, filtrados no seu código |
| Séries e episódios | Páginas separadas para rastrear | Veja a documentação deles | As séries usam o mesmo endpoint, as listas de temporada e episódio são vazias |
| Manutenção | Quebra quando o markup muda | Depende do provedor | Um formato JSON estável |
| Termos | Você assume o risco | Veja os termos deles | Planos pagos, veja preços |
Preços
Os planos são pré-pagos. Você compra 1, 3, 6, 12 ou 24 meses e ganha 0, 10, 20, 30 ou 40 por cento de desconto nos períodos mais longos. Nada renova sozinho. Os planos de 20, 40 e 120 requisições por minuto atendem todos os endpoints desta página, então uma fileira de trailers movimentada é só uma questão de taxa. Não há plano gratuito nem período de teste. Compare os planos em preços.