Auf Yandex.Stations ist es unpraktisch, YouTube anzusehen. Es gibt keine Empfehlungen, Abonnements und auch die Suche funktioniert nicht normal. Deshalb habe ich ein Telegramm an den Bot geschrieben, um ein Video an ihn zu senden.
Unter dem Strich geht es
darum, wie ich es gemacht habe,
obwohl es keine offizielle offene API gibt .
Wie hat alles angefangen?
Ich bin Ingenieur. Ich studiere ständig, wie verschiedene Technologien und Dinge funktionieren, und mache auch selbst viele interessante Projekte. Als meine Freunde mir Yandex.Station gaben, kehrte ich das Aktivierungsprotokoll um und
entwickelte die Idee der Datenübertragung, die sich am Wow-Effekt orientierte.
Ich habe einen blöden (nicht intelligenten) Fernseher und benutze als Hauptmedienkonsole die Station. Alles ist in Ordnung, aber nur YouTube zu sehen ist völlig unangenehm. Du kannst dich nicht in deinem YouTube-Konto anmelden. Dies bedeutet, dass keine Empfehlungen und Abonnements vorhanden sind. Außerdem wird die Videosuche in der Station, wie ich es verstehe, über Yandex.Video durchgeführt. Leider funktioniert ein solches Schema nicht sehr gut. Manchmal gibt es keine Videos, auch wenn Sie den Namen buchstäblich aussprechen, und neue Videos können erst dann angesehen werden, wenn die Yandex-Suchmaschine sie indiziert.
Ich habe mich fast damit abgefunden, dass man auf der Station kein YouTube ansehen kann, aber das hat sich vor ein paar Wochen geändert.
Was ist passiert?
Am Samstagmorgen habe ich beschlossen, mir die letzte Staffel von Silicon Valley anzuschauen. Ich ging zu Kinopoisk und sah Folgendes:
Nach einem Klick auf den Button flog das Video zu Yandex.Station und wurde dort weiter abgespielt. Genau wie ChromeCast oder AirPlay. Freude! Ich war jedoch nicht von der Funktionalität an sich begeistert, sondern von der Möglichkeit, Videos an die Station zu senden.
Ich habe vergessen, über die Serie nachzudenken - für das ganze Wochenende habe ich mich mit Reverse Engineering und Entwicklung befasst.
Lass es uns richtig machen.
Wir öffnen Kinopoisk oder Yandex.Video in Chrome - es gibt ausgezeichnete Tools für die Webentwicklung. Suchen Sie die gewünschte Schaltfläche, klicken Sie mit der rechten Maustaste und wählen Sie "Das Objekt erkunden".
Dort kann man viel lernen, aber wir sind daran interessiert, welche Anforderung ausgeführt wird, wenn auf diese Schaltfläche geklickt wird. Wir gehen zur Registerkarte "Netzwerk" der Entwicklertools und sehen uns die Anforderungen an.
Ja, viele Statistiken fliegen davon, aber 2 interessante Anfragen sind sofort sichtbar. Dies sind devices_online_stats und station.
Liste der Geräte abrufen
devices_online_stats - Aktive Benutzergeräte anfordern. Einfache Get-Anfrage. Wenn Sie in Yandex autorisiert sind, können Sie sich über Ihre Geräte informieren, indem Sie den Link in einem Browser öffnen:
quasar.yandex.ru/devices_online_statsWas in der Antwort:
{ "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" }
Interessant und sehr intuitiv. Ich habe die Stations-ID im Beispiel für alle Fälle durch Sternchen ersetzt, aber wir werden sie in Zukunft brauchen.
Video abspielen
Eine Anfrage an
yandex.ru/video/station wird mit der POST-Methode gesendet. Wiederholen Sie diesen Vorgang von der Konsole aus und empfangen Sie den Befehl wie folgt:
Führen Sie das Terminal aus und erhalten Sie die Antwort:
{ "status": "play", "msg": "success", "code": 1 }
Nach ein paar Sekunden startet das Video am Sender. Erfolg!
Wir sammeln
Ich habe alle "zusätzlichen" Felder aus der Anfrage entfernt, damit sie funktionsfähig bleibt. Um ein Video an die Station im Hauptteil und in den Headern der POST-Anforderung zu senden, müssen Sie nur 4 Parameter eingeben:
- SessionID - Autorisierung in Yandex
- x-csrf-token
- provider_item_id - Link zum Video (oder Kennung für einige Dienste)
- device - Die Kennung des Geräts, das wir zuvor erhalten haben
Was ist x-csrf-token? Wir werden jetzt nicht tief gehen. Es kann einfach durch eine GET-Anfrage an
frontend.vh.yandex.ru/csrf_token abgerufen werden, wenn Sie in Yandex autorisiert sind.
Zu diesem Zeitpunkt hatte ich bereits begonnen, alles in ein Python-Skript zu packen. Infolgedessen sieht die Funktion zum Senden von Videos an die Station ungefähr so aus:
def sendToScreen(video_url):
Möglicherweise haben Sie bemerkt, dass ich das Feld player_id hinzufüge, wenn ein Link von YouTube gesendet wird. Tatsache ist, dass es auf der Station mehrere Spieler mit den Codes youtube, vh und ott gibt. Standardmäßig wird vh verwendet, aber dann werden die Vorschau und der Titel des Videos unterbrochen. Außerdem wird sein Status nicht zurückgesetzt, wenn der Film geändert wird, was häufig zu Fehlern führt (Möglicherweise waren nicht alle Felder in der Anforderung "redundant"). Soweit ich weiß, wird der Ott-Player für Streaming-Dienste verwendet, sodass Sie in Zukunft IPTV über den Sender sehen können.
Was ist das ergebnis
Jetzt habe ich einen Bot, über den wir Videos von YouTube an die Station senden. Klicke einfach in der YouTube-Anwendung auf "Teilen" und sende den Link an Bot. Übrigens, ich habe es "Box" genannt und ein Logo gemacht.
Ich habe es nicht veröffentlicht, um keine Logins und Passwörter zu sammeln. Sie können jedoch dasselbe für sich selbst bereitstellen oder für die OAuth-Autorisierung oder das Senden von Videos von anderen Websites ändern. Alle Quellen sind auf
GitHub verfügbar.
Ich wollte eine Browsererweiterung so gestalten, dass sie mit jedem Video wie AirPlay funktioniert, habe jedoch festgestellt, dass es bequemer ist, die Anwendung vom Telefon aus zu senden. Und für dieses Szenario ist ein Bot besser geeignet. Hier ist ein Video seiner Arbeit:
Fazit
Wenn einem Ingenieur die Funktionalität fehlt, vervollständigt er sie selbst. Jetzt benutzen wir diesen Bot wirklich regelmäßig - sehr praktisch :)
Yandex Entwickler, bitte brechen Sie diese Anfrage nicht. Dies ist keine Sicherheitslücke. Funktioniert nur mit Authentifizierung. Und wenn Sie - die Geräte-API öffentlich machen - können Sie noch viel mehr tun!
Vielen Dank für das Lesen meiner Artikel! Ich hoffe du warst interessiert.
Viel Glück!