No Yandex.Stations, é inconveniente assistir ao YouTube. Não há recomendações, assinaturas e até a pesquisa não funciona normalmente. Portanto, escrevi um telegrama para o bot para enviar qualquer vídeo para ele.
Sob o corte, a história é como eu fiz isso,
apesar do fato de não haver uma API aberta oficial .
Como tudo começou?
Eu sou engenheiro. Estudo constantemente como diferentes tecnologias e coisas funcionam e também faço muitos projetos interessantes. Quando meus amigos me deram a Yandex.Station, reverti o protocolo de ativação e
desenvolvi a ideia de transferência de dados orientada para o efeito uau.
Eu tenho uma TV estúpida (não inteligente) e, como principal console de mídia, uso o Station. Está tudo bem, mas apenas assistir ao YouTube é completamente desconfortável. Você não pode fazer login na sua conta do YouTube, o que significa que não há recomendações e inscrições. Além disso, a pesquisa de vídeo na estação, como eu a entendo, é realizada através do Yandex.Video. Infelizmente, esse esquema não funciona muito bem. Às vezes, não há vídeos, mesmo que você pronuncie o nome literalmente, e você não pode assistir a novos vídeos até que o mecanismo de pesquisa Yandex os indexe.
Eu quase cheguei a um acordo com o fato de que você não pode assistir ao YouTube no Station, mas tudo mudou algumas semanas atrás.
O que aconteceu?
No sábado de manhã, decidi assistir a última temporada do Vale do Silício. Fui ao Kinopoisk e vi o seguinte:
Depois de clicar no botão, o vídeo voou para o Yandex.Station e foi reproduzido mais lá. Assim como o ChromeCast ou o AirPlay. Delícia! Mas fiquei encantado não com a funcionalidade em si, mas com a oportunidade potencial de enviar qualquer vídeo para a estação.
Esqueci de pensar na série - durante todo o fim de semana entrei em engenharia reversa e desenvolvimento.
Vamos acertar.
Abrimos Kinopoisk ou Yandex.Video no Chrome - existem excelentes ferramentas para o desenvolvimento da web. Encontre o botão desejado, clique com o botão direito do mouse e selecione "Explorar o item".
Há muito o que aprender aqui, mas estamos interessados em qual solicitação é executada quando este botão é clicado. Vamos para a guia "Rede" das ferramentas do desenvolvedor e examinamos as solicitações.
Sim, muitas estatísticas voam, mas duas solicitações interessantes são imediatamente visíveis. Estes são devices_online_stats e station.
Obter uma lista de dispositivos
devices_online_stats - solicita dispositivos de usuário ativos. Pedido de obtenção simples. Se você está autorizado no Yandex, pode descobrir seus dispositivos simplesmente abrindo o link em um navegador:
quasar.yandex.ru/devices_online_statsO que na resposta:
{ "items":[ { "icon":"https://avatars.mds.yandex.net/get-yandex-station/1540981/yandexstationicon/orig", "id":"************", "name":" ", "online":true, "platform":"yandexstation", "screen_capable":true, "screen_present":true } ], "status":"ok" }
Interessante e bastante intuitivo. Substituí o ID da estação no exemplo por asteriscos, apenas por precaução, mas precisaremos disso no futuro.
Reproduzir vídeo
Uma solicitação para
yandex.ru/video/station é enviada usando o método POST. Repita-o no console, recebendo o comando da seguinte maneira:
Corra no terminal e obtenha a resposta:
{ "status": "play", "msg": "success", "code": 1 }
Após alguns segundos, o vídeo começa na estação. Sucesso!
Nós coletamos
Eu removi todos os campos "extras" da solicitação para que ela permaneça operacional. Para enviar vídeo para a estação no corpo e nos cabeçalhos da solicitação POST, você precisa colocar apenas 4 parâmetros:
- SessionID - autorização no Yandex
- x-csrf-token
- provider_item_id - link para o vídeo (ou identificador para alguns serviços)
- device - O identificador do dispositivo que recebemos anteriormente
O que é o x-csrf-token? Não vamos nos aprofundar agora. Pode ser obtido simplesmente por uma solicitação GET para
frontend.vh.yandex.ru/csrf_token se você está autorizado no Yandex.
Nesse ponto, eu já havia começado a agrupar tudo em um script Python. Como resultado, a função para enviar vídeo para a estação é mais ou menos assim:
def sendToScreen(video_url):
Você deve ter notado que eu adiciono o campo player_id se um link do YouTube for enviado. O fato é que existem vários players na estação com os códigos youtube, vh e ott. Por padrão, vh é usado, mas a visualização e o título do vídeo são interrompidos. Além disso, seu estado não é redefinido quando o filme é alterado, o que geralmente causa erros (talvez nem todos os campos na solicitação sejam "redundantes"). O ott player, como eu o entendo, é usado para serviços de streaming, o que significa que no futuro você poderá assistir IPTV através da estação.
Qual é o resultado?
Agora eu tenho um bot através do qual enviamos vídeos do YouTube para o Station. Basta clicar em "Compartilhar" no aplicativo do YouTube e enviar o link para o Bot. A propósito, chamei de “Caixa” e fiz um logotipo).
Não o tornei público, para não coletar logins e senhas. Mas você pode implantar o mesmo para si mesmo ou modificá-lo para autorização do OAuth ou enviar vídeos de outros sites. Todas as fontes estão disponíveis no
GitHub .
Eu queria que uma extensão do navegador funcionasse como o AirPlay em qualquer vídeo, mas percebi que é mais conveniente enviar do aplicativo pelo telefone. E para esse cenário, um bot é mais adequado. Aqui está um vídeo de seu trabalho:
Conclusão
Quando um engenheiro não tem funcionalidade, ele mesmo a conclui. Agora nós realmente usamos regularmente este bot - muito conveniente :)
Desenvolvedores Yandex, por favor, não quebre esta solicitação. Isso não é uma vulnerabilidade. Funciona apenas com autenticação. E se você puder - tornar pública a API do dispositivo - muito mais poderá ser feito!
Obrigado por ler meus artigos! Espero que você esteja interessado.
Boa sorte