Парсинг по аудиозаписям вконтакте. Получение контента страницы с помощью phantomJS. ППоиск композиций в постах
Привет, Хабр! Представляю вашему вниманию свой скромный проект для парсинга аудио Вконтакте.
Так как слушать музыку напрямую вконтакте не круто и не всегда возможно/удобно, я подумал, что неплохо бы иметь возможность стягивать свой плэйлист и плэйлисты друзей. Недостатком тех программ, что я юзал, было то, что приходилось качать по одной песне. Если плэйлист большой, то это не удобно и жутко долго. От своего приложения я хотел, чтобы оно могло качать всё и сразу, и чтобы музыка сортировалась по исполнителям.
В начале я думал, что обойдусь cURL, но как оказалось, контакт хитёр и выгружает по умолчанию ~50 песен. Но об этом позже.
1. Авторизация ВК
Тут я особо не изворачивался. Для того, чтобы получить свой профиль ВК, просто прикручиваем свои кукисы. Кука, которая нам нужна, называется remixsid .2. Получение контента страницы с помощью phantomJS
Скачать фантом можно отсюда . Для Linux версии достаточно его просто распаковать и добавить линк в /usr/bin (по желанию). О том, что это и с чем его едят, можете ознакомиться .Как я уже говорил, контакт выгружает не весь список аудио по умолчанию. Он подгружает его динамически в процессе прокручивания окна. К тому времени как я решил подключить фантом, у меня уже была готовая структура для парсинга странички, написанная на php, поэтому я решил не переписывать это на js. Сам фантом здесь только проскролливает окно и отдает контент страницы.
// return vk page content private function parseUrl($url) { // get remixsid value $sid = $this->RemixSid(); // get scrolled page $command = "phantomjs ".$_SERVER["DOCUMENT_ROOT"]."/js/phantom.vk.js" . " $sid $url"; $response = shell_exec($command); return $response; }
Листинг
Листинг
/*
* it must run from phantomjs
* args - remixsid cookie value
* args - target vk url
*/
var sys = require("system"),
page = require("webpage").create();
phantom.addCookie({
"name": "remixsid",
"value": phantom.args,
"domain": "vk.com"
});
page.settings = {
loadImages: false,
javascriptEnabled: true,
userAgent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
};
page.open(phantom.args, function() {
var tries = 0,
t = setInterval(function() {
page.scrollPosition = { top: page.scrollPosition.top + screen.height, left: 0 };
++tries;
if (tries === 40) {
console.log(page.content);
clearInterval(t);
phantom.exit();
}
},100);
});
Думаю, тут всё должно быть понятно. Объект page умеет работать с веб-страницами, передавать данные POST, GET, PUT, выполнять JS непосредственно в контексте открытой страницы и многое другое.
Внешние переменные доступны через массив args, глобального объекта phantom. На протяжении 4 секунд скрипт проскролливает страницу и отдает её контент page.content . Мне этого хватает, чтобы спарсить овер 2000+ песен.
Вывод в phantomJS осуществляется с помощью обычного console.log();
3. Парсим?
Если посмотреть исходный код странички, то мы найдем возле каждого трэка ссылку на поддомен vk.me, откуда собственно и загружаются аудиозаписиЯ не прикручивал библиотек для разбора html типа . А обошелся обычным регэкспом:
public function actionDownload()
{
$data = "";
// TODO: include html simple dom
$audioRegExp = "/\s*
Кому интересно узреть всё и сразу: github.com/zjiodeu/vkMusicParser
Всем спасибо. Если есть вопросы - пишите, отвечу в комментах.
Спасибо за внимание.
Теги: php, vk.com, phantomj
pull 15 февраля 2014 в 23:25Парсер аудио ВКонтакте PHP + phantomJS
- PHP
Привет, Хабр! Представляю вашему вниманию свой скромный проект для парсинга аудио Вконтакте.
Так как слушать музыку напрямую вконтакте не круто и не всегда возможно/удобно, я подумал, что неплохо бы иметь возможность стягивать свой плэйлист и плэйлисты друзей. Недостатком тех программ, что я юзал, было то, что приходилось качать по одной песне. Если плэйлист большой, то это не удобно и жутко долго. От своего приложения я хотел, чтобы оно могло качать всё и сразу, и чтобы музыка сортировалась по исполнителям.
В начале я думал, что обойдусь cURL, но как оказалось, контакт хитёр и выгружает по умолчанию ~50 песен. Но об этом позже.
1. Авторизация ВК
Тут я особо не изворачивался. Для того, чтобы получить свой профиль ВК, просто прикручиваем свои кукисы. Кука, которая нам нужна, называется remixsid .2. Получение контента страницы с помощью phantomJS
Скачать фантом можно отсюда . Для Linux версии достаточно его просто распаковать и добавить линк в /usr/bin (по желанию). О том, что это и с чем его едят, можете ознакомиться .Как я уже говорил, контакт выгружает не весь список аудио по умолчанию. Он подгружает его динамически в процессе прокручивания окна. К тому времени как я решил подключить фантом, у меня уже была готовая структура для парсинга странички, написанная на php, поэтому я решил не переписывать это на js. Сам фантом здесь только проскролливает окно и отдает контент страницы.
// return vk page content private function parseUrl($url) { // get remixsid value $sid = $this->RemixSid(); // get scrolled page $command = "phantomjs ".$_SERVER["DOCUMENT_ROOT"]."/js/phantom.vk.js" . " $sid $url"; $response = shell_exec($command); return $response; }
Листинг
Листинг
/*
* it must run from phantomjs
* args - remixsid cookie value
* args - target vk url
*/
var sys = require("system"),
page = require("webpage").create();
phantom.addCookie({
"name": "remixsid",
"value": phantom.args,
"domain": "vk.com"
});
page.settings = {
loadImages: false,
javascriptEnabled: true,
userAgent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
};
page.open(phantom.args, function() {
var tries = 0,
t = setInterval(function() {
page.scrollPosition = { top: page.scrollPosition.top + screen.height, left: 0 };
++tries;
if (tries === 40) {
console.log(page.content);
clearInterval(t);
phantom.exit();
}
},100);
});
Думаю, тут всё должно быть понятно. Объект page умеет работать с веб-страницами, передавать данные POST, GET, PUT, выполнять JS непосредственно в контексте открытой страницы и многое другое.
Внешние переменные доступны через массив args, глобального объекта phantom. На протяжении 4 секунд скрипт проскролливает страницу и отдает её контент page.content . Мне этого хватает, чтобы спарсить овер 2000+ песен.
Вывод в phantomJS осуществляется с помощью обычного console.log();
3. Парсим?
Если посмотреть исходный код странички, то мы найдем возле каждого трэка ссылку на поддомен vk.me, откуда собственно и загружаются аудиозаписиЯ не прикручивал библиотек для разбора html типа . А обошелся обычным регэкспом:
public function actionDownload()
{
$data = "";
// TODO: include html simple dom
$audioRegExp = "/\s*
Кому интересно узреть всё и сразу: github.com/zjiodeu/vkMusicParser
Всем спасибо. Если есть вопросы - пишите, отвечу в комментах.
Спасибо за внимание.
Теги: php, vk.com, phantomj
Сбор и анализ людей, слушающих определенные песни и исполнителей, поможет сразу в нескольких случаях. Это и продвижение концертов, и развитие музыкальных пабликов, и выбор песен для своих постов, но обо всем по порядку.
ППоиск исполнителей и композиций
Для поиска аудитории, слушающей определенных исполнителей или песни, нам понадобится инструмент , который можно найти в левом меню с инструментами.
В парсере есть возможность выбирать разные города из России и собирать из них любителей той или иной музыки. Можно выбрать разные варианты для поиска аудитории, это:
— поиск только по исполнителю (найдутся все люди, добавившие песни выбранного исполнителя)
— поиск одновременно по исполнителю и названию композиции (например, 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. Если вы лучше воспринимаете видео, а не текст, то у нас есть кое-что и для вас: