POST /2/media/upload
são usados para enviar um vídeo, o que exige um fluxo de trabalho diferente do de uploads de imagem única.
Para vídeos ou uploads segmentados, você deve:
- Inicializar o upload usando o comando
INIT
- Enviar cada segmento de bytes usando o comando
APPEND
- Concluir o upload usando o comando
FINALIZE
Observação: Consulte este exemplo de código escrito em Python.
Autenticação
CONSUMER_KEY
, CONSUMER_SECRET
, ACCESS_KEY
e ACCESS_TOKEN
na sua App dentro do seu Projeto no dashboard do portal do desenvolvedor.
Etapa 1: POST media/upload (INIT)
INIT
é usada para iniciar uma sessão de upload de arquivo. Ela retorna um media_id
, que deve ser usado para executar todas as solicitações subsequentes. A próxima etapa após um retorno bem-sucedido do comando INIT
é o comando APPEND
.
Consulte as Boas práticas para conhecer as restrições e os requisitos de arquivos de mídia.
Exemplo de solicitação
Observação: Ao fazer solicitações HTTP diretas, a requisição deve usar o método POST nos formatos
multipart/form-data
ou application/x-www-form-urlencoded
.id
(string) e media_key
(string). O arquivo completo deve ser carregado antes de expires_after_secs
segundos.
Etapa 2 : POST media/upload (APPEND)
APPEND
é usado para enviar um bloco (intervalo consecutivo de bytes) do arquivo de mídia. Por exemplo, um arquivo de 3 MB pode ser dividido em 3 blocos de 1 MB e enviado usando 3 solicitações do comando APPEND
. Após o envio do arquivo inteiro, a próxima etapa é chamar o comando FINALIZE
.
Há várias vantagens em enviar um arquivo de mídia em pequenos blocos:
- Maior confiabilidade e taxa de sucesso em condições de rede com baixa largura de banda
- Os uploads podem ser pausados e retomados
- Blocos do arquivo podem ser reenviados individualmente
- Capacidade de ajustar o tamanho dos blocos para acompanhar mudanças nas condições da rede, por exemplo, em clientes móveis
segment_index
é um índice ordenado do chunk do arquivo. Ele deve estar entre 0 e 999, inclusive. O primeiro segmento tem índice 0, o segundo tem índice 1 e assim por diante. Continue enviando os chunks do arquivo até que todos sejam enviados.
Observação: Ao fazer solicitações HTTP brutas, a requisição deve estar no formato POST
multipart/form-data
.Observação: Um código HTTP 2XX será retornado com um corpo de resposta vazio em caso de upload bem-sucedido.
Etapa 3: POST media/upload (FINALIZE)
FINALIZE
deve ser chamado após o envio de todo o arquivo de mídia usando comandos APPEND
. Se, e somente se, a resposta do comando FINALIZE
contiver um campo processing_info
, também pode ser necessário usar um comando STATUS
e aguardar que ele retorne sucesso antes de prosseguir para a criação do Post.
Exemplo de requisição
Nota: Ao fazer solicitações HTTP brutas, a requisição deve usar o método POST nos formatos
multipart/form-data
ou application/x-www-form-urlencoded
.media_id
(inteiro de 64 bits) e media_id_string
(string). Use o media_id_string
retornado na resposta da API em JavaScript e em outras linguagens que não conseguem representar com precisão um inteiro longo.
O media_id
retornado é válido apenas por expires_after_secs
segundos. Qualquer tentativa de usar o mediaId após esse período em outras chamadas à API resultará em uma resposta Bad Request (HTTP 4xx).
Se a resposta contiver o campo processing_info
, use o comando STATUS
para verificar o status da operação FINALIZE
. A finalização assíncrona é usada quando o processamento de mídia exige mais tempo. No futuro, todo o processamento de vídeos e GIFs animados será compatível apenas por meio de finalização assíncrona. Esse comportamento é ativado se uma sessão de upload tiver sido inicializada com o parâmetro media_category
e quando o tipo de mídia for vídeo ou GIF animado.
Observação:
Se o campo
processing_info
NÃO for retornado na resposta, então media_id
está pronto para uso em outros endpoints da API.Etapa 4 : GET media/upload (STATUS)
STATUS
é usado para consultar periodicamente as atualizações da operação de processamento de mídia. Depois que a resposta do comando STATUS
retornar succeeded
, você pode avançar para a próxima etapa, que geralmente é criar um Post com media_id
.
Observação:
O comando
STATUS
deve ser usado se e somente se a resposta do comando FINALIZE
ou de um comando STATUS
anterior contiver o campo processing_info
.Exemplo de requisição
Exemplo de resposta
processing_info
, que fornece informações sobre o estado atual da operação de processamento de mídia. Esse campo inclui state
, que segue o fluxo de transição: pending
-> in_progress
-> [failed
| succeeded
]. Você não pode usar o media_id
para criar um Post ou outras entidades antes de o campo state
estar definido como succeeded
.
Etapa 5 : Publicar Tweet com mídia
POST /2/tweets
, incluindo o media_id
em nome de um usuário autenticado.
Exemplo de requisição