Вход на сайт
17838 просмотров
14.12.12 12:01 Вконтакте без АПИ ? Это возможно !
Для начала создаем пхп класс, вот такой :
Все создали, теперь переходим к функциям. Будем начинать с класс http.
+ Работаем с CURL
+ работаем с сессиями (там храняться куки от вконтакта)
+ Функции внутри класса
Все класс http готов, теперь идем к классу vk.
Пишем авторизацию
+ передаем логин и пароль в функцию
+ Это как вы уже поняли это для пост запроса, туда вставляем наши данные (+ логин и пароль)
+ Тут мы отправляем пост запрос (использем класс хттп)
Потом скрипт парсит код, который отвечает за успешную авторизацию и мы работаем дальше (сохраняем в сессии).
Напишем еще одну функцию, а другие сможете посмотреть в готово моем классе, который я сохраню тут.
Эта функция заливает мп3 файл,для этого мне пришлось отправлять 3 запроса.
Автор Я.
Что умеет класс ?
+ Отправить сообщение (приложить файл)
+ Залить музыку
+ Создать группу
+ Поиск музыки
+ Поиск видео
+ Сообщение на стене пользователя ( с прикрепленым файлом (видео, документ, музыка, картинка))
+ Отправить запрос на дружбу
+ получение прямых ссылок на видео файл (в разных качествах)
В ответ на:
Внимание !!!
Автор не несет отвествинность за использования этого скрипта !!
Скрипт был создан для изучения PHP и не использовался для злобных целей !!!
Внимание !!!
Автор не несет отвествинность за использования этого скрипта !!
Скрипт был создан для изучения PHP и не использовался для злобных целей !!!
Для начала создаем пхп класс, вот такой :
В ответ на:
set_time_limit(0); // Отлючаем лимит работы скрипты
session_start(); // Включаем сессии
// В этом классе будет функция, которая будет отправлять пост и гет запросы.
Class http
{
}
// В том же файле создаем 2 класс и подключаемся к первому классу.
Class vk extends http
{
}
set_time_limit(0); // Отлючаем лимит работы скрипты
session_start(); // Включаем сессии
// В этом классе будет функция, которая будет отправлять пост и гет запросы.
Class http
{
}
// В том же файле создаем 2 класс и подключаемся к первому классу.
Class vk extends http
{
}
Все создали, теперь переходим к функциям. Будем начинать с класс http.
В ответ на:
Class http
{
public function get($url, $req='', $post = false,$cookie = true, $headers = false, $timeout = '30')
{
if($curl = curl_init())
{
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_USERAGENT,$this->get_user_agent());
if($post and is_array($req))
{
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $req);
}
// Headers
if($headers) curl_setopt($curl, CURLOPT_HEADER, true);
// COOKIES
if(!empty($cookie) AND isset($_SESSION['cookie']))
curl_setopt($curl, CURLOPT_COOKIE, $_SESSION['cookie']);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
$errno = curl_errno($curl);
$result = curl_exec($curl);
curl_close($curl);
return ($errno > 0 or empty($result))? FALSE : $result;
}
}
private function get_user_agent()
{
$my_agents = Array("Opera /Linux","Internet Explorer/Windows XP","Chrome /Linux","Firefox /Linux");
$ag_rnd = rand(0, count($my_agents)-1);
if(isset($my_agents[$ag_rnd]) AND !empty($my_agents[$ag_rnd]))
return $my_agents[$ag_rnd];
}
}
Class http
{
public function get($url, $req='', $post = false,$cookie = true, $headers = false, $timeout = '30')
{
if($curl = curl_init())
{
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_USERAGENT,$this->get_user_agent());
if($post and is_array($req))
{
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $req);
}
// Headers
if($headers) curl_setopt($curl, CURLOPT_HEADER, true);
// COOKIES
if(!empty($cookie) AND isset($_SESSION['cookie']))
curl_setopt($curl, CURLOPT_COOKIE, $_SESSION['cookie']);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
$errno = curl_errno($curl);
$result = curl_exec($curl);
curl_close($curl);
return ($errno > 0 or empty($result))? FALSE : $result;
}
}
private function get_user_agent()
{
$my_agents = Array("Opera /Linux","Internet Explorer/Windows XP","Chrome /Linux","Firefox /Linux");
$ag_rnd = rand(0, count($my_agents)-1);
if(isset($my_agents[$ag_rnd]) AND !empty($my_agents[$ag_rnd]))
return $my_agents[$ag_rnd];
}
}
+ Работаем с CURL
+ работаем с сессиями (там храняться куки от вконтакта)
+ Функции внутри класса
Все класс http готов, теперь идем к классу vk.
Пишем авторизацию
В ответ на:
Class vk extends http
{
public function auth($login,$pass)
{
if(isset($_SESSION['cookie']) OR empty($_SESSION['cookie']))
{
$post = array(
'act' => 'login',
'q' => '',
'al_frame' => '1',
'expire' => '',
'captcha_sid' => '',
'captcha_key' => '',
'from_host' => 'vkontakte.ru',
'email' => $login,
'pass' => $pass
);
$result = parent::get("http://login.vk.com/?act=login", $post, true,true,true);
$sid = substr($result, strpos($result, "setCookieEx('sid', '") + 20, 60);
$cookie = 'remixsid=' . $sid;
preg_match('#remixsid=([a-z0-9]++);#Ui', $result, $out);
return (empty($out[0]))? FALSE : $_SESSION['cookie'] = trim($out[0]);
} else { return true; }
}
}
Class vk extends http
{
public function auth($login,$pass)
{
if(isset($_SESSION['cookie']) OR empty($_SESSION['cookie']))
{
$post = array(
'act' => 'login',
'q' => '',
'al_frame' => '1',
'expire' => '',
'captcha_sid' => '',
'captcha_key' => '',
'from_host' => 'vkontakte.ru',
'email' => $login,
'pass' => $pass
);
$result = parent::get("http://login.vk.com/?act=login", $post, true,true,true);
$sid = substr($result, strpos($result, "setCookieEx('sid', '") + 20, 60);
$cookie = 'remixsid=' . $sid;
preg_match('#remixsid=([a-z0-9]++);#Ui', $result, $out);
return (empty($out[0]))? FALSE : $_SESSION['cookie'] = trim($out[0]);
} else { return true; }
}
}
+ передаем логин и пароль в функцию
+ Это как вы уже поняли это для пост запроса, туда вставляем наши данные (+ логин и пароль)
+ Тут мы отправляем пост запрос (использем класс хттп)
Потом скрипт парсит код, который отвечает за успешную авторизацию и мы работаем дальше (сохраняем в сессии).
Напишем еще одну функцию, а другие сможете посмотреть в готово моем классе, который я сохраню тут.
В ответ на:
public function upload_mp3($file='')
{
if(!is_file($file)) return false;
$post = array
(
"act" => "new_audio",
"al" => 1,
"gid" => 0
);
$parser = parent::get("http://vk.com/audio",$post,true, true);
preg_match("#'audio_choose_upload', '(.*)'#Ui", $parser, $action);
preg_match('#"hash":"(.*)"#Ui', $parser, $md);
preg_match('#"mid":(.*),#Ui', $parser, $id);
preg_match('#"rhash":"(.*)"#Ui', $parser, $hash);
$url = $action[1];
$md5 = $md[1];
$mid = $id[1];
$rhash = $hash[1];
$file = Array("file" => "@".$file);
$actions = $url."?act=load_audio&aid=0&gid=0&mid=$mid&hash=$md5&rhash=$rhash&vk=1&upldr=1&ajx=1";
$result = parent::get($actions,$file,true,true);
if(substr_count($result,'audio_hash') > 0)
{
$get = json_decode($result,true);
$save = Array
(
"act" => "done_add",
"aid" => 0,
"al" => 1,
"artist" => urldecode($get['artist']),
"audio" => $get['audio'],
"audio_hash" => $get['audio_hash'],
"gid" => 0,
"hash" => $get['hash'],
"mid" => $get['mid'],
"server" => $get['server'],
"time" => $get['time'],
"title" => urldecode($get['title']),
"upldr" => 1
);
$save = parent::get("http://vk.com/audio", $save, true, true);
}
return (substr_count($result,'audio_hash') > 0 or substr_count($save, '.mp3') > 0)? TRUE:FALSE;
}
public function upload_mp3($file='')
{
if(!is_file($file)) return false;
$post = array
(
"act" => "new_audio",
"al" => 1,
"gid" => 0
);
$parser = parent::get("http://vk.com/audio",$post,true, true);
preg_match("#'audio_choose_upload', '(.*)'#Ui", $parser, $action);
preg_match('#"hash":"(.*)"#Ui', $parser, $md);
preg_match('#"mid":(.*),#Ui', $parser, $id);
preg_match('#"rhash":"(.*)"#Ui', $parser, $hash);
$url = $action[1];
$md5 = $md[1];
$mid = $id[1];
$rhash = $hash[1];
$file = Array("file" => "@".$file);
$actions = $url."?act=load_audio&aid=0&gid=0&mid=$mid&hash=$md5&rhash=$rhash&vk=1&upldr=1&ajx=1";
$result = parent::get($actions,$file,true,true);
if(substr_count($result,'audio_hash') > 0)
{
$get = json_decode($result,true);
$save = Array
(
"act" => "done_add",
"aid" => 0,
"al" => 1,
"artist" => urldecode($get['artist']),
"audio" => $get['audio'],
"audio_hash" => $get['audio_hash'],
"gid" => 0,
"hash" => $get['hash'],
"mid" => $get['mid'],
"server" => $get['server'],
"time" => $get['time'],
"title" => urldecode($get['title']),
"upldr" => 1
);
$save = parent::get("http://vk.com/audio", $save, true, true);
}
return (substr_count($result,'audio_hash') > 0 or substr_count($save, '.mp3') > 0)? TRUE:FALSE;
}
Эта функция заливает мп3 файл,для этого мне пришлось отправлять 3 запроса.
Автор Я.
Что умеет класс ?
+ Отправить сообщение (приложить файл)
+ Залить музыку
+ Создать группу
+ Поиск музыки
+ Поиск видео
+ Сообщение на стене пользователя ( с прикрепленым файлом (видео, документ, музыка, картинка))
+ Отправить запрос на дружбу
+ получение прямых ссылок на видео файл (в разных качествах)