m0Hze
25.12.2009, 22:37
И так, решил я все же отдать вам на растерзание этот не домученный класс VKCS - Vkontakte Content Searcher.Я сам удивляюсь как он может работать,но все же это так.
Представляю вашему вниманию,класс для поиска музыки и видео по вконтакте.Это аналог Vpleer.ru, давно работал над этой идеей,и даже запускал свой проэкт,но нехватило сил его поддерживать.Так что ловите.
(Сразу предупрежу,когда я писал этот класс,мои познания в ООП были настолько скудны,что мне даже стыдно.Когда я его на харде открыл,переписал некоторые методы,для работы с актуальной авторизацией вк.Поэтому основная часть класса - это сплошь и рядом говнокод.)
Не большое описание,что умеет.
1) Работает как с базой MySQL так и с файлами.Все это указываеться при инициализации класса.
2) Можно искать как музыку,так и видео(функция не совсем доделана,ибо забросил).
3) Есть минималистичный дебаг,который тоже можно отключить.Также настраиваться вид вывода ошибок,цвет и размер шрифта.Но это я делал просто от нечего делать похоже :)
4) Фильтрация результатов.Актуально только для поиска музыки, и используеться фильтрация только по названию.Можно добавить и по времени,но как-то лень.
Базовая инициализация:
include ('./vkcs.class.php');
$vk = new VKCS('file','accounts.txt',false);
$vk->SetQueryPage('System of a Down');
$music = $vk->GetMusic();
$video = $vk->Getvideo();
print_r($music);
Описание методов которые могу пригодиться:
VKCS($type, $nameb, $debug) - конструктор.принимает значения: Тип БД(file of sql),Имя базы\файла,дебаг - on\off.
setColorError($type, $color) - установка цвета ошибок.
setSizeError($type, $size) - установка размера ошибок.
SetQueryPage($query, $page = 1) - установка запроса, то что мы будем искать.Принимает значения: Название, Страница на которой искать.
GetError() - мини дебагер,отвечает за вывод ошибки на экран, если это было включено при инициализации конструктора.
GetMusic() - собственно,основной метод..Осуществляет поиск музыки и ее фильтрацию(если захотите,вынесите в отдельный метод).
GetVideo() - аналог пред идущего метода,только для видео и нет фильтрации.
GetCookie() - авторизация,получение куков и запись их в нужную переменную.
Класс можно взять здесь: Вот он (http://m0hze.ru/files/vkcs.class.php)
Тут:
<?php
/**
* @author m0hze
* @copyright 2009
* @site http://m0hze.ru
* @hello : https://forum.antichat.ru
*/
error_reporting(0);
class VKCS
{
var $_COOKIE, $_PASSWORD, $_USER, $_SEARCH, $_TABLE, $_FILE, $_ERROR, $_QUERY, $_DEBUG,
$_TYPE, $_NAMEB;
var $color_head = 'red', $color_text = 'black', $size_head = 3, $size_text = 3;
public function VKCS($type, $nameb, $debug)
{
$this->SelectBase($type,$nameb);
$this->setVar('_DEBUG',$debug);
}
public function setColorError($type, $color)
{
if (strtolower($type) == 'head') {
$this->color_head = $color;
} elseif (strtolower($type) == 'text') {
$this->color_text = $color;
} else {
$this->setVar('_ERROR',
"Options not correctly in <i>method</i> <b>setColorError()</b>! Please, change options and restart programm!");
return ($this->GetError());
break;
}
}
public function setSizeError($type, $size)
{
if (strtolower($type) == 'head') {
$this->size_head = $size;
return (true);
} elseif (strtolower($type) == 'text') {
$this->size_text = $size;
return (true);
}
$this->setVar('_ERROR',
"Options not correctly in <i>method</i> <b>setSizeError()</b> ! Please, change options and restart programm!");
return ($this->GetError());
}
private function setVar($var, $set)
{
if (isset($var)) {
$this->$var .= $set;
} else {
$this->$var = $set;
}
return ($this->$var == $set ? true : false);
}
private function SelectBase($type, $file = 'accounts.txt')
{
$this->setVar('_TYPE', $type);
if (strtolower($this->_TYPE) == 'file') {
$this->setVar('_FILE', $file);
} elseif (strtolower($this->_TYPE) == 'sql') {
$this->setVar('_TABLE', $file);
}
}
public function SetQueryPage($query, $page = 1)
{
if (strlen($query) < 4) {
$this->setVar('_ERROR',
"<b>QUERY</b> > <b>4</b> byte! Please, send me true <b>QUERY</b>\r\n");
return ($this->GetError());
break;
} elseif ($page < 0) {
$this->setVar('_ERROR',
"<b>PAGE</b> > <b>0</b> byte! Please, send me true <b>PAGE</b>\r\n");
return ($this->GetError());
break;
}
$this->setVar('_QUERY', urlencode(str_replace(' ', '_', trim($query))));
$this->setVar('_PAGE', $page);
return (true);
}
private function GetError()
{
if ($this->_DEBUG) {
return (die('<b><font size="' . $this->size_head . '" color="' . $this->
color_head . '">ERROR!</b></font><br><font size="' . $this->size_text .
'" color="' . $this->color_text . '">' . nl2br($this->_ERROR) . '</font>'));
} else {
return;
}
}
private function GetUser_Base()
{
$query = mysql_query("SELECT * FROM " . $this->_TABLE .
" ORDER BY rand() LIMIT 1");
if (!$query) {
$this->setVar('_ERROR', mysql_error() . "\r\n");
return ($this->GetError());
break;
}
$array = mysql_fetch_assoc($query);
$this->setVar('_USER', $array['user']);
$this->setVar('_PASSWORD', $array['password']);
return (true);
}
private function GetUser_File()
{
$open = file($this->_FILE);
if ($open) {
$count = count($open);
$data = explode(':', $open[rand(0, $count - 1)]);
$this->setVar('_USER', trim($data[0]));
$this->setVar('_PASSWORD', trim($data[1]));
return (true);
break;
} else {
$this->setVar('_ERROR', "Can'not open <b>'" . $this->_FILE .
"'</b> base, or <b>FILE</b> size = <b>0</b> byte ! Please create <b>FILE</b> in directory!\r\n");
}
return ($this->GetError());
break;
}
public function GetMusic()
{
if (!isset($this->_QUERY)) {
$this->setVar('_ERROR',
"<b>QUERY</b> size = <b>0</b>, or > <b>3</b> byte! Please, send me true <b>QUERY</b>\r\n");
return ($this->GetError());
break;
}
$this->GetCookie();
$exec = curl_init('http://vkontakte.ru/gsearch.php?section=audio&q=' . $this->
_QUERY . '&offset=' . $this->_PAGE . '00');
if (!$exec) {
$this->setVar('_ERROR', "Library <b>cURL</b> not work!\r\n Please, change options <b>ERROR</b> on you <b>php.ini</b>! \r\n");
return ($this->GetError());
break;
}
curl_setopt($exec, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($exec, CURLOPT_REFERER, 'http://vkontakte.ru/index.php');
curl_setopt($exec, CURLOPT_HEADER, 1);
curl_setopt($exec, CURLOPT_COOKIE, $this->_COOKIE);
$page = curl_exec($exec);
preg_match('#Найдено (.*) аудиозап#isU', $page, $coll_page);
if (!$coll_page) {
$this->setVar('_ERROR', "For you <b>QUERY</b> music not found!\r\n");
return ($this->GetError());
break;
}
$coll = str_replace(' ', '', trim($coll_page[1]));
$total = $coll / 1;
if ($total > 11) {
$total = 11;
} elseif ($total < 0) {
$total = 1;
}
preg_match_all('#<b id=\"performer.*\">(.*)<\/b> - <span id=\"title.*\">(.*)<\/span>#isU',
$page, $name);
preg_match_all('#return operate(.*,(.*),(.*),\'(.*)\',.*)#isU', $page, $url);
preg_match_all('#<div class=\"duration\">(.*)<\/div>#isU', $page, $time);
$nouniqname = array_map("strtolower", array_map("trim", $name[2]));
$uniquename = array_unique($nouniqname);
$count = count($url[2]);
for ($i = 0; $i < count($url[2]); $i++) {
if ($uniquename[$i] == $nouniqname[$i] or $uniquetime[$i] == $nouniqtime[$i]) {
$data['group'][$i] = substr(strip_tags($name[1][$i]), 0, 15);
$data['name'][$i] = substr(strip_tags($name[2][$i]), 0, 25);
$data['server'][$i] = $url[2][$i];
$data['id'][$i] = $url[3][$i];
$data['hash'][$i] = $url[4][$i];
}
}
$data['page'] = $total;
return ($data);
}
public function GetVideo()
{
if (!isset($this->_QUERY)) {
$this->setVar('_ERROR',
"<b>QUERY</b> size = <b>0</b>, or > <b>3</b> byte! Please, send me true <b>QUERY</b>\r\n");
return ($this->GetError());
break;
}
$this->GetCookie();
$exec = curl_init('http://vkontakte.ru/gsearch.php?section=video&q=' . $this->
_QUERY . '&offset=' . $this->_PAGE . '00');
if (!$exec) {
$this->setVar('_ERROR', "Library <b>cURL</b> not work!\r\n Please, change options <b>ERROR</b> on you <b>php.ini</b>! \r\n");
return ($this->GetError());
break;
}
curl_setopt($exec, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($exec, CURLOPT_REFERER, 'http://vkontakte.ru/index.php');
curl_setopt($exec, CURLOPT_HEADER, 1);
curl_setopt($exec, CURLOPT_COOKIE, $this->_COOKIE);
$page = curl_exec($exec);
preg_match('#Найдено (.*) видео#isU', $page, $coll_page);
if (!$coll_page) {
$this->setVar('_ERROR', "For you <b>QUERY : \"" . $this->_QUERY . "\"</b> video not found!\r\n");
return ($this->GetError());
break;
}
preg_match_all('#<img src=\'http://(.*).vk.jpg\'#isU', $page, $image);
preg_match_all('#<a href=\"video.*\">(.*)</a>#isU', $page, $name);
$image = $image[1];
print_r($name);
}
private function GetCookie()
{
if (!isset($this->_TYPE)) {
$this->setVar('_ERROR',
"Base TYPE not selecte! Please select: <b>SQL</b> or <b>FILE</b>!\r\n Code include: \$this->setVar('_TYPE','SQL');\r\n");
return ($this->GetError());
break;
}
if (strtolower($this->_TYPE) == 'sql') {
$this->GetUser_Base();
} elseif (strtolower($this->_TYPE) == 'file') {
$this->GetUser_File($_FILE);
} else {
$this->setVar('_ERROR',
"Don't know selected BASE! Please, change: <b>SQL</b> or <b>FILE</b>\r\n");
return ($this->GetError());
break;
}
$exec = curl_init('http://vkontakte.ru/login.php');
if (!$exec) {
$this->setVar('_ERROR', " Library <b>cURL</b> not work!\r\n Please, change options <b>ERROR</b> on you <b>php.ini</b>! \r\n");
return ($this->GetError());
break;
}
$post = 'email=' . $this->_USER . '&pass=' . $this->_PASSWORD;
curl_setopt($exec, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($exec, CURLOPT_POSTFIELDS, $post);
curl_setopt($exec, CURLOPT_REFERER, 'http://vkontakte.ru/index.php');
curl_setopt($exec, CURLOPT_HEADER, 1);
curl_setopt($exec, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($exec, CURLOPT_COOKIEFILE, 'cookie.txt');
$page = curl_exec($exec);
preg_match('#remixsid=(.*)\;#isU', $page, $match);
if ($match) {
$cookie = 'remixsid=' . $match[1];
$this->setVar('_COOKIE', $cookie);
return (true);
} else {
$this->setVar('_ERROR', "<b>USER</b> or <b>PASSWORD</b> not true!\r\n Please, change this <b>ERROR</b> on you <b>BASE</b>! \r\n");
return ($this->GetError());
break;
}
}
}
?>
Я не нуждаюсь в критике,ибо не думаю что когда нибудь возьмусь его доводить до ума.Выкладываю только по тому,что может кому-то пригодиться,и он решит составить конкуренцию vpleer.ru, у меня на это сил и денег не хватило.
Я вспомнил! Я на нем учился как раз основам ООП :D точно
Представляю вашему вниманию,класс для поиска музыки и видео по вконтакте.Это аналог Vpleer.ru, давно работал над этой идеей,и даже запускал свой проэкт,но нехватило сил его поддерживать.Так что ловите.
(Сразу предупрежу,когда я писал этот класс,мои познания в ООП были настолько скудны,что мне даже стыдно.Когда я его на харде открыл,переписал некоторые методы,для работы с актуальной авторизацией вк.Поэтому основная часть класса - это сплошь и рядом говнокод.)
Не большое описание,что умеет.
1) Работает как с базой MySQL так и с файлами.Все это указываеться при инициализации класса.
2) Можно искать как музыку,так и видео(функция не совсем доделана,ибо забросил).
3) Есть минималистичный дебаг,который тоже можно отключить.Также настраиваться вид вывода ошибок,цвет и размер шрифта.Но это я делал просто от нечего делать похоже :)
4) Фильтрация результатов.Актуально только для поиска музыки, и используеться фильтрация только по названию.Можно добавить и по времени,но как-то лень.
Базовая инициализация:
include ('./vkcs.class.php');
$vk = new VKCS('file','accounts.txt',false);
$vk->SetQueryPage('System of a Down');
$music = $vk->GetMusic();
$video = $vk->Getvideo();
print_r($music);
Описание методов которые могу пригодиться:
VKCS($type, $nameb, $debug) - конструктор.принимает значения: Тип БД(file of sql),Имя базы\файла,дебаг - on\off.
setColorError($type, $color) - установка цвета ошибок.
setSizeError($type, $size) - установка размера ошибок.
SetQueryPage($query, $page = 1) - установка запроса, то что мы будем искать.Принимает значения: Название, Страница на которой искать.
GetError() - мини дебагер,отвечает за вывод ошибки на экран, если это было включено при инициализации конструктора.
GetMusic() - собственно,основной метод..Осуществляет поиск музыки и ее фильтрацию(если захотите,вынесите в отдельный метод).
GetVideo() - аналог пред идущего метода,только для видео и нет фильтрации.
GetCookie() - авторизация,получение куков и запись их в нужную переменную.
Класс можно взять здесь: Вот он (http://m0hze.ru/files/vkcs.class.php)
Тут:
<?php
/**
* @author m0hze
* @copyright 2009
* @site http://m0hze.ru
* @hello : https://forum.antichat.ru
*/
error_reporting(0);
class VKCS
{
var $_COOKIE, $_PASSWORD, $_USER, $_SEARCH, $_TABLE, $_FILE, $_ERROR, $_QUERY, $_DEBUG,
$_TYPE, $_NAMEB;
var $color_head = 'red', $color_text = 'black', $size_head = 3, $size_text = 3;
public function VKCS($type, $nameb, $debug)
{
$this->SelectBase($type,$nameb);
$this->setVar('_DEBUG',$debug);
}
public function setColorError($type, $color)
{
if (strtolower($type) == 'head') {
$this->color_head = $color;
} elseif (strtolower($type) == 'text') {
$this->color_text = $color;
} else {
$this->setVar('_ERROR',
"Options not correctly in <i>method</i> <b>setColorError()</b>! Please, change options and restart programm!");
return ($this->GetError());
break;
}
}
public function setSizeError($type, $size)
{
if (strtolower($type) == 'head') {
$this->size_head = $size;
return (true);
} elseif (strtolower($type) == 'text') {
$this->size_text = $size;
return (true);
}
$this->setVar('_ERROR',
"Options not correctly in <i>method</i> <b>setSizeError()</b> ! Please, change options and restart programm!");
return ($this->GetError());
}
private function setVar($var, $set)
{
if (isset($var)) {
$this->$var .= $set;
} else {
$this->$var = $set;
}
return ($this->$var == $set ? true : false);
}
private function SelectBase($type, $file = 'accounts.txt')
{
$this->setVar('_TYPE', $type);
if (strtolower($this->_TYPE) == 'file') {
$this->setVar('_FILE', $file);
} elseif (strtolower($this->_TYPE) == 'sql') {
$this->setVar('_TABLE', $file);
}
}
public function SetQueryPage($query, $page = 1)
{
if (strlen($query) < 4) {
$this->setVar('_ERROR',
"<b>QUERY</b> > <b>4</b> byte! Please, send me true <b>QUERY</b>\r\n");
return ($this->GetError());
break;
} elseif ($page < 0) {
$this->setVar('_ERROR',
"<b>PAGE</b> > <b>0</b> byte! Please, send me true <b>PAGE</b>\r\n");
return ($this->GetError());
break;
}
$this->setVar('_QUERY', urlencode(str_replace(' ', '_', trim($query))));
$this->setVar('_PAGE', $page);
return (true);
}
private function GetError()
{
if ($this->_DEBUG) {
return (die('<b><font size="' . $this->size_head . '" color="' . $this->
color_head . '">ERROR!</b></font><br><font size="' . $this->size_text .
'" color="' . $this->color_text . '">' . nl2br($this->_ERROR) . '</font>'));
} else {
return;
}
}
private function GetUser_Base()
{
$query = mysql_query("SELECT * FROM " . $this->_TABLE .
" ORDER BY rand() LIMIT 1");
if (!$query) {
$this->setVar('_ERROR', mysql_error() . "\r\n");
return ($this->GetError());
break;
}
$array = mysql_fetch_assoc($query);
$this->setVar('_USER', $array['user']);
$this->setVar('_PASSWORD', $array['password']);
return (true);
}
private function GetUser_File()
{
$open = file($this->_FILE);
if ($open) {
$count = count($open);
$data = explode(':', $open[rand(0, $count - 1)]);
$this->setVar('_USER', trim($data[0]));
$this->setVar('_PASSWORD', trim($data[1]));
return (true);
break;
} else {
$this->setVar('_ERROR', "Can'not open <b>'" . $this->_FILE .
"'</b> base, or <b>FILE</b> size = <b>0</b> byte ! Please create <b>FILE</b> in directory!\r\n");
}
return ($this->GetError());
break;
}
public function GetMusic()
{
if (!isset($this->_QUERY)) {
$this->setVar('_ERROR',
"<b>QUERY</b> size = <b>0</b>, or > <b>3</b> byte! Please, send me true <b>QUERY</b>\r\n");
return ($this->GetError());
break;
}
$this->GetCookie();
$exec = curl_init('http://vkontakte.ru/gsearch.php?section=audio&q=' . $this->
_QUERY . '&offset=' . $this->_PAGE . '00');
if (!$exec) {
$this->setVar('_ERROR', "Library <b>cURL</b> not work!\r\n Please, change options <b>ERROR</b> on you <b>php.ini</b>! \r\n");
return ($this->GetError());
break;
}
curl_setopt($exec, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($exec, CURLOPT_REFERER, 'http://vkontakte.ru/index.php');
curl_setopt($exec, CURLOPT_HEADER, 1);
curl_setopt($exec, CURLOPT_COOKIE, $this->_COOKIE);
$page = curl_exec($exec);
preg_match('#Найдено (.*) аудиозап#isU', $page, $coll_page);
if (!$coll_page) {
$this->setVar('_ERROR', "For you <b>QUERY</b> music not found!\r\n");
return ($this->GetError());
break;
}
$coll = str_replace(' ', '', trim($coll_page[1]));
$total = $coll / 1;
if ($total > 11) {
$total = 11;
} elseif ($total < 0) {
$total = 1;
}
preg_match_all('#<b id=\"performer.*\">(.*)<\/b> - <span id=\"title.*\">(.*)<\/span>#isU',
$page, $name);
preg_match_all('#return operate(.*,(.*),(.*),\'(.*)\',.*)#isU', $page, $url);
preg_match_all('#<div class=\"duration\">(.*)<\/div>#isU', $page, $time);
$nouniqname = array_map("strtolower", array_map("trim", $name[2]));
$uniquename = array_unique($nouniqname);
$count = count($url[2]);
for ($i = 0; $i < count($url[2]); $i++) {
if ($uniquename[$i] == $nouniqname[$i] or $uniquetime[$i] == $nouniqtime[$i]) {
$data['group'][$i] = substr(strip_tags($name[1][$i]), 0, 15);
$data['name'][$i] = substr(strip_tags($name[2][$i]), 0, 25);
$data['server'][$i] = $url[2][$i];
$data['id'][$i] = $url[3][$i];
$data['hash'][$i] = $url[4][$i];
}
}
$data['page'] = $total;
return ($data);
}
public function GetVideo()
{
if (!isset($this->_QUERY)) {
$this->setVar('_ERROR',
"<b>QUERY</b> size = <b>0</b>, or > <b>3</b> byte! Please, send me true <b>QUERY</b>\r\n");
return ($this->GetError());
break;
}
$this->GetCookie();
$exec = curl_init('http://vkontakte.ru/gsearch.php?section=video&q=' . $this->
_QUERY . '&offset=' . $this->_PAGE . '00');
if (!$exec) {
$this->setVar('_ERROR', "Library <b>cURL</b> not work!\r\n Please, change options <b>ERROR</b> on you <b>php.ini</b>! \r\n");
return ($this->GetError());
break;
}
curl_setopt($exec, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($exec, CURLOPT_REFERER, 'http://vkontakte.ru/index.php');
curl_setopt($exec, CURLOPT_HEADER, 1);
curl_setopt($exec, CURLOPT_COOKIE, $this->_COOKIE);
$page = curl_exec($exec);
preg_match('#Найдено (.*) видео#isU', $page, $coll_page);
if (!$coll_page) {
$this->setVar('_ERROR', "For you <b>QUERY : \"" . $this->_QUERY . "\"</b> video not found!\r\n");
return ($this->GetError());
break;
}
preg_match_all('#<img src=\'http://(.*).vk.jpg\'#isU', $page, $image);
preg_match_all('#<a href=\"video.*\">(.*)</a>#isU', $page, $name);
$image = $image[1];
print_r($name);
}
private function GetCookie()
{
if (!isset($this->_TYPE)) {
$this->setVar('_ERROR',
"Base TYPE not selecte! Please select: <b>SQL</b> or <b>FILE</b>!\r\n Code include: \$this->setVar('_TYPE','SQL');\r\n");
return ($this->GetError());
break;
}
if (strtolower($this->_TYPE) == 'sql') {
$this->GetUser_Base();
} elseif (strtolower($this->_TYPE) == 'file') {
$this->GetUser_File($_FILE);
} else {
$this->setVar('_ERROR',
"Don't know selected BASE! Please, change: <b>SQL</b> or <b>FILE</b>\r\n");
return ($this->GetError());
break;
}
$exec = curl_init('http://vkontakte.ru/login.php');
if (!$exec) {
$this->setVar('_ERROR', " Library <b>cURL</b> not work!\r\n Please, change options <b>ERROR</b> on you <b>php.ini</b>! \r\n");
return ($this->GetError());
break;
}
$post = 'email=' . $this->_USER . '&pass=' . $this->_PASSWORD;
curl_setopt($exec, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($exec, CURLOPT_POSTFIELDS, $post);
curl_setopt($exec, CURLOPT_REFERER, 'http://vkontakte.ru/index.php');
curl_setopt($exec, CURLOPT_HEADER, 1);
curl_setopt($exec, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($exec, CURLOPT_COOKIEFILE, 'cookie.txt');
$page = curl_exec($exec);
preg_match('#remixsid=(.*)\;#isU', $page, $match);
if ($match) {
$cookie = 'remixsid=' . $match[1];
$this->setVar('_COOKIE', $cookie);
return (true);
} else {
$this->setVar('_ERROR', "<b>USER</b> or <b>PASSWORD</b> not true!\r\n Please, change this <b>ERROR</b> on you <b>BASE</b>! \r\n");
return ($this->GetError());
break;
}
}
}
?>
Я не нуждаюсь в критике,ибо не думаю что когда нибудь возьмусь его доводить до ума.Выкладываю только по тому,что может кому-то пригодиться,и он решит составить конкуренцию vpleer.ru, у меня на это сил и денег не хватило.
Я вспомнил! Я на нем учился как раз основам ООП :D точно