вторник, 14 сентября 2010 г.

Контакт.ру: Массовое сохранение фото, на которых вы отмечены

Может быть кому-нибудь пригодится данный скрип.Он написан на PHP и предназначен для автоматического скачивания всех фотографий,на которых вы отмечены на Вконтакте.ру. Скрипт автоматически определяет все фотографии на которых вы присутствуете и скачивает.Для работы скрипта необходимо изменить данные в переменных $email и $password.
Так же, на примере этого скрипта можно посмотреть как реализовать авторизацию вконтакте средстами php и работу с регулярными выражениями.


// Скрипт для автоматического скачивания всех фотографий,
// на которых вы отмечены Вконтакте.ру
// Версия 2.0
// (c) МихА http://mihavxc.ru
// 06.10.2009

set_time_limit(0);
ini_set("memory_limit", "128M");

// Пользовательские данные
$email = 'mail@mail.ru';
$pass = 'password';
$user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11";

// Соединяемся с сервером ВКонтакте.ру
$f = fsockopen('vkontakte.ru', 80, $errno, $errstr, 10);
if (!$f) die("vkontakte.ru недоступен!");

// Авторизуемся
$out = "GET /login.php?email=".$email."&pass=".$pass." HTTP/1.0\r\n";
$out .= "Host: vkontakte.ru\r\n";
$out .= "User-Agent: ".$user_agent."\r\n";
$out .= "Cookie: income=1\r\n";
$out .= "Content-Type: text/xml; charset=windows-1251\r\n\r\n";

fwrite($f, $out);
$ans = '';
while(!feof($f))
{
$ans .= fgets($f, 128);
}
fclose($f);

// Вытаскиваем кукисы из ответа сервера
preg_match("/(?<=must-revalidate)(.*?)(?=Location)/is", $ans, $cookies);
$cookies = str_replace("Set-Cookie: ", "", $cookies[1]);

preg_match("/remixchk(.*?);/is", $cookies, $cook1);
preg_match("/remixmid(.*?);/is", $cookies, $cook2);
preg_match("/remixemail(.*?);/is", $cookies, $cook3);
preg_match("/remixpass(.*?);/is", $cookies, $cook4);
preg_match("/remixsid(.*?);/is", $cookies, $cook5);

$cook1 = 'remixchk' . $cook1[1] . '; ';
$cook2 = 'remixmid' . $cook2[1] . '; ';
$cook3 = 'remixemail' . $cook3[1] . '; ';
$cook4 = 'remixpass' . $cook4[1] . '; ';
$cook5 = 'remixsid' . $cook5[1];

$acook = $cook1.$cook2.$cook3.$cook4.$cook5;


// Определяем ID юзера
$user_id = str_replace(';', '', str_replace('remixmid=', '', $cook2));

// Если мы успешно авторизовались - начинаем грабить
if($user_id != '')
{
// Получаем список всех фотографий
$f = fsockopen("vkontakte.ru", 80, $errno, $errstr, 10);
$out = "GET /photos.php?act=user&id=".$user_id." HTTP/1.0\r\n";
$out .= "Host: vkontakte.ru\r\n";
$out .= "User-Agent: ".$user_agent."\r\n";
$out .= "Cookie: ".$acook."\r\n\r\n";

fwrite($f, $out);
$ans='';
while(!feof($f))
{
$ans.=fgets($f,128);
}

$data = strstr($ans, '
');
$pattern = "/href=[\"|'](p.*?)[\"|'].*?>/si";
preg_match_all($pattern, $data, $url) or die('Фотографии не найдены!');

$count = count($url[0]);

// Если кол-во фотографий меньше нуля, останавливаем выполнение!
if($count < 0) die('Фотографии не обнаружены! Задание прервано.');
else echo 'Найдено '.$count.' фотографий, начинается скачивание..';

// Создаем папку куда будут сохранятся фотки.
if (!is_dir($user_id)) {
mkdir($user_id, 0755);
}

for($i=0; $i < $count; $i++) {

$fp=fsockopen("vkontakte.ru",80,$errno,$errstr,10);
$out = "GET /".$url[1][$i]." HTTP/1.0\r\n";
$out .= "Host: vkontakte.ru\r\n";
$out .= "User-Agent: ".$user_agent."\r\n";
$out .= "Cookie: ".$acook."\r\n\r\n";
fwrite($fp, $out);
$ans='';

while(!feof($fp))
{
$ans.=fgets($fp,128);
}

$link_data = strstr($ans, 'id="myphotolink">');
$pattern = "/src=[\"|'](.*?)[\"|'].*?>/si";
preg_match($pattern, $link_data, $link[$i]);
$file_new="".$user_id."/".$i.".jpg";
$dataa = implode("", file($link[$i][1]));
$fp = fopen($file_new, "w");
fputs($fp, $dataa);
fclose($fp);
}

echo "Работа завершена. Сохранено $i фотографий";
}

// Если авторизоваться не удалось - выводим сообщение.
else echo "Неправильные логин/пароль";

// Скрипт для автоматического скачивания всех фотографий,
// на которых вы отмечены Вконтакте.ру
// Версия 2.0
// (c) МихА http://mihavxc.ru
// 06.10.2009
?>

 

Оригинал: http://mihavxc.ru/text/6_Vkontakte_ru_Massovoe_sohranenie_foto_na_kotoryh_vy_otmecheny/