pandora.comからお気に入りのオーディオレコーディングを取得する

知らない人のために、 pandora.comはユーザーの好みに応じて曲をピックアップするインターネットラジオです。 最近、私の友人がお気に入りのオーディオ録音のリストをダウンロードしたいと思いました。 しかし、Pandora自体には、そのような可能性はありません。 したがって、私は彼女の腸に入る必要がありました...





したがって、Pandoraから曲名とアーティスト名のリストを受け取り、contact APIを使用してそれらをダウンロードします。



ステップ1. Pandoraにアクセスし、お気に入りの曲のリストをリクエストするとどうなるかを確認します。 そのような要求を観察します。

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
      
      







このクエリをシミュレートしてみましょう。 たくさんのpythonリクエスト+ BeautifulSoupを使用します。



 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
      
      







やった、答えは変わっていません!

答えを詳しく調べてみると、すべての情報がinfobox-bodyクラスを使用して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]]
      
      







最初のステップは終わりました! =)



ステップ2 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}]}
      
      







これで、ダウンロードするURLがわかりました。 標準関数urllib.urlretrieveを使用してダウンロードできます。



そのため、次のスクリプトが判明しました。



yadi.sk/d/7bP26GIQ4POa6



彼と働く方法:



1)スクリプトには、リクエストとBeautifulSoupのインストールパッケージが必要です(sudo pip install requests BeautifulSoup)

2)= ...でpandora.comからCookieの値を取得する必要があります(上記を参照)

3)上記のようにACCESS_TOKENを取得する必要があります

4)パラメータCOUNT_OF_SONGS-ダウンロードする曲の数を設定する必要があります(すべてをダウンロードする必要がある場合はなし)

5)DOWNLOAD_FOLDER_NAME = "audio"-ダウンロードされた音楽が保存されるディレクトリ。

6)ログイン-pandora.comでのログイン



対応するパラメーターは、スクリプトの本文に記述する必要があります。

お気に入りの音楽を聴き、海賊行為は罪であることを忘れないでください=)



UPD ログインコードの更新を忘れてしまいました。 謝ります

UPD2ユーザーDenimTornadoのリクエストで、 lastfmの同じスクリプト



yadi.sk/d/U7kAZFZh4P5Yz



設定用パラメーター:





UPD3



ユーザーSettiから:



LastFMの修正バージョン

yadi.sk/d/tagClpSf4VsqQ



+スクリプトフォルダーにBeautifulSoupを追加しました。 今ではそれをインストールする必要はありません

+古いバージョンでは、検索はトラックの名前のみで行われました。 アーティストの名前で。 それ以外の場合、連絡先は単に何でも提供します。

+アップロードされたファイルの命名を修正:特殊文字を削除

+長すぎるファイル名の切り捨て

+ lastfmリクエストの個別の設定で表示:制限とページ。 これで、10、50、100、500などのパックをロードできます。 ページごとに追跡します。 トラックが多すぎる場合、またはスライスの例を使用してダウンロード結果を追跡する場合は、適切なページと制限パラメーターを設定します



All Articles