Kami sedang menyelesaikan Stasiun Yandex. Untuk menonton YouTube

Di Yandex.Stations, tidak nyaman menonton YouTube. Tidak ada rekomendasi, langganan, dan bahkan pencarian tidak berfungsi secara normal. Oleh karena itu, saya menulis sebuah telegram ke bot untuk mengirim video apa pun kepadanya.



Di bawah potongan, ceritanya adalah bagaimana saya melakukannya terlepas dari kenyataan bahwa tidak ada API terbuka resmi .

Bagaimana semuanya dimulai?


Saya seorang insinyur. Saya terus-menerus mempelajari bagaimana berbagai teknologi dan hal bekerja di sekitar, dan juga melakukan banyak proyek menarik sendiri. Ketika teman saya memberi saya Yandex.Station, saya membalikkan protokol aktivasi dan mengembangkan ide transfer data yang berorientasi pada efek wow.

Saya memiliki TV yang bodoh (tidak pintar), dan sebagai konsol media utama saya menggunakan Station. Semuanya baik-baik saja, tetapi hanya menonton YouTube sama sekali tidak nyaman. Anda tidak dapat masuk ke akun YouTube Anda, yang berarti tidak ada rekomendasi dan langganan. Selain itu, pencarian video di Stasiun, seperti yang saya mengerti, dilakukan melalui Yandex.Video. Sayangnya, skema seperti itu tidak berfungsi dengan baik. Kadang-kadang tidak ada video bahkan jika Anda benar-benar mengucapkan nama, dan video baru tidak dapat ditonton sama sekali sampai mesin pencari Yandex mengindeksnya.

Saya hampir menerima kenyataan bahwa Anda tidak dapat menonton YouTube di Stasiun, tetapi semuanya berubah beberapa minggu yang lalu.

Apa yang terjadi


Pada Sabtu pagi, saya memutuskan untuk menonton musim terakhir Lembah Silikon. Saya pergi ke Kinopoisk dan melihat yang berikut:


Setelah mengklik tombol, video terbang ke Yandex.Station dan diputar lebih lanjut di sana. Sama seperti ChromeCast atau AirPlay. Senang! Tapi saya senang bukan dengan fungsi itu sendiri, tetapi dengan peluang potensial untuk mengirim video apa pun ke stasiun.

Saya lupa memikirkan seri - untuk seluruh akhir pekan saya pergi ke reverse engineering dan pengembangan.

Mari kita perbaiki.


Kami membuka Kinopoisk atau Yandex.Video di Chrome - ada alat yang luar biasa untuk pengembangan web. Temukan tombol yang diinginkan, klik kanan, pilih "Jelajahi item."


Ada banyak yang dapat dipelajari di sana, tetapi kami tertarik pada permintaan apa yang dieksekusi ketika tombol ini diklik. Kami pergi ke tab "Jaringan" dari alat pengembang dan melihat permintaan.


Ya, banyak statistik terbang, tetapi 2 permintaan menarik segera terlihat. Ini adalah devices_online_stats dan stasiun.

Dapatkan daftar perangkat


devices_online_stats - meminta perangkat pengguna yang aktif. Dapatkan permintaan sederhana. Jika Anda diotorisasi di Yandex, Anda dapat mencari tahu tentang perangkat Anda hanya dengan membuka tautan di browser:

quasar.yandex.ru/devices_online_stats

Apa dalam jawabannya:

{ "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" } 

Menarik dan cukup intuitif. Saya mengganti Station ID pada contoh dengan tanda bintang untuk jaga-jaga, tapi kami akan membutuhkannya di masa depan.

Putar video


Permintaan ke yandex.ru/video/station dikirim menggunakan metode POST. Ulangi dari konsol, terima perintah sebagai berikut:


Jalankan di terminal dan dapatkan jawabannya:

 { "status": "play", "msg": "success", "code": 1 } 

Setelah beberapa detik, video dimulai di stasiun. Sukses!

Kami mengumpulkan


Saya menghapus semua bidang "ekstra" dari permintaan sehingga tetap operasional. Untuk mengirim video ke Stasiun di badan dan tajuk permintaan POST, Anda hanya perlu memasukkan 4 parameter:

  • SessionID - otorisasi dalam Yandex
  • x-csrf-token
  • provider_item_id - tautan ke video (atau pengidentifikasi untuk beberapa layanan)
  • device - Identifier perangkat yang kami terima sebelumnya

Apa itu token x-csrf? Kami tidak akan pergi jauh sekarang. Ini dapat diperoleh hanya dengan permintaan GET ke frontend.vh.yandex.ru/csrf_token jika Anda diizinkan di Yandex.

Pada titik ini, saya sudah mulai membungkus semuanya dalam skrip Python. Akibatnya, fungsi untuk mengirim video ke stasiun terlihat seperti ini:

 def sendToScreen(video_url): # Auth and getting Session_id auth_data = { 'login': config.login, 'passwd': config.password } s = requests.Session() s.get("https://passport.yandex.ru/") s.post("https://passport.yandex.ru/passport?mode=auth&retpath=https://yandex.ru", data=auth_data) Session_id = s.cookies["Session_id"] # Getting x-csrf-token token = s.get('https://frontend.vh.yandex.ru/csrf_token').text # Getting devices info TODO: device selection here devices_online_stats = s.get("https://quasar.yandex.ru/devices_online_stats").text devices = json.loads(devices_online_stats)["items"] # Preparing request headers = { "x-csrf-token": token, } data = { "msg": { "provider_item_id": video_url }, "device": devices[0]["id"] } if "https://www.youtube" in video_url: data["msg"]["player_id"] = "youtube" # Sending command with video to device res = s.post("https://yandex.ru/video/station", data=json.dumps(data), headers=headers) return res.text 

Anda mungkin telah memperhatikan bahwa saya menambahkan bidang player_id jika tautan dari YouTube dikirim. Faktanya adalah bahwa ada beberapa pemain di Stasiun dengan kode youtube, vh dan ott. Secara default, vh digunakan, tetapi kemudian pratinjau dan judul video jeda. Selain itu, keadaannya tidak diatur ulang ketika film diubah, yang sering menyebabkan kesalahan (Mungkin, tidak semua bidang dalam permintaan "berlebihan"). Pemain ott, seperti yang saya mengerti, digunakan untuk layanan streaming, yang berarti bahwa di masa depan Anda dapat menonton IPTV melalui stasiun.

Apa hasilnya?


Sekarang saya punya bot tempat kami mengirim video dari YouTube ke Stasiun. Cukup klik "Bagikan" di aplikasi YouTube dan kirim tautannya ke Bot. Ngomong-ngomong, saya menyebutnya "Kotak" dan membuat logo).


Saya tidak mengumumkannya kepada publik, sehingga tidak mengumpulkan login dan kata sandi. Tetapi Anda dapat menggunakan hal yang sama untuk diri sendiri atau memodifikasinya untuk otorisasi OAuth atau mengirim video dari situs lain. Semua sumber tersedia di GitHub .

Saya ingin membuat ekstensi peramban berfungsi seperti AirPlay dengan video apa pun, tetapi saya menyadari bahwa lebih nyaman untuk mengirim dari aplikasi dari telepon. Dan untuk skenario ini, bot lebih cocok. Ini adalah video karyanya:


Kesimpulan


Ketika seorang insinyur tidak memiliki fungsionalitas, ia menyelesaikannya sendiri. Sekarang kami benar-benar secara teratur menggunakan bot ini - sangat nyaman :)

Pengembang Yandex, harap jangan melanggar permintaan ini. Ini bukan kerentanan. Hanya berfungsi dengan autentikasi. Dan jika Anda bisa - membuat perangkat API menjadi publik - lebih banyak lagi yang bisa dilakukan!

Terima kasih telah membaca artikel saya! Saya harap Anda tertarik.

Semoga beruntung

Source: https://habr.com/ru/post/id479242/


All Articles