परिचय
मेरे बारे में
सभी को नमस्कार, मैं "सॉफ्टवेयर तकनीशियन" की विशेषता में एक साधारण छात्र हूं। बचपन से ही मुझे कंप्यूटर का शौक रहा है, 7 वीं कक्षा के बाद से ही मैंने प्रोग्रामिंग सीखना शुरू कर दिया था। मैं एक वर्ष से अधिक समय से यैंडेक्स म्यूज़िक के सब्सक्रिप्शन का मालिक हूं और आम तौर पर सेवा से संतुष्ट हूं (हालांकि अब दिन की प्लेलिस्ट में लगातार दोहराव हैं)।
प्रागितिहास
मुझे ठीक-ठीक याद नहीं है कि मैंने इस सेवा के लिए आधिकारिक एपीआई दस्तावेज की तलाश करने का निर्णय क्यों लिया, जैसे कि मैं टेलीग्राम के लिए लिखना चाहता था, लेकिन मुझे इस तथ्य के बारे में पता चला कि यह नहीं था ... कुछ समय बाद मैं यांडेक्स / ऑडियो-जेएस भंडार में मुद्दे पर आया था। वहाँ, लोग मेरे जैसे ही सवाल पूछते हैं: "एपीआई कहां है?" बहुत से लोग एक ब्राउज़र के माध्यम से संगीत सुनने के लिए उत्सुक नहीं हैं, वे एक आवेदन चाहते हैं, लेकिन लिनक्स अनुप्रयोग भी नहीं है! अपने पसंदीदा खिलाड़ी को एकीकृत करना असंभव है!
तब मुझे इसे करने का विचार आया। स्वाभाविक रूप से, मुझे किसी तरह सेवा के साथ काम करने की आवश्यकता है, एक वेब एप्लिकेशन के आसपास बैसाखी बनाना एक विकल्प नहीं है। मुझे समझ में आया कि विंडोज (Microsoft स्टोर से) के लिए ऐसी सेवा, मोबाइल एप्लिकेशन और एप्लिकेशन होना, यह केवल असंभव है कि आपके पास इंटरेक्शन के लिए अपना आंतरिक एपीआई न हो। मैं सही था!
मुख्य शरीर से पहले अनिवार्य पढ़ना
मुझे पता है कि, उनके गैर-सार्वजनिक एपीआई का अध्ययन करके, मैं अन्य लोगों की गंदी चीजों के माध्यम से अफवाह करता हूं। नीचे विभिन्न विवादास्पद मुद्दों, डेवलपर्स के निर्णय और, सामान्य रूप से, उन्होंने इसे कैसे लिखा और वे इसका उपयोग कैसे करते हैं, का वर्णन किया जाएगा। कुछ जगहों पर मैं बस चौंक गया था , लेकिन मुझे यकीन है कि अगर उन्होंने ऐसा किया, तो उसके कारण थे ! चलो यह नहीं भूलना चाहिए कि किसी को यह नहीं देखना चाहिए था। मैं यह भी कहना चाहता हूं कि नीचे लिखी हर बात मेरी राय है । आप उससे सहमत हो सकते हैं या नहीं।
मुख्य शरीर
ट्रेनिंग
वेब एप्लिकेशन एपीआई
ऊपर, मैंने पहले ही लिखा था कि मुझे एपीआई मिला है। यह बिल्कुल मुश्किल नहीं था। सबसे पहले, मैंने उनके वेब एप्लिकेशन को देखा, लेखन के समय उनका समापन बिंदु यहां है: https://music.yandex.ru/api/v2.1/
। उनके पास पर्याप्त रूप से लंबे यूआरएल हैं जिनमें मैं डेटा में भाग लेता हूं, और वे फॉर्म भी भेजते हैं। मैं आपको एपीआई के संस्करण को इंगित करने के लिए ध्यान देने के लिए भी कहता हूं, यह है ।
आपको यह समझने की आवश्यकता है कि जो मैंने पाया है उसका उपयोग केवल एक वेब अनुप्रयोग में किया गया है। कोई OAuth नहीं है। अधिक सटीक रूप से, यह मौजूद होने की अधिक संभावना है, लेकिन साइट पर हमारे सत्र के आंतों में। सामान्य तौर पर, प्राधिकरण में बैसाखी के संबंध में पुस्तकालय उपयुक्त नहीं है।
एप्लिकेशन एपीआई
मैंने और खोज करने के लिए सेट किया। मैं फोन लेने के लिए बहुत आलसी था, इसलिए, मुझे मोबाइल एप्लिकेशन अंतिम रूप से मिलेंगे। उस समय, कंप्यूटर विंडोज 10 चला रहा था, और मैंने माइक्रोसॉफ्ट स्टोर से आधिकारिक यैंडेक्स म्यूजिक एप्लिकेशन का सक्रिय रूप से उपयोग किया था। नतीजतन, मैंने अध्ययन करना शुरू कर दिया कि यह कैसे काम करता है।
शोध के लिए, मुझे सभी एप्लिकेशन ट्रैफ़िक को ट्रैक करने के लिए एक स्निफ़र की आवश्यकता थी। आप Wireshark का उपयोग कर सकते हैं, लेकिन मैं HTTP विश्लेषक पर बस गया। यह मुझे अधिक हल्का लगता है और पूरी तरह से अपने काम के अनुकूल है।
स्निफर को चालू करें, एप्लिकेशन पर जाएं और आपका काम हो गया। अनुरोध प्रवाह द्वारा। हम बैठते हैं, समझते हैं, प्रत्येक हैंडलर को कॉल करने की कोशिश करते हैं जो इस एप्लिकेशन में है और सभी मौजूदा तरीकों, उनके तर्कों और निश्चित रूप से, JSON के उत्तरों के बारे में सीखते हैं।

ऊपर दिए गए स्क्रीनशॉट से आप तुरंत एक पूरी तरह से अलग एपीआई पते को देख सकते हैं - api.music.yandex.net
। इसके अलावा, शीर्षकों पर ध्यान दें। मेरे ग्राहक के बारे में जानकारी के अलावा जिसमें से अनुरोध किया गया था, एक OAuth टोकन है - यही आपको चाहिए!
लर्निंग एपीआई
अध्ययन लेखन कोड के साथ संयोजन के रूप में हुआ। मैंने एपीआई से प्राप्त सेवा वस्तुओं के लिए रैपर कक्षाएं लिखीं, अनुरोध भेजने को लागू किया, मापदंडों को छांटा और कुछ जगहों पर सिर्फ अनुमान लगाया कि यह नाम क्या हो सकता है। इस स्तर पर, मैं विभिन्न चीजों से मिला, जो मुझे यहां देखने की उम्मीद नहीं थी।
लेखन के समय, पुस्तकालय में 83 कक्षाएं होती हैं, और उनमें से केवल कुछ सहायक होती हैं। बाकी यांडेक्स म्यूज़िक क्लासेस हैं, जो इस सेवा के पैमाने और सार के स्तर को इंगित करता है।
~ 47 विधियों को भेजना लागू किया गया था। और यह सब उस एपीआई में नहीं है (नीचे उस पर अधिक)।
दर्द
सबसे पहले, मैंने ध्यान न देने की कोशिश की, मैं बस आश्चर्यचकित था, क्योंकि यह यैंडेक्स है , यह कैसे हो सकता है। लेकिन फिर, एक ही पल में, सब कुछ बम से उड़ गया। मैं, शायद, उसके साथ शुरू करूँगा।
फ़ील्ड अनुलग्नक के विभिन्न स्तरों के साथ दो ऑब्जेक्ट

वस्तु अपने आप में केवल एक "संदर्भ" है। इसके पूर्ण संस्करण के लिए। पटरियों की सूची का अनुरोध करते समय, हमें उनकी आईडी दी जाती है, जिसके द्वारा हम अधिक विस्तृत जानकारी प्राप्त कर सकते हैं। अच्छा अभ्यास, कई करते हैं, लेकिन यह हमेशा सम्मानित नहीं होता है (पैराग्राफ 9)।

इस ऑब्जेक्ट के लिए कक्षा को बहुत शुरुआत में लागू करने के बाद, मैंने सोचा कि मैं इसे हर जगह उपयोग करूंगा, लेकिन कोई फर्क नहीं पड़ता कि कैसे! मुझे ऐसा लगता है कि टिप्पणियां बहुत ही शानदार हैं और स्क्रीनशॉट में सब कुछ देखा जा सकता है।
मैंने अपनी लाइब्रेरी में इस तरह के जाम को ठीक नहीं किया है, इसलिए TrackShort
क्लास के पास अब TrackShortOld
।
वैसे, ये दोनों ऑब्जेक्ट लैंडिंग विधि में एक ही विधि से रहते हैं।
एपीआई संस्करण, तरीके
मैंने आपको केवल वेब अनुप्रयोग के लिए एपीआई में संस्करण कैसे निर्दिष्ट किया गया है, इस पर ध्यान देने के लिए नहीं कहा था। आमतौर पर, हम आमतौर पर एक संस्करण कैसे इंगित करते हैं? संभवतः निम्नलिखित तरीकों में से एक में:
- एक अलग उपडोमेन पर संस्करण बनाएं;
- संस्करण को अनुरोध भाग में रखें;
- अनुरोध के लिए एपीआई पैरामीटर का वांछित संस्करण पास करें।
यांडेक्स ने इस मामले में अन्यथा करने का फैसला किया। हमारे पास एक लैंडिंग 3 विधि है - लेखन के समय इसका वर्तमान संस्करण। लेकिन कोई भी लैंडिंग 2 के लिए एक अनुरोध भेजने से मना नहीं करता है - एक पूरी तरह से अलग संरचना, अन्य वस्तुएं।
मैंने इसे दुर्घटना से काफी खोजा, बस विधि नाम के अंत में एक संख्या जोड़ने और अपवादों का एक गुच्छा पकड़ने के लिए भूल गया ।
नए के साथ काम करना, पुराने को छोड़ना मत
मैंने यह देखा जब मैंने सभी वस्तुओं के लिए "लाइक" भेजने के तरीके लिखे। वास्तव में उनमें से कई नहीं हैं (प्लेलिस्ट, कलाकार, ट्रैक, एल्बम)। जब मैंने एक ही एक्शन के लिए अलग-अलग दृष्टिकोण देखे तो मेरा आश्चर्य क्या था।
हम इस तरह के कलाकारों को पसंद करते हैं: https://api.music.yandex.net/users/<USER_ID>/likes/artists/add
और artist-id
को फ़ॉर्म में स्थानांतरित https://api.music.yandex.net/users/<USER_ID>/likes/artists/add
।
हमें इस तरह के ट्रैक पसंद हैं: https://api.music.yandex.net/users/<USER_ID>/likes/tracks/add-multiple
और track-ids
।
यदि आपने ध्यान नहीं दिया है, तो जब आप ट्रैक पसंद करते हैं, तो ऐड-मल्टीपल विधि का उपयोग किया जाता है, न कि ऐड । इस पद्धति का उपयोग किसी भी अन्य प्रकार के साथ नहीं किया जाता है, लेकिन वे सभी मौजूद हैं (यह केवल एक अनुरोध भेजने के लिए लायक था)! और मैंने उन्हें जोड़ने के बजाय अपनी लाइब्रेरी में लागू किया। आखिरकार, यह विधि सार्वभौमिक है। आप एक ट्रैक या कई जोड़ सकते हैं।
एक अद्वितीय ट्रैक पहचानकर्ता क्या है
बहुत समय बीत चुका है, लेकिन मुझे अभी भी समझ में नहीं आया है कि कब सिर्फ ट्रैक की आईडी भेजनी है, और जब एक आईडी ( id:album_id
) के माध्यम से आईडी और एल्बम_आईडी का मिलान किया जाता है। कभी-कभी एक ट्रैक कई एल्बमों में होता है, कभी-कभी कोई एल्बम नहीं होती है। पक्ष से बहुत अस्पष्ट मामले, मुझे नहीं पता कि वे इससे कैसे निपटते हैं (या ऐसा नहीं कर सकते, 2 बगस)।
वैकल्पिक कई क्षेत्र
मुझे कुछ मुद्दे मिले। यदि कोई समस्या है, तो यह आवश्यक फ़ील्ड से संबंधित है। मैं कभी भी आश्चर्यचकित नहीं होता कि कैसे, मेरी राय में, आवश्यक फ़ील्ड केवल एपीआई वापस नहीं करते हैं।
- ट्रैक और ट्रैकशॉर्ट का एल्बम_आईडी;
- आदेश Auto_enewable (सदस्यता) वर्ग का;
- फ़ीड में next_revision;
- cover_uri ट्रैक में;
- खाते में जन्मदिन;
- प्लेलिस्ट में टैग।
सूची चलती है, लेकिन सब कुछ कमिट के इतिहास में है। शायद इस आइटम को उंगली से चूसा जाता है।
उत्तर में कुछ क्षेत्रों को छोड़कर समानता विधियां
खाता स्थिति प्रतिक्रिया ( api.music.yandex.net/account/status
):

प्रतिक्रिया रेडियो खाता स्थिति ( https://api.music.yandex.net/rotor/account/status
):

मैं समझता हूं कि अधिकार अलग हैं, फ़ील्ड अब कैश में पटरियों की संख्या पर नहीं, बल्कि प्रति घंटे स्किप की संख्या पर एक सीमा के साथ हैं, लेकिन यह किसी तरह के दोहराव की तरह दिखता है।
मुझे पता नहीं है कि येंडेक्स में कैसे हुआ, लेकिन मैंने इसे एक वर्ग में मिला दिया।
तो एक या कई?
मैंने हमेशा सोचा था कि अगर कोई विधि एक सूची लौटाती है, तो भले ही परिणाम एक तत्व हो, फिर भी इस तत्व वाली सूची वापस आ जाएगी और कुछ नहीं, लेकिन यहां और फिर, और बहुत कुछ।

वह फीचर वापस आएगा, फिर फीचर , फिर फीचर और फीचर्स ।
तरीकों का दुरुपयोग
ऊपर, मैंने लिखा कि वे एक क्रिया को करने के लिए एक या दूसरी विधि का उपयोग करते हैं। वे और आगे बढ़ गए।

प्लेलिस्ट आईडी और फ़्रेम के अलावा और किस ट्रैक को हटाना है, किसी कारण से वे पटरियों को हटाए जाने की विधि को प्लेलिस्ट से ट्रैक हटाने की विधि में स्थानांतरित कर देते हैं। यह संभव है कि मुझे यह समझ में नहीं आया, बाकी सब की तरह, लेकिन विधि बहुत अधिक जानकारी के बिना काम करती है। और क्या ट्रैक हटाए गए थे यह पैरामीटर द्वारा पारित करने की तुलना में, पीठ पर पता लगाना बेहतर है।
बहुत भारी अनुरोध
मैंने ऊपर लिखा है कि ट्रैक आईडी के साथ एक सूची देना अच्छा अभ्यास है, आपको ट्रैक के बारे में विस्तृत जानकारी केवल तभी मिलती है जब आपको वास्तव में इसकी आवश्यकता होती है। यह हमेशा यहां उपयोग नहीं किया जाता है।
एक निवेदन में "लाइक" प्लेलिस्ट से मेरे सभी ट्रैक्स की विस्तृत जानकारी कितनी बेरहमी से देते हैं, इस पर एक नज़र डालें:

इसने सभी 396 ट्रैक दिए ! बाइट्स प्राप्त: 3.75M , और यह एक और कवर डाउनलोड है!
Bagusiki
"लाइक" से कैश के सभी ट्रैक डाउनलोड करें
जब सीमा समाप्त हो गई, तो अंत में एक जोड़ बनाया गया और शुरुआत से हटा दिया गया। कतार के विज़ुअलाइज़ेशन के लिए धन्यवाद, लेकिन मुझे लगा कि मैं प्लेलिस्ट से अंतिम 100 ट्रैक डाउनलोड करूंगा। यह एंड्रॉइड के लिए मोबाइल क्लाइंट में हुआ ( वीडियो देखें )।
ऐसा लगता है कि मुझे आईडी भेजने की आवश्यकता नहीं है, लेकिन जब आईडी: एल्बम_आईडी

टिप्पणियां
उपहार कोड को सक्रिय करने के प्रयासों की संख्या 10 है। अगले 24 घंटों के लिए प्रतिबंध।
जिस एप्लिकेशन से आप बैठे हैं, उसके आधार पर, सदस्यता खरीदने के लिए अलग-अलग ऑफ़र किए जाते हैं।
कैश में पटरियों की संख्या की सीमा एक भ्रम है, यह सिर्फ एक संख्या है, और एप्लिकेशन आपको अधिक लोड करने की अनुमति नहीं देता (बैगस 2)।
ये सभी चतुर प्लेलिस्ट, सुझाव, पाठ और बटन रंग एपीआई से आते हैं - यहां यह वास्तविक RESTFull है।
विज्ञापन का आरंभ समय और विज्ञापन स्वयं भी वापस आ जाता है, भले ही आपके पास सदस्यता हो।
XML का एक लिंक जिसमें फ़ाइल के स्थान के बारे में डेटा है, जिसे डाउनलोड करने में 1 मिनट का समय लगता है, फिर 410 त्रुटि।
निष्कर्ष
मैंने वही लिखा जो मुझे याद था। आखिरकार, मैं कई महीनों के लिए यह सब करके आया। मेरे सभी नोट्स एक टेलीग्राम में संदेश हैं, क्योंकि जब मैं ऐसा कुछ करता था, तो मैं दोस्तों के साथ साझा करता था। मैंने मुख्य बिंदुओं को पुनर्स्थापित करने का प्रयास किया।
किसी भी तरह से मैं यह नहीं कहना चाहता था कि सब कुछ कितना बुरा था, किसी भी तरह जाम को जनता पर विशेष रूप से डालना। शायद यह एक जंबो नहीं है, लेकिन मैंने जो कुछ भी ऊपर लिखा है वह मुझे व्यक्तिगत रूप से अजीब लगता है।
उन्होंने आपके साथ साझा किया कि कैसे उन्होंने निजी Yandex.Music सर्विस API के लिए लाइब्रेरी लिखी और विकास के दौरान उन्हें किन चीजों का सामना करना पड़ा।
अब आप जानते हैं कि उनका विंडोज एप्लिकेशन कैसे और क्या काम करता है, और इसलिए मेरी लाइब्रेरी।
वैसे, अब मैं यह सब दस्तावेज करने की कोशिश करता हूं, जब मेरे पुस्तकालय का दस्तावेजीकरण होता है, मैं स्वचालित रूप से उनके एपीआई का दस्तावेज करता हूं। यह तंग है, और मुझे अभी भी औद्योगिक तकनीकी अभ्यास से गुजरने के लिए एक कंपनी खोजने का समय चाहिए।
यहाँ तक पढ़ने के लिए धन्यवाद!