Парсер Vkontakte.ru

Написано 12:41, ярлыки:

$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) ' . 
             'Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)';

$cookie = '';

$login = 'qazqaz';
$password = 'qazqaz';

$ch = curl_init();

// true т.к. мы будем отправлять post запрос:
curl_setopt($ch, CURLOPT_POST, true);  

// чтобы сайт думал, что мы - браузер:
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 

// ответ сервера будем записывать в переменную
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($ch, CURLOPT_TIMEOUT, 10);

// по редиректам будем переходить автоматически.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($ch, CURLOPT_URL, 'http://login.vk.com/?act=login');

//Формирование запроса таким образом, я счел более наглядным
$post = array( 
             'act' => 'login',
             'q' => '',
             'al_frame' => '1',
             'expire' => '',
             'captcha_sid' => '',
             'captcha_key' => '',
             'from_host' => 'vkontakte.ru',
             'email' => $login,
             'pass' => $password
         );

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));

$answer = curl_exec($ch);

/* В $answer нам приходит javascript, который и устанавливает куки 
     с названием: remixsid Нам нужно cпарсить эти 60 символов, 
     идентификатора сессии. с помощью них vkontakte поймет,
     что мы авторизировались.*/

$sid = substr($answer, strpos($answer, "setCookieEx('sid', '") + 20, 60);
$cookie = 'remixsid=' . $sid;

curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_COOKIE, $cookie); 

// укажем страницу, с которой мы получим данные для проверки
curl_setopt($ch, CURLOPT_URL, 'http://vkontakte.ru/id107073034'); 

$answer = curl_exec($ch);

preg_match('!id="profile_current_info">((.*?))</div>!si',$answer,$data);
//print_r($data);

$pars=iconv('cp1251','utf-8',$data[1]);
//echo $pars;

$p = file_get_contents('/home/megido/l.dat');
if($p != $pars)

$f = @fopen('/home/qazqaz/l.dat','w+');
fwrite($f,$pars);
fclose($f);





//echo $answer; 

curl_close($ch);





edit post
$cnt=100; // общее количество записей во всём выводе
$rpp=10; // кол-во записей на страницу
$rad=1; // сколько ссылок показывать рядом с номером текущей страницы (2 слева + 2 справа + активная страница = всего 5)
$link_sc='page_navigation.php'; // путь
if (isset($_GET['page']))
{
  $page=$_GET['page']-1; // текущая страница
}
else
{
  $page=0;
}
 
$links=$rad*2+1;
$pages=ceil($cnt/$rpp);
if ($page>0) { echo "First | Previous |"; }
$start=$page-$rad;
if ($start>$pages-$links) { $start=$pages-$links; }
if ($start<0) { $start=0; }
$end=$start+$links;
if ($end>$pages) { $end=$pages; }
for ($i=$start; $i<$end; $i++) {
 echo " ";
 
 if ($i==$page) {
  echo "";
 } else {
  echo "";
 }
// echo ($i*$rpp+1)."-";
// if ($i!=($pages-1)) { echo $i*$rpp+$rpp; } else { echo $cnt; }
 echo ($i+1);
 if ($i==$page) {
  echo "";
 } else {
  echo "";
 }
 if ($i!=($end-1)) { echo " |"; }
}
if ($pages>$links&&$page<($pages-$rad-1)) { echo " ... ".($pages).""; }
if ($page<$pages-1) { echo " Next | Last"; }

edit post