Initial commit
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
<?php
|
||||
|
||||
/*****************************************************************
|
||||
Пример использования:
|
||||
|
||||
$vk_parser = new Vkontakte();
|
||||
$vk_parser->parse('Blondie - Call Me');
|
||||
$files = $weight_calc->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>(.*)<\/tr>/Usi', $this->_html, $m);
|
||||
$files = array();
|
||||
foreach ($m[0] as $res) {
|
||||
preg_match('/<input.*value=\"(.*)\,(\d{2,4})\".*<div\sclass=\"duration.*>(.*)<\/div>.*<a.*>(.*)<\/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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user