VK photos dumper

Сегодня мне понадобилось сохранить все фотографии из одного альбома ВКонтакте.

Кратко опишу:
Указываете ссылку на одну из фотографий в альбоме (пример vk.com/photo112028_151118304),
и скрипт парсит javascript массив с url'ами изображений.
Для этого необходимо включить "Ускоренный режим просмотра фотографий",
что мы и делаем устаналивая в куках значение remixnotajaxphotos равное нулю. В итоге полученный массив с url'ами картинок качаем в указанную директорию.

<?php
set_time_limit(0);

$email='my_mail@gmail.com'; //ваш логин
$pass='my_password'; //ваш пароль
$albumurl='http://vk.com/photo111111_111111'; //ссылка на одну фотогарфию из альбома
$wdir=$_SERVER['DOCUMENT_ROOT'].'/vk'; // get full path. дописываем структуру папок от корня(/vk)
function post($url,$post=false,$refer=false){ //сопсно функция ;)
$ch=curl_init($url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0(Windows;U;WindowsNT5.1;ru;rv:1.9.0.4)Gecko/2008102920AdCentriaIM/1.7Firefox/3.0.4");
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_HEADER,1);//заголовки
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
curl_setopt($ch,CURLOPT_REFERER,$refer);
curl_setopt($ch,CURLOPT_COOKIE,'remixnotajaxphotos=0;'); //(Включаем ускоренный режим просмотра фотографий)ОБЯЗАТЕЛЬНО!
curl_setopt($ch,CURLOPT_COOKIEJAR,'cookies.txt');//пишем печеньки
curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt'); //читаем печеньки
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result=curl_exec($ch);
return$result;
}
if(!file_exists($wdir)) //существует ли директория?
{if(!mkdir($wdir,0777,TRUE)) //НЕТ. пытаемся создать
{die('Cannot create folder <b><fontcolor="red">'.$wdir.'</font></b>.
Please change permissions on<b>777</b>.');}}// не получилось =( die
$result=post('http://vk.com/login.php',
'act=login&success_url=&fail_url=&try_to_login=1&to=&vk=&email='.$email.'&pass='.$pass,
'http://vk.com/');//auth
$result1=post($albumurl,false,'http://vk.com/profile.php');//go to album url
preg_match_all('#\\["(.*?)",[\\s]?"(.*?)",[\\s]?"(.*?)"\\]#i',$result1,$urls);//парсим фотки
foreach($urls[3] as $val){
$val=str_replace("\\","",$val);//удаляем экранирование символа "/"
preg_match('#([x|m]_.*?)[.]([jpg|gif|png$]{3})#i',$val,$names); //парсии имя файла и расширение
file_put_contents($wdir.'/'.$names[1].'.'.$names[2],file_get_contents($val));//качаем картинку и записываем в папку
}
?>
    • Илья
    • Декабрь 17th, 2011 10:02

    К сожалению, скрипт не работает.
    Варнинги начинаются с попыток распарсить result1.
    Я для проверки изменил маску на '{http:\\\\/\\\\/\w+\.vk\.com(\\\\/\w+)+\.[[:alpha:]]+}i', теперь парсинг ссылок работает. Но в результате получается больших фоток только 10.
    Такое ощущение, что "ускоренный режим" подгружает информацию только о 10 фотографиях. Как это обойти, пока не понял, в js я плохо ориентируюсь.

*

 
http://wolf-et.ru/wp-admin/page/library/