Deutsch
17838 просмотров
Программист
web-programmist
14.12.12 12:01  Вконтакте без АПИ ? Это возможно !
В ответ на:
Внимание !!!

Автор не несет отвествинность за использования этого скрипта !!

Скрипт был создан для изучения PHP и не использовался для злобных целей !!!

Для начала создаем пхп класс, вот такой :
В ответ на:

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];


}
}

+ Работаем с 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; }
}
}

+ передаем логин и пароль в функцию
+ Это как вы уже поняли это для пост запроса, туда вставляем наши данные (+ логин и пароль)
+ Тут мы отправляем пост запрос (использем класс хттп)
Потом скрипт парсит код, который отвечает за успешную авторизацию и мы работаем дальше (сохраняем в сессии).
Напишем еще одну функцию, а другие сможете посмотреть в готово моем классе, который я сохраню тут.
В ответ на:

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 запроса.
Автор Я.
Что умеет класс ?
+ Отправить сообщение (приложить файл)
+ Залить музыку
+ Создать группу
+ Поиск музыки
+ Поиск видео
+ Сообщение на стене пользователя ( с прикрепленым файлом (видео, документ, музыка, картинка))
+ Отправить запрос на дружбу
+ получение прямых ссылок на видео файл (в разных качествах)
#1