Скачиваем музыку из vk с помощью python / Sandbox / Habr
Всем, привет. Я люблю слушать музыку в ВК, так как малоизвестные группы обычно выкладывают свою музыку туда. Приложение, через которое я слушал бесплатно в фоне, почему-то перестало рабоать, и тогда решил скачать музыку на телефон. Тыкать в браузере очень долго, а светиться на сайтах, которые скачивают музыку, я не хотел. Пришла в голову идея скачать музыку с помощью питона. Через официальное API от ВК скачать музыку не выйдет, так как они отключили публичный API для аудио. Сначала был вариант парсить мобильную версию и тащить оттуда ссылки на песни, но я не умею парсить сайты, да и python отличается именно тем, что для любой задачи уже есть модуль. Собственно полазил в google нашел библиотеку vk_api. У нее как раз есть метод, который возвращает ссылки на песни.Сначала импортируем нужные модули. Модуль time нужен, чтоб посмотреть за сколько скачивались ваши песни. Он не обязателен.
import vk_api from vk_api import audio import requests from time import time import os
Теперь добавим немного переменных. name_dir — имя папки, в которую скачаются песни (добавил, чтоб все аккуратно было), а path — путь, куда скачаются песни
REQUEST_STATUS_CODE = 200
name_dir = 'music_vk'
path = r'E:\python\course\music\\' + name_dir
login = '___' # Номер телефона
password = '___' # Пароль
my_id = '____' # Ваш id vk
Здесь создаем нашу папку name_dir, если ее нет.
if not os.path.exists(path):
os.makedirs(path)
Теперь нам нужно авторизоваться и получить список песен.
vk_session = vk_api.VkApi(login=login, password=password)
vk_session.auth()
vk = vk_session.get_api() # Теперь можно обращаться к методам API как к обычным
# классам
vk_audio = audio.VkAudio(vk_session) # Получаем доступ к audio
Переходи в директорию, куда будем сохранять песни
os.chdir(path)
А вот и алгоритм, который скачивает песни и сохраняет их. vk_audio.get(owner_id=my_id) — возвращает список песен по переданному id. Итерируемся по этому списку, чтоб потом записать каждую песню в файл
time_start = time()
for i in vk_audio.get(owner_id=my_id):
try:
r = requests.get(i["url"])
if r.status_code == REQUEST_STATUS_CODE:
with open(i["artist"] + '_' + i["title"] + '.mp3', 'wb') as output_file:
output_file.write(r.content)
except OSError:
print(i["artist"] + '_' + i["title"])
time_finish = time()
print("Time seconds:", time_finish - time_start)
У меня 1000 песен качались 600 секунд.
vk_audio.get(owner_id=my_id) — возвращает список. Список выглядит вот так:
[ { "id": 456239850, "owner_id": Здесь будет переданный id, "url": "https://cs1-67v4.vkuseraudio.net/p9/d6e2cf63cf34b8.mp3?extra=KIpwmZ_N4DW8dxSL5waeW4LtuhKO_6Wjamf1xjc0kg7YT_iGXVtayuRtTU0tspSNAaMGKYqcmLluZXjdLqXifH-p2h83sCpo2yzN3fO2p9M1sOHpx0_X_abTKzVXO7Uwsf6YiZOWL1P5RQmSOZhY3GEz", "artist": "Lumen", "title": "Sid & Nancy", "duration": 247 }, ... ]
При скачивании песен возникла вот такая ошибка, не совсем понял что это. Мне кажется связано с названием песен. Разбираться было лень, поэтому я просто вывел название песен в консоль. Вот ошибка:
Требуемые модули: request, vk_api, BeautifulSoup4
Парсинг по аудио или как искать меломанов
Сбор и анализ людей, слушающих определенные песни и исполнителей, поможет сразу в нескольких случаях. Это и продвижение концертов, и развитие музыкальных пабликов, и выбор песен для своих постов, но обо всем по порядку.
ППоиск исполнителей и композиций
Для поиска аудитории, слушающей определенных исполнителей или песни, нам понадобится инструмент «Поиск по аудио», который можно найти в левом меню с инструментами.
В парсере есть возможность выбирать разные города из России и собирать из них любителей той или иной музыки. Можно выбрать разные варианты для поиска аудитории, это:
— поиск только по исполнителю (найдутся все люди, добавившие песни выбранного исполнителя)
— поиск одновременно по исполнителю и названию композиции (например, Nirvana — Come As You Are)
— поиск только по названию композиции (указываем нужное произведение и получаем всех людей, добавивших его в аудиозаписи).
Здесь же можно задать фильтр по точному вхождению, который позволяет получить результат в том же виде, что вы указали в запросе. Например, если вы указали «Nirvana — Come As You Are», то соберутся только люди, у которых в аудиозаписях присутствует точно такое название. Вы не получите ни вариант «Come As You Are — Nirvana», ни вариант «Come As You Are» без слова Nirvana.
Далее выбираем количество композиций нужной группы у пользователя. Это позволит собрать фанатов конкретных групп и исключить людей, которые могли услышать одну песню, добавить ее к себе, но не знать ничего об исполнителе.
Чтобы отбросить «мусорные композиции», например, оригинальная песня звучит 5 минут, а у пользователя добавлена десятисекундная композиция, используйте фильтрацию по длительности композиции.
ППоиск композиций в постах
Помимо поиска людей, добавивших к себе в аудиозаписи нужные композиции, мы можем искать людей, которые проявляли активность в постах с определенными треками. Для этого нам потребуется инструмент «Сбор новостей», в нем можно указать ключевые слова по которым будет проходить поиск. Например, найдем все посты со словом Nirvana, можно выбрать период их создания, а также задать сбор только постов с определенными вложениями. К примеру, собрать все записи, в которых упоминалось слово Nirvana, а к посту прикреплены аудиозаписи.
Так мы получим все посты, в которых встречается упоминание нужной группы или песни, а дополнительные фильтры помогут оставить только нужные посты.
Чтобы выгрузить людей, проявивших активность в этих постах, надо нажать «Парсить отфильтрованный список» и выбрать какую аудиторию надо получить. Например, можно найти только людей, которым понравилось несколько найденных записей.
ААнализ аудитории
Любую собранную аудиторию можно проанализировать в разделе задания, нажав на воронку и выбрав пункт «Аналитика». Чем лучше вы знаете свою аудиторию, тем проще будет подобрать к ней ключ.
Во-первых, если вы искали группы определенного жанра, то могли пропустить несколько из них или посчитать, что у них мало слушателей. При помощи анализа аудитории вы увидите все композиции, которые люди добавили к себе в аудиозаписи и узнаете их процентное соотношение. В дальнейшем вы сможете отдельно собрать аудиторию по найденным в аналитике композициям.
Во-вторых, многие авторы любят прикреплять к записи различные песни и часто их выбор зависит от личных предпочтений, либо от трендов. В тоже время, ваша аудитория может любить совершенно другую музыку и все ваши старания пройдут даром. При помощи анализа аудитории можно изучить ее музыкальные предпочтения и добавлять только песни, которые слушают именно участники вашего сообщества.
P.S. Если вы лучше воспринимаете видео, а не текст, то у нас есть кое-что и для вас:
Парсер музыки с вконтакте vk + antigate CMS VKSM поисковик
Парсер музыки с вконтакте vk + antigate CMS VKSM поисковик
октября 28, 2013 admin_wmscriptОдин из самых популярных поисковиков музыки через апи вконтакте, был переделан с бесплатного движка open player и в своё время продавался за немалую сумму. Но как оказалось что копия данного скрипта оказалась в паблике, а что есть в паблике то обязательно должно быть и у нас.
Данная версия по утверждению «автора» является VKSM CMS 9.5
Описание со страницы автора:
Действительно скрипт неплохой, но для запуска проекта требуется как минимум смена шаблона, дизайна.
Просмотреть рабочий готовый скрипт можно на сайте http://mp3poisk.wm-scripts.ru
Скачать готовый скрипт VKSM CMS 9.5 бесплатно, можно по ссылке
Вы можете оставить комментарий, или ссылку на Ваш сайт.Получаем музыку Вк через сторонний API / Habr
В этот раз дело начиналось после закрытия методов audio в методе execute.
Я решил посмотреть, как получают музыку сайты, которые предоставляют возможность ее скачать. Меня заинтересовал сайт vrit.me.
Я залез во вкладку network и увидел интересный запрос:
То есть, можно подделать POST запрос к этому сайту, и использовать его, как API для музыки vk, что я сразу и реализовал:
import json,requests
s = requests.post("https://vrit.me/data.php",data={
"method": "audio.get",
"count": 1000000000,
"offset": 0,
"user_id":-52922518})
s = json.loads(s.text)
print(s)
В результате получил такой ответ:
{'response': {'count': 2, 'items': [{'id': 456239018, 'owner_id': -52922518, 'artist': 'CORVUS', 'title': 'Осеннее смятение [ЗС]', 'duration': 126, 'date': 1474194635, 'url': 'https://cs1-81v4.vkuseraudio.net/p18/894f30b49d3571.mp3?extra=5xovvbyqXrdr0Ixl9FLteg-pRRC29pGr_yO8mDgqNN_4kLlxJe1gHST8S8bVy2IQt0wYFAC1tMCnF7p5ujeB7K1jFPfYSCaEuxjh5P92VT81AMd9AlIJx2GQp613xHxCRbXCynv6fqdhFcPwvyZaRvg', 'lyrics_id': 370291093, 'genre_id': 18, 'is_licensed': True, 'is_hq': True, 'track_genre_id': 11, 'access_key': '7b762a5b22b452d0ca'}, {'id': 456239017, 'owner_id': -52922518, 'artist': 'CORVUS', 'title': 'Записки сумасшедших [ЗС]', 'duration': 132, 'date': 1470474699, 'url': 'https://cs1-81v4.vkuseraudio.net/p4/7f6c08b134e0a7.mp3?extra=MgBr8oDpO-7f2l_qmtHZGAMD608vcqWxA8OLNgcyZDdA8aVc2Jlj9bDW48FW8S5zDA9jO-geAEUaF_LvFUP_DFiGZEFo-5B92YhcMYMpyuvi6tFt_nO4QVwjJjNhG-Ln3dOfkC4KY2Cywk_attG5fSQ', 'lyrics_id': 370291112, 'genre_id': 18, 'is_licensed': True, 'is_hq': True, 'track_genre_id': 11, 'access_key': '8717a672801e7a15fa'}]}}
НО! т.к. любая ссылка на аудио вк привязывается к IP адресу компьютера,
то когда я открыл ее на своем пк, то получил ошибку:
Дальше я все-таки решил посмотреть, как на самом сайте vrit.me генерируется ссылка. Оказалось, что эта ссылка подставляется в другую ссылку и в результате на выходе получается ссылка вида
https://vrit.me/download?artist=Егор Крид&title=ЭТОМОЕ&url=https://cs1-60v4.vkuseraudio.net/p20/6d11e54193b7e0.mp3?extra=CZi_FWKxxoYdOTg7Sz4cksgJ_l12bqsxH8wZFPRoN6t7qf4at_MDouTA6MDmsLiaoFrDJDswVzKozagVNVCskf3LiR3ry-JvP9WHgisWn7nq7BradXYcffgAlQh3VTWoTFDgpVwhdRZMUV6ATpr6KQ
То есть нам надо всего лишь полученную ссылку «вписать» в другую ссылку. Реализация:
for i in range(len(data["response"]["items"])):
url = data["response"]["items"][i]["url"]
title = data["response"]["items"][i]["title"]
artist = data["response"]["items"][i]["artist"]
data["response"]["items"][i]["url"] = "https://vrit.me/download?title={title}&artist={artist}&url={url}".format(url=url,title=title,artist=artist)
Другие методы с аудио
Еще я попытался вызвать такие методы как «audio.getById», «audio.search», «audio.getCount», «audio.getLyrics», «audio.getAlbums» но из них работает только один метод «audio.search», и то, искать по музыке пользователя нельзя, можно только в глобальном поиске. Код:
s = requests.post("https://vrit.me/data.php",data={
"method": "audio.search",
"count": 3,
"offset": 0,
"q":q})
data = json.loads(s.text)
if "response" in data:
data = data["response"]
for i in range(len(data["items"])):
url = data["items"][i]["url"]
title = data["items"][i]["title"]
artist = data["items"][i]["artist"]
data["items"][i]["url"] = "https://vrit.me/download?title={title}&artist={artist}&url={url}".format(url=url,title=title,artist=artist)
Финальный код
import requests,json
class audio():
def get(owner_id):
s = requests.post("https://vrit.me/data.php",data={
"method": "audio.get",
"count": 1000000000,
"offset": 0,
"user_id": owner_id})
data = json.loads(s.text)
if "response" in data:
data = data["response"]
for i in range(len(data["items"])):
url = data["items"][i]["url"]
title = data["items"][i]["title"]
artist = data["items"][i]["artist"]
data["items"][i]["url"] = "https://vrit.me/download?title={title}&artist={artist}&url={url}".format(
url=url,
title=title,artist=artist)
return data
def search(q):
s = requests.post("https://vrit.me/data.php",data={
"method": "audio.search",
"count": 300,
"offset": 0,
"q":q})
data = json.loads(s.text)
if "response" in data:
data = data["response"]
for i in range(len(data["items"])):
url = data["items"][i]["url"]
title = data["items"][i]["title"]
artist = data["items"][i]["artist"]
data["items"][i]["url"] = "https://vrit.me/download?title={title}&artist={artist}&url={url}".format(
url=url,
title=title,artist=artist)
return data
Вызывать этот класс можно так:
import bot_vk#pip install bot_vk==1.7
info1 = bot_vk.audio.get(owner_id=1234567)
info2 = bot_vk.audio.search(q="imagine dragons")
P.S. В этой статье представлен пример получения музыки одного из сайтов. Есть еще много подобных сайтов, из которых тоже можно сделать «API». Скорее всего сайт vrit.me скоро перестанет быть действительным, и надо будет пользоваться другими сайтами.
ВНИМАНИЕ! Автор этого поста не несет ответственности за какие-либо Ваши действия. Этот пост создан только с ознакомительными целями!
Как теперь получить ссылку на mp3 при парсинге vk.com (Вконтакте)? — Хабр Q&A
С сегодняшнего дня заметил, что если парсить урл mp3 c vk.com путем пост запроса на https://vk.com/al_audio.php (предварительно авторизовавшись)например такого act=reload_audio&al=1&ids=33503953_157663689%2C33503953_172403905%2C33503953_170887163%2C33503953_170651507%2C33503953_158704841%2C33503953_157663689
То урл на mp3 больше не возвращается, а возвращается только ответ такого типа (перевел jsom в массив):
array (
0 =>
array (
0 => '157663689',
1 => '33503953',
2 => 'https://vk.com/mp3/audio_api_unavailable.mp3?extra=s1HhmNLsEum1zfHyAu1jxOuVuMj5s2Pjsf8VEefYBY1vwvPjAuHWngnxrwS3ytOWBOrtrZHMDwnutI8OzOKVnxHqrhvWy1C9rwHbsZfAsNfZsOLbngD4qJHyu2DqptDHwfv6D1vsvJDlzeTgDLiXChm1tZKOAhy3zOWTyvbRCM9VAOvFwLbLpxvZt25VrKHmCZ9LreeUy3rOmMDZmMDNy2rXzxjTA2neBuHZqI5cCNeTEu0UzKPJlwLhCw1ToKDeseh3#CGSOnGLYcZmZcxy',
3 => 'Невесомость',
4 => '4 апреля',
5 => 200,
6 => 0,
7 => 0,
8 => '',
9 => 0,
10 => 1,
11 => '',
12 => '[]',
13 => '//bff041ac529e483557',
),
1 =>
array (
0 => '172403905',
1 => '33503953',
2 => 'https://vk.com/mp3/audio_api_unavailable.mp3?extra=zXWDzaW6pr4sabOCgsmIbgPGcqvLy2m6gam7oISGkHWwiN4ebHScaqnIjgqenWqhjduMzHfMkrONbH06yISlct0egYaybdadbdycfYuhyMuhgwSPjdKHmbjHpXbIbYrLcGK7oXvIkIyKoICIjWKBnWyhysqgcJi3dgaYhcS3zMahFIeYftuuddTLog4YisCRnMXGiZ59zgvIz2rNy2bQzZfHygz8zcn8jZy9FtO3mh54jx1Njwf+zcaWFhXPicmNjZS#EaTtcxy',
3 => 'Careless Whisper (George Michael Cover)',
4 => 'Seether',
5 => 302,
6 => 0,
7 => 0,
8 => '',
9 => 0,
10 => 32769,
11 => '',
12 => '[]',
13 => '//8cb914bae6de4fc957',
),
2 =>
array (
0 => '170887163',
1 => '33503953',
2 => 'https://vk.com/mp3/audio_api_unavailable.mp3?extra=A3neCLbJzM5MCZfNsuXtz1jwsKjTEMX3Ew9suNCZr2jOtfv1r2HAmLjcnuHbuhvkCwOXqwO3rgfhtvv0vv83vwDQsLPgsdrqvKO5vNjKEg4WsvjkAgPFBZvrqKPfrdr5Cey4zu9psuLortzozdztzxvvzdLTyMiWsvnblwXqBK5Nse5kwdntneuYxZ1HCNr4zt8ZCgOUztqWnge1mwyOm2vKmgyVmdjWl3rLBI5UzgmTA3yUnhy1ltDZyY8VoNnWDhr0#DG',
3 => 'Runaway Train',
4 => 'Soul Asylum',
5 => 266,
6 => 0,
7 => 0,
8 => '',
9 => 0,
10 => 1,
11 => '',
12 => '[]',
13 => '//40e1941ff852a5373e',
),
3 =>
array (
0 => '170651507',
1 => '33503953',
2 => 'https://vk.com/mp3/audio_api_unavailable.mp3?extra=uK5osKKafrvzsqOxcuWofeXrf1LEvbruxO4vsGSofqOlcGipcqWjdLGmcaLyffDkcqvFqK5iwWCocO1cchn/dv9+uq1YaOP/xvnICWnvyg91vfv0waTIuL8nDO5ZwgXZtNb0xxLxww9lDxh5xeXxsxX4xqP4xW1+fOj5ExKccuP2uLnsCeXPCM5Fcx1pxMuxxfzIwgOxBu9BF3njs1bmswPdAgP+yf5Sva1wyhL4AujYu1v1yNLqqWnGD3vGua5OB2v3#EaTzcxGlyW',
3 => 'Deceit',
4 => 'Metalforce',
5 => 327,
6 => 0,
7 => 0,
8 => '',
9 => 0,
10 => 1,
11 => '',
12 => '[]',
13 => '//12c4bf3458d3f70c35',
),
4 =>
array (
0 => '158704841',
1 => '33503953',
2 => 'https://vk.com/mp3/audio_api_unavailable.mp3?extra=uO85zuTPC3aWmOTKmOjWC1HpCJvKnK9Une9PqJaVAwS2l2W9tejrmOu9uK4VzITrmt1qBMi9mdf2Egz2s1P2AvPIDxvXnKvkmI95BhrOk29UzxnXy2PqDNzIlZL2ptr1rc16CZjVu3zTChjSBMW5rw9KBwiRyOvgtvmZs2rqBhLQBg5jq2jeAKnYpvDyyMr0mt9optKUmvf5tfjAtLjsmtj5wvHwtKW9vMqXkY4Rt10Tn2yUmgznlvjJwLzwoMm9zgqO#CGSOoqL2',
3 => 'Свобода',
4 => 'Ария',
5 => 313,
6 => 0,
7 => 0,
8 => '',
9 => 0,
10 => 1,
11 => '',
12 => '[]',
13 => '//8823e17f4869e0b9c5',
),
)
Где ссылки на mp3 заменены на аудиозапись https://vk.com/mp3/audio_api_unavailable.mp3?extra… с текстом о том, что нужно использовать официальные приложения для использования музыки в контакте. Подозреваю, что тут как-то зашифрована ссылка на mp3, которая выдергивается какой-нибудь функцией. Кто-нибудь знает, как получить теперь ссылку на нужную mp3? Заранее спасибо.
P. s. Для тех кто читает невнимательно, еще раз повторюсь — я говорю о прямом парсинге ВК, а не об использовании API. Не надо писать в 100500-ый раз, что апи с 16 декабря не работает, я об этом знаю, прямой парсинг сайта vk.com до последних дней работал, сегодня обнаружил, что не работает.
|
Парсер музыки | Datacol
Парсер музыки
Парсер музыки в первую очередь пригодится вебмастерам развлекательных порталов. Дело в том, что мультимедийные сайты довольно быстро собирают трафик. В то же время на сегодняшний день существует огромное количество бесплатного контента, который можно использовать для своего развлекательного портала.
При парсинге музыки (и размещении музыкальных файлов на своем вебресурсе) нужно обязательно помнить об авторских правах. В обратном случае можно сильно пострадать, поскольку нарушение авторского права сродни нарушению закона.
Парсер музыки Вконтакте
Социальная сеть Вконтакте для многих сейчас стала основным хранилищем музыкальных файлов. Там действительно можно найти такие музыкальные файлы, которые в открытом доступе больше практически нигде не добудешь. В связи с этим само собой напрашивается решение осуществлять парсинг музыки из Vkontakte (то есть сделать парсер аудио из Вконтакте). Здесь нужно помнить, что Вконтакте активно борется с роботами, и для массового скачивания музыки необходимо обзавестись не одним аккаунтом и большим количеством проксисерверов. Стоит отметить, что парсера, которые мы создаем, поддерживают как многопоточность (и соответственно возможность одновременно работать из под разных аккаунтов), так и работу через списки прокси серверов.
Интересно, что на базе парсеров музыки Вконтакте иногда создаются целые аналитические системы. Например, мы создавали программный комплекс, который исследовал музыкальные предпочтения целых групп пользователей Vkontakte. Таким образом определялись наиболее популярные треки среди представителей определенной демографической или возрастной группы. Безусловно, создание такого комплекса на профессиональном уровне очень трудоемко и требует значительных временных (с нашей) и финансовых (с вашей) затрат стороны.
Парсер поисковика музыки
Сейчас многие пользователи интернета ищут музыкальные файлы в специализированных поисковых системах. Например, http://poiskm.ru/ . Аналогично мы можем создать парсер поисковика музыки. Но стоит отметить, что поиск музыки, реализованный вконтакте, намного более удобен (и база там пообширнее, чем у любого поисковика музыки).
Парсер музыки для WordPress
Многие блоги сейчас имеют отдельные разделы, посвященные музыки. В таких случаях нам заказывают парсер музыки с экспортом в WordPress. При этом музыкальные файлы могут закачиваться сразу на ваш хостинг, чтобы ваши пользователи не зависели от сайтов источников.
Если вам понадобился парсер музыки, то мы можем обсудить его создание прямо сейчас! Возможность парсить музыку из ВКонтакте зависит от особенностей верстки. При изменениях верстки парсинг может не работать.