जो लोग नहीं जानते हैं,
उनके लिए
pandora.com एक इंटरनेट रेडियो है जो उपयोगकर्ताओं की प्राथमिकताओं के अनुसार गाने का चयन करता है। हाल ही में, मेरा एक दोस्त अपनी पसंदीदा ऑडियो रिकॉर्डिंग की एक सूची डाउनलोड करना चाहता था। लेकिन पंडोरा में ही, ऐसी कोई संभावना नहीं है। इसलिए, मुझे उसकी चपेट में आना पड़ा ...
इसलिए, पेंडोरा से हमें गीत और कलाकार नामों की एक सूची मिलेगी, फिर हम उन्हें संपर्क एपीआई का उपयोग करके डाउनलोड करेंगे।
चरण 1. हम पेंडोरा जाते हैं, और देखते हैं कि जब हम पसंदीदा गीतों की सूची का अनुरोध करते हैं तो क्या होता है। हम ऐसे अनुरोध का पालन करते हैं:
Request URL:http://www.pandora.com/content/tracklikes?likeStartIndex=0&thumbStartIndex=5&webname=evgeny.vyalyy&cachebuster=1367100054190 Request Method:GET Status Code:200 OK Request Headersview source Accept:*/* Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:ru,en-US;q=0.8,en;q=0.6 Cookie:at=wNCFSbEDa7LTetjSbEwrXhkSGCSClV6j9vdiwaygcF8uwpsRlRg7usr3YsGsoHBfLJI3/y+zfNsMtHtvG5AA2Qg%3D%3D; v3ad=1:20:1:48206::5:0:0:0:505:011:MI:26163:0:1:0:0; __utma=118078728.1866197791.1367091864.1367091864.1367098565.2; __utmb=118078728.4.10.1367098565; __utmc=118078728; __utmz=118078728.1367091864.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); v2regbstage=true; atn=AT-1367099945481-858 Host:www.pandora.com Proxy-Connection:keep-alive Referer:http://www.pandora.com/profile/likes/evgeny.vyalyy User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Ubuntu Chromium/25.0.1364.160 Chrome/25.0.1364.160 Safari/537.22 X-Requested-With:XMLHttpRequest Query String Parametersview sourceview URL encoded likeStartIndex:0 thumbStartIndex:5 webname:evgeny.vyalyy cachebuster:1367100054190v
आइए इस क्वेरी का अनुकरण करने का प्रयास करें। हम अजगर अनुरोधों का एक गुच्छा + सुंदरसुप का उपयोग करते हैं:
resp = response.get("http://www.pandora.com/content/tracklikes?likeStartIndex=0&thumbStartIndex=5&webname=evgeny.vyalyy&cachebuster=1367100054190", headers={"Cookie":"at=wNCFSbEDa7LTetjSbEwrXhkSGCSClV6j9vdiwaygcF8uwpsRlRg7usr3YsGsoHBfLJI3/y+zfNsMtHtvG5AA2Qg%3D%3D; v3ad=1:20:1:48206::5:0:0:0:505:011:MI:26163:0:1:0:0; __utma=118078728.1866197791.1367091864.1367091864.1367098565.2; __utmb=118078728.4.10.1367098565; __utmc=118078728; __utmz=118078728.1367091864.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); v2regbstage=true; atn=AT-1367099945481-858"}) soup = BeautifulSoup.BeautifulSoup(resp.text) print soup
हम बहुत अधिक जानकारीपूर्ण HTML का एक बहुत कुछ नहीं मिलता है।
लेकिन हमारे अनुरोध में किसी भी तरह से कई मापदंडों पर संदेह है। आइए थोड़ा छोटा करने की कोशिश करें:
resp = response.get("http://www.pandora.com/content/tracklikes?likeStartIndex=0&thumbStartIndex=5&webname=evgeny.vyalyy", headers={"Cookie":"at=wNCFSbEDa7LTetjSbEwrXhkSGCSClV6j9vdiwaygcF8uwpsRlRg7usr3YsGsoHBfLJI3/y+zfNsMtHtvG5AA2Qg%3D%3D;"}) soup = BeautifulSoup.BeautifulSoup(resp.text) print soup
हुर्रे, जवाब नहीं बदला है!
अब, जवाब में देरी करते हुए, हमें पता चलता है कि सभी जानकारी डिवोबॉक्स-बॉडी क्लास के साथ div में संग्रहीत है। यहां देखें कि यह div कैसा दिखता है:
<div class="infobox-body"> <h3 class="s-0 line-h-1_4 normal"> <a href="/lynyrd-skynyrd/live-from-freedom-hall/sweet-home-alabama-live-from-freedom-hall" class="first">Sweet Home Alabama (Live From Freedom Hall)</a> </h3> <p class="s-0 line-h-1_4"> by <a href="/lynyrd-skynyrd">Lynyrd Skynyrd</a> </p> <p class="s-0 line-h-1_4"> <span class="profile_user_name">You</span> liked this on <a href="#" data-viewer-is-owner="true" data-station-id="1380018751859442317" class="like_context_stationname">The Offspring Radio</a>. </p> </div>
इसलिए, अब हम उन सभी सूचनाओं को बाहर निकाल सकते हैं, जिनमें हम रुचि रखते हैं:
import re PATT = re.compile(">(.*?)<") for x in soup.findAll(attrs={"class":"infobox-body"}): print [PATT.findall(str(xa))[0], PATT.findall(str(xpa))[0]]
पहला कदम खत्म हो गया है! =)
चरण दो Vk.com से रिकॉर्ड खोजें और डाउनलोड करें
Vk.com/editapp?act=create पर जाएं और एक नया एप्लिकेशन बनाएं। अब हमें access_token प्राप्त करने की आवश्यकता है। पीड़ित न होने के लिए, मैंने मैन्युअल रूप से access_token प्राप्त करने का निर्णय लिया, और बस इसे स्क्रिप्ट के मुख्य भाग में सम्मिलित किया। तो, चलो चलते हैं
oauth.vk.com/authorize?client_id=3608669&scope=audio&redirect_uri=https://oauth.vk.com/blank&display=wap&response_type=token
हमें एक नए पृष्ठ पर पुनर्निर्देशित करता है
oauth.vk.com/blank.html#access_token=***&expires_in=86400&user_id=17738938
हम एंकर से हमारे लिए access_token का ब्याज निकालते हैं। हम इसे vk.api के अनुरोधों के लिए उपयोग करेंगे।
हम एक छोटा ऑडियो सर्च फंक्शन लिखते हैं:
ACCESS_TOKEN = *** def audio_search(string): resp = r.get("https://api.vk.com/method/audio.search?q=%(q)s&sort=2&access_token=%(ACCESS_TOKEN)s"%{"q":string, "ACCESS_TOKEN":ACCESS_TOKEN}) return resp.json()
यह सबसे लोकप्रिय स्ट्रिंग स्ट्रिंग खोज परिणाम (ऑडियो रिकॉर्डिंग के बीच) लौटाता है।
समारोह प्रतिक्रिया है:
>>> audio_search("My little horse") {u'response': [1, {u'album': u'27504721', u'artist': u'\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d', u'url': u'http://cs521522.vk.me/u3391535/audios/746ddef4902c.mp3', u'title': u'my little horse', u'duration': 208, u'aid': 159749117, u'owner_id': 3391535}]}
अब हम यूआरएल को डाउनलोड करना जानते हैं। आप इसे मानक फ़ंक्शन urllib.urlretrieve का उपयोग करके डाउनलोड कर सकते हैं।
तो, निम्न स्क्रिप्ट निकली:
yadi.sk/d/7bP26GIQ4POa6उसके साथ कैसे काम करें:
1) स्क्रिप्ट के लिए अनुरोधों के पैकेज और ब्यूटीफुलसाउप की आवश्यकता होती है (सुडोल पाइप स्थापित अनुरोध्स ब्यूटीफुल)
2) आपको कुकी मान = = pandora.com से प्राप्त करने की आवश्यकता है (ऊपर देखें)
3) आपको ऊपर दिए अनुसार ACCESS_TOKEN प्राप्त करना होगा
4) आपको पैरामीटर सेट करने की आवश्यकता है COUNT_OF_SONGS - जितने गाने आप डाउनलोड करना चाहते हैं (कोई नहीं, अगर आपको सब कुछ डाउनलोड करने की आवश्यकता है)
5) DOWNLOAD_FOLDER_NAME = "ऑडियो" - वह निर्देशिका जहां डाउनलोड किया गया संगीत सहेजा जाएगा।
6) लोगिन - pandora.com पर अपना लॉगिन
स्क्रिप्ट के मुख्य भाग में संबंधित पैरामीटर लिखे जाने चाहिए।
अपने पसंदीदा संगीत को सुनें, और याद रखें कि चोरी एक पाप है =)
यूपीडी गलती से लॉगिन कोड अपडेट करना भूल गया। मैं माफी मांगता हूं
UPD2 उपयोगकर्ता के अनुरोध पर
डेनिम टोरनेडो को
लास्ट में उसी स्क्रिप्ट के लिए
yadi.sk/d/U7kAZFZh4P5Yzसेटिंग के लिए पैरामीटर:
- COUNT_OF_SONGS = कोई नहीं - गानों की संख्या। डिफ़ॉल्ट रूप से, सब कुछ डाउनलोड करें (लेकिन 1000 से अधिक नहीं)
- ACCESS_TOKEN = "" - इसे कैसे प्राप्त करें, ऊपर देखें
- लोगिन = "sallyruthstruik" - लास्ट पर आपका लॉगिन
UPD3उपयोगकर्ता
सेट्टी से :
LastFM के लिए संशोधित संस्करण
yadi.sk/d/tagClpSf4VsqQ+ स्क्रिप्ट फ़ोल्डर में BeautifulSoup जोड़ा गया। अब इसे स्थापित करना आवश्यक नहीं है
+ पुराने संस्करण में, खोज केवल ट्रैक के नाम से हुई। अब कलाकार के नाम से। अन्यथा, संपर्क बस कुछ भी देता है।
अपलोड की गई फ़ाइलों का निश्चित नामकरण: विशेष वर्णों को हटा देता है
+ काटे गए फ़ाइल नाम जो बहुत लंबे हैं
+ Lastfm अनुरोध के लिए अलग सेटिंग्स में प्रदर्शित: सीमा और पृष्ठ। अब आप 10, 50, 100, 500, आदि के पैक लोड कर सकते हैं। पृष्ठ द्वारा पृष्ठ को ट्रैक करता है। यदि आपके पास बहुत अधिक ट्रैक हैं, या आप स्लाइस के उदाहरण का उपयोग करके डाउनलोड परिणाम को ट्रैक करना चाहते हैं, तो उचित पृष्ठ और सीमाएं निर्धारित करें