Помогите с регуляркой

A
На сайте с 18.02.2009
Offline
46
906

Всем здрасьте, помогите с регуляркой, не могу получить отсюда (vk.com/audio?) имя трека и ссылку на файл (ссылка на файл есть в исходнике). Не могу понять суть регулярных выражений. :gm:

Аккаунты на торрент-трекеры. () Тут дают деньги!!! (http://Pop-Bazar.com/registration.php?ref=2115)
siv1987
На сайте с 02.04.2009
Offline
427
#1

Суть http://ru.wikipedia.org/wiki/Regular_expression

Название треков

Audio\.selectPerformer\(event, '(.+?)'\);

Ссылки

http://cs\d+\.userapi\.com/[^\s.]+\.mp3
A
На сайте с 18.02.2009
Offline
46
#2

siv1987, спасибо, только я немного не догоняю...так?

preg_match_all("Audio.selectPerformer\(event, '(.+?)'\);",$answer,$parse);

и в $parse я получу массив ссылок?

siv1987
На сайте с 02.04.2009
Offline
427
#3

Разделители укажите.

Массив ссылок вы получите со второй регуляркой. Связь между этими массивами будет по ключу элемента.

DavyJohnes
На сайте с 05.01.2011
Offline
84
#4
allmuz:
Всем здрасьте, помогите с регуляркой, не могу получить отсюда (vk.com/audio?) имя трека и ссылку на файл (ссылка на файл есть в исходнике). Не могу понять суть регулярных выражений. 😒

В данном отдельно взятом случае можно поступить следующим образом:

При запросе к vk.com/audio Вы в ответ получите Json данные со всяким мусором. Поэтому:

Шаг 1.

preg_match('#\{.*\}#is',<переменная_с_ответом_от_сервера>,$data)

Теперь в $data будут содержаться чистые json данные.

Шаг 2.

$a_data=json_decode($data);

Теперь в $a_data находиться обычный массив и с титлами и с ссылками. Сделайте его var_dump и все поймете.

P.S.: Для изучения регулярных выражений, очень хорошо подойдет это.

https://handy-tools.io (https://handy-tools.io) - Набор полезных утилит для всех!
A
На сайте с 18.02.2009
Offline
46
#5

Всем спасибо, что откликнулись. Буду разбираться в регулярках, и с json познакомлюсь заодно)))

DavyJohnes, вот как Вы сказали сделал,

$answer = curl_exec($ch);
preg_match('#\{.*\}#is',$answer,$parse);
$new_parse = json_decode($parse);
var_dump($new_parse);

но получил в ответ

Warning: json_decode() expects parameter 1 to be string, array given in index.php on line 48
NULL

Что, где я упустил, не могу понять.

А если

var_dump($parse);

то

array(1) { [0]=> string(114520) "{ adupd: 120000, al: parseInt('2') || 4, id: 6285718, intnat: '' ? true : false, host: 'vk.com', lang: 0, rtl: parseInt('') || 0, version: 10962, stDomains: 3, zero: false, contlen: 101594, loginscheme: 'https', ip_h: '6ebbf89a816301dcc4', vc_h: 'a0a796f7397a740c701750b6bb27ab10', navPrefix: '/', dt: parseInt('') || 0, fs: parseInt('11') || 11, ts: 1351581534, pd: 0, pads: 1, time: [2012, 10, 30, 11, 18, 54] } window.locDomain = vk.host.match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0]; var _ua = navigator.userAgent.toLowerCase(); if (/opera/i.test(_ua) || !/msie 6/i.test(_ua) || document.domain != locDomain) document.domain = locDomain; var ___htest = (location.toString().match(/#(.*)/) || {})[1] || ''; if (vk.al != 1 && ___htest.length && ___htest.substr(0, 1) == vk.navPrefix) { if (vk.al != 3 || vk.navPrefix != '!') { location.replace(location.protocol + '//' + location.host + '/' + ___htest.replace(/^(\/|!)/, '')); } } var StaticFiles = { 'common.js' : {v: 960}, 'common.css': {v: 375}, 'ie6.css' : {v: 26}, 'ie7.css' : {v: 18} ,'lang0_0.js':{v:6358},'audio.css':{v:76},'audioplayer.css':{v:8},'ui_controls.css':{v:32},'notifier.css':{v:64} }

ну и ниже сама страница спарсеная отображается.

DavyJohnes
На сайте с 05.01.2011
Offline
84
#6
allmuz:
Всем спасибо, что откликнулись. Буду разбираться в регулярках, и с json познакомлюсь заодно)))

DavyJohnes, вот как Вы сказали сделал,
$answer = curl_exec($ch);

preg_match('#\{.*\}#is',$answer,$parse);
$new_parse = json_decode($parse);
var_dump($new_parse);

но получил в ответ
Warning: json_decode() expects parameter 1 to be string, array given in index.php on line 48

NULL



Что, где я упустил, не могу понять.


А если
var_dump($parse);


то
array(1) { [0]=> string(114520) "{ adupd: 120000, al: parseInt('2') || 4, id: 6285718, intnat: '' ? true : false, host: 'vk.com', lang: 0, rtl: parseInt('') || 0, version: 10962, stDomains: 3, zero: false, contlen: 101594, loginscheme: 'https', ip_h: '6ebbf89a816301dcc4', vc_h: 'a0a796f7397a740c701750b6bb27ab10', navPrefix: '/', dt: parseInt('') || 0, fs: parseInt('11') || 11, ts: 1351581534, pd: 0, pads: 1, time: [2012, 10, 30, 11, 18, 54] } window.locDomain = vk.host.match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0]; var _ua = navigator.userAgent.toLowerCase(); if (/opera/i.test(_ua) || !/msie 6/i.test(_ua) || document.domain != locDomain) document.domain = locDomain; var ___htest = (location.toString().match(/#(.*)/) || {})[1] || ''; if (vk.al != 1 && ___htest.length && ___htest.substr(0, 1) == vk.navPrefix) { if (vk.al != 3 || vk.navPrefix != '!') { location.replace(location.protocol + '//' + location.host + '/' + ___htest.replace(/^(\/|!)/, '')); } } var StaticFiles = { 'common.js' : {v: 960}, 'common.css': {v: 375}, 'ie6.css' : {v: 26}, 'ie7.css' : {v: 18} ,'lang0_0.js':{v:6358},'audio.css':{v:76},'audioplayer.css':{v:8},'ui_controls.css':{v:32},'notifier.css':{v:64} }


ну и ниже сама страница спарсеная отображается.

У Вас запрос неправильный выполняется. Нужно делать POST запрос к vk.com/audio со следующими параметрами:

act:load_audios_silent

al:1
gid:0
id:<id_страницы>

и json_decode($parse) заменить на json_decode($parse[1])

A
На сайте с 18.02.2009
Offline
46
#7

Да, спасибо...уже разобрался))))

А подскажите еще, как осуществить поиск, пробую так, нифига не получается

curl_setopt($ch, CURLOPT_URL, 'http://vk.com/audio?q='.$GET[q].'');

P.S.

А не подскажете, с какого сайта можно спарсить различных исполнителей и их дискографию))) Для локалки базу собираю, вот и делал парсер музыки VK)))

Thommy
На сайте с 06.05.2010
Offline
139
#8
allmuz:
Да, спасибо...уже разобрался))))

А не подскажете, с какого сайта можно спарсить различных исполнителей и их дискографию))) Для локалки базу собираю, вот и делал парсер музыки VK)))

http://muzebra.com попробуйте. Там не много, но есть русскоязычное описание дискографий и исполнителей.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий