parse('Blondie - Call Me'); $files = $vk_parser->getFiles(); *****************************************************************/ /** * Класс парсинга вконтактика * * @package classes * @author chez **/ class Vkontakte { private $_cookies; // Куки, ассоциативный массив private $_query; // Запрос, plain text private $_html; // HTML, полученый от вконтактика private $_files; // Распарсеные массивы с информацией о файле /** * Оболочка парсера * * @param string $q Запрос * @return array Массив с файлами * @author chez **/ public function parse($q) { $this->_query = $q; $this->auth(); $cookie = array(); foreach ($this->_cookies as $key => $val) { $cookie[] = $key .'='. $val; } RemoteFile::setHeaders(array( 'Cookie: '. implode('; ', $cookie), 'Referer: http://vkontakte.ru/audio?album_id=0', 'X-Requested-With: XMLHttpRequest', 'Origin: http://vkontakte.ru', 'Content-Type: application/x-www-form-urlencoded', 'User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16', 'Connection: close' )); $this->setHtml(RemoteFile::getData('http://vkontakte.ru/audio', array( 'act' =>'search', 'al' =>'1', 'gid' =>'0', 'id' =>'5728795', 'offset' =>'0', 'q' => urlencode($this->_query), 'sort' =>'2' ))); $this->parseHtml(); return $this->_files; } /** * Пишет полученый html в член объекта * * @param string $html HTML * @return void * @author chez **/ public function setHtml($html) { $this->_html = $html; } /** * Возвращает хранимый html * * @return string HTML * @author chez **/ public function getHtml() { return $this->_html; } /** * Возвращает хранимый массив файлов * * @return array Список файлов * @author chez **/ public function getFiles() { return $this->_files; } /** * Проводит авторизацию на вконтактике и получает куки * Пока костыль, потом нужно будет переписать * * @return array Ассоциативный массив с куками * @author chez **/ private function auth() { $this->_cookies = array( 'remixchk' => 5, 'remixsid' => 'c68c4362f62f218a25802bae87201d1bc46fadd0b5c64f71678430c9b63b' ); } /** * Разбирает HTML, полученый от вконтактика * * @return array Список файлов * @author chez **/ public function parseHtml() { preg_match_all('/(.*)<\/tr>/Usi', $this->_html, $m); $files = array(); foreach ($m[0] as $res) { preg_match('/(.*)<\/div>.*(.*)<\/a>.*\s-\s(.*)<\/div>/Usi', $res, $m1); $duration = explode(':', $m1[3]); $files[] = array( 'url' => $m1[1], 'duration' => $duration[0] * 60 + $duration[1], 'artist' => strip_tags($m1[4]), 'track' => strip_tags($m1[5]) ); } $this->_files = $files; } }