Yandex.Stations पर, YouTube देखना असुविधाजनक है। कोई अनुशंसाएँ, सदस्यताएँ नहीं हैं, और यहां तक कि खोज सामान्य रूप से काम नहीं करती है। इसलिए, मैंने किसी भी वीडियो को भेजने के लिए बॉट को टेलीग्राम लिखा।
कटौती के तहत, कहानी यह है कि मैंने इसे
इस तथ्य के बावजूद कैसे किया
कि कोई आधिकारिक ओपन एपीआई नहीं है ।
यह सब कैसे शुरू हुआ?
मैं एक इंजीनियर हूं। मैं लगातार अध्ययन करता हूं कि विभिन्न प्रौद्योगिकियां और चीजें कैसे काम करती हैं, और खुद भी बहुत सारी दिलचस्प परियोजनाएं करती हैं। जब मेरे दोस्तों ने मुझे Yandex.Station दिया, तो मैंने सक्रियण प्रोटोकॉल को
उलट दिया और वाह-प्रभाव के लिए उन्मुख डेटा ट्रांसफर
के विचार को
विकसित किया ।
मेरे पास एक बेवकूफ (स्मार्ट नहीं) टीवी है, और मुख्य मीडिया कंसोल के रूप में मैं स्टेशन का उपयोग करता हूं। सब कुछ ठीक है, लेकिन सिर्फ YouTube देखना पूरी तरह से असुविधाजनक है। आप अपने YouTube खाते में लॉग इन नहीं कर सकते, जिसका अर्थ है कि कोई अनुशंसाएँ और सदस्यताएँ नहीं हैं। इसके अलावा, स्टेशन में वीडियो खोज, जैसा कि मैं समझता हूं, इसे Yandex.Video के माध्यम से किया जाता है। दुर्भाग्य से, ऐसी योजना बहुत अच्छी तरह से काम नहीं करती है। कभी-कभी कोई वीडियो नहीं होता है, भले ही आप वास्तव में नाम का उच्चारण करें, और नए वीडियो को तब तक नहीं देखा जा सकता जब तक कि यैंडेक्स खोज इंजन उन्हें अनुक्रमित नहीं करता।
मैं लगभग इस तथ्य के साथ आया था कि आप स्टेशन पर YouTube नहीं देख सकते हैं, लेकिन यह सब कुछ हफ्ते पहले बदल गया।
क्या हुआ था?
शनिवार की सुबह, मैंने सिलिकन वैली के पिछले सीज़न को देखने का फैसला किया। मैं किनोपोइक गया और निम्नलिखित देखा:
बटन पर क्लिक करने के बाद, वीडियो ने यैंडेक्स से उड़ान भरी। इसे आगे खेला गया। जैसे क्रोमकास्ट या एयरप्ले। डिलाईट! लेकिन मैं स्वयं कार्यक्षमता के साथ नहीं, बल्कि किसी भी वीडियो को स्टेशन पर भेजने के संभावित अवसर से प्रसन्न था।
मैं श्रृंखला के बारे में सोचना भूल गया - पूरे सप्ताहांत के लिए मैं रिवर्स इंजीनियरिंग और विकास में चला गया।
चलो ठीक है।
हम Chrome में Kinopoisk या Yandex.Video खोलते हैं - वेब विकास के लिए उत्कृष्ट उपकरण हैं। वांछित बटन ढूंढें, राइट-क्लिक करें, "आइटम का अन्वेषण करें" चुनें।
बहुत कुछ ऐसा है जिसे वहां सीखा जा सकता है, लेकिन इस बटन को क्लिक करने पर हमें किस अनुरोध पर अमल करना है। हम डेवलपर टूल के "नेटवर्क" टैब पर जाते हैं और अनुरोधों को देखते हैं।
हां, बहुत सारे आंकड़े उड़ जाते हैं, लेकिन 2 दिलचस्प अनुरोध तुरंत दिखाई देते हैं। ये डिवाइस_ऑनलाइन_स्टेट्स और स्टेशन हैं।
उपकरणों की एक सूची प्राप्त करें
devices_online_stats - सक्रिय उपयोगकर्ता उपकरणों का अनुरोध करें। सरल हो निवेदन। यदि आप यांडेक्स में अधिकृत हैं, तो आप अपने ब्राउज़र में लिंक खोलकर अपने उपकरणों के बारे में जान सकते हैं:
quasar.yandex.ru/devices_online_statsजवाब में क्या:
{ "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" }
दिलचस्प और काफी सहज। मैंने उदाहरण में स्टेशन आईडी को केवल मामले में तारांकन के साथ बदल दिया, लेकिन हमें भविष्य में इसकी आवश्यकता होगी।
वीडियो चलाएं
POST विधि का उपयोग करके
yandex.ru/video/station के लिए एक अनुरोध भेजा
जाता है । कंसोल से इसे दोहराएं, कमांड को निम्नानुसार प्राप्त कर रहा है:
टर्मिनल में चलाएं और उत्तर प्राप्त करें:
{ "status": "play", "msg": "success", "code": 1 }
कुछ सेकंड के बाद, वीडियो स्टेशन पर शुरू होता है। सफलता!
हम जमा करते हैं
मैंने सभी "अतिरिक्त" फ़ील्ड को अनुरोध से हटा दिया ताकि यह चालू रहे। शरीर में स्टेशन और POST अनुरोध के हेडर में वीडियो भेजने के लिए, आपको केवल 4 पैरामीटर लगाने होंगे:
- SessionID - यैंडेक्स में प्राधिकरण
- एक्स-CSRF-टोकन
- provider_item_id - वीडियो के लिए लिंक (या कुछ सेवाओं के लिए पहचानकर्ता)
- डिवाइस - डिवाइस का पहचानकर्ता जो हमें पहले मिला था
X-csrf-token क्या है? हम अब और गहरे नहीं जाएंगे। यदि आप Yandex में अधिकृत हैं, तो इसे केवल Gend अनुरोध द्वारा
frontend.vh.yandex.ru/csrf_token पर प्राप्त किया जा सकता है।
इस बिंदु पर, मैंने पहले ही पायथन स्क्रिप्ट में सब कुछ लपेटना शुरू कर दिया था। परिणामस्वरूप, स्टेशन पर वीडियो भेजने का कार्य कुछ इस तरह दिखता है:
def sendToScreen(video_url):
आपने देखा होगा कि YouTube से एक लिंक भेजे जाने पर मैं player_id फ़ील्ड जोड़ देता हूं। तथ्य यह है कि कोड youtube, vh और ott के साथ स्टेशन पर कई खिलाड़ी हैं। डिफ़ॉल्ट रूप से, vh का उपयोग किया जाता है, लेकिन फिर पूर्वावलोकन और वीडियो का शीर्षक टूट जाता है। इसके अलावा, फिल्म बदले जाने पर इसकी स्थिति को रीसेट नहीं किया जाता है, जो अक्सर त्रुटियों का कारण बनता है (शायद, अनुरोध में सभी फ़ील्ड "निरर्थक" नहीं थे)। ओटी प्लेयर, जैसा कि मैं समझता हूं, इसका उपयोग स्ट्रीमिंग सेवाओं के लिए किया जाता है, जिसका अर्थ है कि भविष्य में आप स्टेशन के माध्यम से आईपीटीवी देख सकते हैं।
परिणाम क्या है?
अब मेरे पास एक बॉट है जिसके माध्यम से हम YouTube से स्टेशन पर वीडियो भेजते हैं। बस YouTube एप्लिकेशन में "शेयर" पर क्लिक करें और बॉट के लिंक को भेजें। वैसे, मैंने इसे "बॉक्स" कहा और लोगो बनाया)।
मैंने इसे सार्वजनिक नहीं किया, इसलिए लॉगिन और पासवर्ड एकत्र करने के लिए नहीं। लेकिन आप इसे स्वयं के लिए तैनात कर सकते हैं या इसे OAuth प्राधिकरण या अन्य साइटों से वीडियो भेजने के लिए संशोधित कर सकते हैं।
GitHub पर सभी स्रोत उपलब्ध हैं।
मैं किसी भी वीडियो के साथ AirPlay की तरह काम करने के लिए एक ब्राउज़र एक्सटेंशन बनाना चाहता था, लेकिन मुझे एहसास हुआ कि यह फोन से एप्लिकेशन से भेजने के लिए अधिक सुविधाजनक है। और इस परिदृश्य के लिए, एक बॉट बेहतर अनुकूल है। यहाँ उनके काम का एक वीडियो है:
निष्कर्ष
जब एक इंजीनियर में कार्यक्षमता की कमी होती है, तो वह इसे स्वयं पूरा करता है। अब हम वास्तव में नियमित रूप से इस बॉट का उपयोग करते हैं - बहुत सुविधाजनक :)
यैंडेक्स डेवलपर्स, कृपया इस अनुरोध को न तोड़ें। यह एक भेद्यता नहीं है। केवल प्रमाणीकरण के साथ काम करता है। और अगर आप कर सकते हैं - डिवाइस एपीआई को सार्वजनिक करें - तो बहुत कुछ किया जा सकता है!
मेरे लेख पढ़ने के लिए धन्यवाद! मुझे आशा है कि आप रुचि रखते थे।
अ छा!