html текст
All interests
  • All interests
  • Design
  • Food
  • Gadgets
  • Humor
  • News
  • Photo
  • Travel
  • Video
Click to see the next recommended page
Like it
Don't like
Add to Favorites

Получение любимых аудиозаписей с pandora.com

Для тех, кто не знает, pandora.com — интернет-радио, которое подбирает песни, согласно предпочтениям пользователей. Недавно один мой друг захотел скачать список любимых аудиозаписей. Но на самой пандоре, такой возможности нет. Поэтому пришлось влезть в ее нутро…


Итак, с пандоры будем получать список названий песен и исполнителей, потом с помощью API контакта будем их скачивать.

Шаг 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


Попробуем смоделировать этот запрос. Используем связку python requests + 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


Ура, ответ не изменился!
Теперь, покопавшись в ответе, получаем, что вся информация хранится в div-е с классом infobox-body. Вот как выглядит этот 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(x.a))[0], PATT.findall(str(x.p.a))[0]]


Первый шаг пройден! =)

Шаг второй. Поиск и скачивание записей из vk.com

Идем на vk.com/editapp?act=create и создаем новое приложение. Теперь надо получить access_token. Чтобы не мучаться, я решил получать access_token вручную, и просто вставлять его в тело скрипта. Итак, идем на
https://oauth.vk.com/authorize?client_id=3608669&scope=audio&redirect_uri=https://oauth.vk.com/blank&display=wap&response_type=token
Нас редиректит на новую страницу
https://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()


Она возвращает самый популярный результат поиска строки string(среди аудиозаписей).
Ответ функции такой:

>>> 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) Скрипт требует установленных пакетов requests и BeautifulSoup( sudo pip install requests BeautifulSoup)
2) Нужно получить значение куки at =… с pandora.com (см. выше)
3) Нужно получить ACCESS_TOKEN как это сделано выше
4) Нужно установить параметр COUNT_OF_SONGS — число песен, которое хочется скачать (None, если надо скачать все)
5) DOWNLOAD_FOLDER_NAME = «audio» — директория, куда будет сохраняться скачанная музыка.
6) LOGIN — ваш логин на pandora.com

Соответствующие параметры прописать в теле скрипта.
Слушайте любимую музыку, и помните, что пиратство — грех =)

UPD. Случайно забыл обновить логин коде. Извиняюсь
UPD2 По просьбе юзера DenimTornado такой же скрипт для lastfm

yadi.sk/d/U7kAZFZh4P5Yz

Парметры для настройки:
  • COUNT_OF_SONGS = None — число песен. По умолчанию качать все (но не более 1000)
  • ACCESS_TOKEN = "" — см. выше как его получить
  • LOGIN = «sallyruthstruik» — твой логин на lastfm


UPD3

От юзера Setti:

Доработанная версия для LastFM
yadi.sk/d/tagClpSf4VsqQ

+ Добавлен BeautifulSoup в папку со скриптом. Теперь его устанавливать не обязательно
+ В старой версии поиск происходил только по имени трека. Теперь и по имени исполнителя. Иначе вконтакт выдаёт просто что попало.
+ Исправлено именование загружаемых файлов: удаляются спецсимволы
+ Обрезаются слишком длинные имена файлов
+ Выведены в отдельные настройки для lastfm запроса: лимит и страница. Теперь можно загружать пачками по 10, 50, 100, 500 и т.д. треков постранично. Если у вас слишком много треков, или вы хотите проследить за результатом скачивания на примере среза, задайте соответствующие параметры страницы и лимита
Читать дальше
Twitter
Одноклассники
Мой Мир

материал с habrahabr.ru

1

      Add

      You can create thematic collections and keep, for instance, all recipes in one place so you will never lose them.

      No images found
      Previous Next 0 / 0
      500
      • Advertisement
      • Animals
      • Architecture
      • Art
      • Auto
      • Aviation
      • Books
      • Cartoons
      • Celebrities
      • Children
      • Culture
      • Design
      • Economics
      • Education
      • Entertainment
      • Fashion
      • Fitness
      • Food
      • Gadgets
      • Games
      • Health
      • History
      • Hobby
      • Humor
      • Interior
      • Moto
      • Movies
      • Music
      • Nature
      • News
      • Photo
      • Pictures
      • Politics
      • Psychology
      • Science
      • Society
      • Sport
      • Technology
      • Travel
      • Video
      • Weapons
      • Web
      • Work
        Submit
        Valid formats are JPG, PNG, GIF.
        Not more than 5 Мb, please.
        30
        surfingbird.ru/site/
        RSS format guidelines
        500
        • Advertisement
        • Animals
        • Architecture
        • Art
        • Auto
        • Aviation
        • Books
        • Cartoons
        • Celebrities
        • Children
        • Culture
        • Design
        • Economics
        • Education
        • Entertainment
        • Fashion
        • Fitness
        • Food
        • Gadgets
        • Games
        • Health
        • History
        • Hobby
        • Humor
        • Interior
        • Moto
        • Movies
        • Music
        • Nature
        • News
        • Photo
        • Pictures
        • Politics
        • Psychology
        • Science
        • Society
        • Sport
        • Technology
        • Travel
        • Video
        • Weapons
        • Web
        • Work

          Submit

          Thank you! Wait for moderation.

          Тебе это не нравится?

          You can block the domain, tag, user or channel, and we'll stop recommend it to you. You can always unblock them in your settings.

          • habrahabr.ru
          • домен habrahabr.ru

          Get a link

          Спасибо, твоя жалоба принята.

          Log on to Surfingbird

          Recover
          Sign up

          or

          Welcome to Surfingbird.com!

          You'll find thousands of interesting pages, photos, and videos inside.
          Join!

          • Personal
            recommendations

          • Stash
            interesting and useful stuff

          • Anywhere,
            anytime

          Do we already know you? Login or restore the password.

          Close

          Add to collection

             

            Facebook

            Ваш профиль на рассмотрении, обновите страницу через несколько секунд

            Facebook

            К сожалению, вы не попадаете под условия акции