Загрузка фото и публикация на стену вконтакте через CURL

ZiX

Коддинг, Парсинг
Регистрация
9 Июл 2011
Сообщения
1.378
Реакции
707
Нашел такой вот код, для загрузки фото вконтакт. Других скриптом не нашел, остальные что в паблике работают через апи. Хотелось бы как нибудь без апи обойтись. Загружать не хочет, хотя на первый взгляд все нормально. Может у контакта поменялся алгоритм загрузки фото?
PHP:
<?php
//[#]====[Настройки]====[#]\\
$email = 'xx@xxx.ru'; //Емейл или логин
$pass  = 'qwerty'; //Пароль
$id    = 'id0000000'; //id получателя
$pic  = 'wallimage.jpg'; //Путь к картинке
$text  = 'test'; //Подпись
 
$cookie = authorization($email, $pass);
$photo = photo_load($id, $pic, $cookie);
wall_post($id, $photo, $text, $cookie);
 
function photo_load($id, $pic, $cookie){
$photo_box = curl("http://vkontakte.ru/photos.php?act=a_choose_photo_box&al=1&mail_add=&scrollbar_width=14&to_id=$id", $cookie);
 
preg_match('/photo_upload\', \'(.*?)\', {"act":"do_add","aid":-14,"gid":0,"mid":(.*?),"hash":"(.*?)","rhash":"(.*?)"/', $photo_box, $parametrs);
 
$check = curl("$parametrs[1]?mid=$parametrs[2]&aid=-14&gid=0&hash=$parametrs[3]&rhash=$parametrs[4]&al=1&act=check_upload&type=photo&ondone=Upload.callbacks.oncheck0", $cookie);
 
$do_add = curl("$parametrs[1]?act=do_add&aid=-14&gid=0&mid=$parametrs[2]&hash=$parametrs[3]&rhash=$parametrs[4]&vk=&from_host=vkontakte.ru&ajx=1", $cookie, array('photo' => '@'.$pic));
preg_match('/mid=(.*?)&aid=-14&gid=0&server=(.*?)&photos=(.*?)&hash=(.*?)$/', $do_add, $parametrs2);
$choose = curl("http://vkontakte.ru/al_photos.php?act=choose_uploaded&aid=-14&al=1&gid=0&hash=$parametrs2[4]&mid=$parametrs2[1]&photos=$parametrs2[3]&server=$parametrs2[2]", $cookie);
preg_match('/<!>([0-9]{1,}+_+[0-9]{1,})<!><!json>/', $choose, $photo);
print_r($parametrs);
return $photo[1];
}
 
function wall_post($id, $photo, $text, $cookie){
$pars_hash = curl("http://vkontakte.ru/wall$id", $cookie);
preg_match('/"post_hash":"(.*?)","/', $pars_hash, $hash);
$text = urlencode($text);
$send = curl("http://vkontakte.ru/al_wall.php?act=post&al=1&attach1=$photo&attach1_type=photo&facebook_export=&friends_only=&hash=$hash[1]&message=$text&note_title=&official=&status_export=&to_id=$id&type=full_all", $cookie);
}
 
function authorization($email, $pass){
$res = get_headers("http://login.vk.com/?act=login&email=$email&pass=$pass");
 
if(substr_count($res[31],"remixsid")){
preg_match("/Set-Cookie: (.*?);/",$res[31],$cookie);
echo "[#]Authorization successful! \n";
return $cookie[1];
}else{
echo "[#]Login or password incorrect!\n";
exit;
}
}
 
function curl($url, $cookie, $data = false){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt ($ch, CURLOPT_COOKIE, $cookie);
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
if ($data){
curl_setopt($ch, CURLOPT_POSTFIELDS, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
$response = curl_exec ($ch);
curl_close($ch);
return $response;
}
?>
Пишет <!--11118<!><!>0<!>6363<!>8<!>Ошибка доступа<!><!>
Пробовал запрос делать вручную, что-то типа этого:
Для просмотра ссылки Войди или Зарегистрируйся
Не загружает и в ответ пишет {"code":"0"}
В чем может быть проблема ?Если есть готовое решение загрузки фото вконтакт, не жмитесь, выкладывайте.
 
Пробовал запрос делать вручную, что-то типа этого:
Для просмотра ссылки Войди или Зарегистрируйся
Не загружает
:confused: теперь HTTP сервер сам может забирать файлы? По переданному гет параметру....
скрипт работает на регулярных выражениях, и вполне вероятно, что вк поменял html код своих страниц и все перестало работать. в добавок, не используется стандартная фича с cookie для curl.
А скрипты с API будут работать пока поддерживается api.
 
Последнее редактирование:
:confused: теперь HTTP сервер сам может забирать файлы? По переданному гет параметру....
скрипт работает на регулярных выражениях, и в после вероятно что вк поменял html код своих страниц и все перестало работать. в добавок, не используется стандартная фича с cookie для curl. А скрипты с API будут работать пока поддерживается api.
ну вроде ж как cURL забирает локальные файлы через @
If you start the data with the letter @, the rest should be a file name to read the data from, or - if you want curl to read the data from stdin. The contents of the file must already be URL-encoded. Multiple files can also be specified. Posting data from a file named 'foobar' would thus be done with --data @foobar. When --data is told to read from a file like that, carriage returns and newlines will be stripped out.
 
Етить колотить.... просто нет слов....
ну вроде ж как cURL забирает локальные файлы через @
Трамвай тоже на электричестве ездит а человеку органику подавай...
Вы вообще хоть немного представляете что написали? Запрос на "контакт" идет. Да и еперно наверно в браузер (не удивлюсь)

Ах ну и да как контрольный ибо явно вы тоже не в курсе о чем вообще пишете. Отправка файлов идет как минимум через POST и это написано в тексте который вы же и привели.

Если бы вы решились хотя бы час потратить на прочтение мануалов по вашему вопросу у вас бы не возникло вопросов что за хрень творится и вы бы смогли оценить шутку с
Пробовал запрос делать вручную, что-то типа этого:
Для просмотра ссылки Войди или Зарегистрируйся
Не загружает и в ответ пишет {"code":"0"}
Что за беда пошла ? Все каму не лень лезут писать на curl ничерта не зная языка и тем более основ работы протакола. Даже разбираться в вопросе лень. Идите и начинайте писать скрипт с 0 на сокетах и будет все отлично и в вопросе разберетесь и суть проблемы найдете и тогда уже юзайте curl, а там гляди и до class curl доберетесь.

Вообще не понимаю раздел походу пора переименовать в "Лень тратить время сделайте за меня..." Ебогу каждая 3 тема звучит как анегдот то скрипт найден и не работает то начал писать да пишу ериз то скажите где я не прав.... и все это при том что задачи либо до идиотизма стандартные и простые либо просто нужно разобраться но всем лень.

PS. Наболело.


А ну и по старинке....
Проверте верность работы всез preg_match
Измените метод работы с cookie на работу с файлом
Проверьте что бы запросы были теми что есть на самом деле начиная с адресов и метода их формирования и заканчивая данными которые уходят в POST
Пробуйте использовать полный путь к файлу от корня.

PSS. Вообще цена такому скрипту 10-15$ но это так к размышлению....
 
Последнее редактирование модератором:
Етить колотить.... просто нет слов....

Трамвай тоже на электричестве ездит а человеку органику подавай...
Вы вообще хоть немного представляете что написали? Запрос на "контакт" идет. Да и еперно наверно в браузер (не удивлюсь)

Ах ну и да как контрольный ибо явно вы тоже не в курсе о чем вообще пишете. Отправка файлов идет как минимум через POST и это написано в тексте который вы же и привели.
А вы стартпост читали вообще?
PHP:
$do_add = curl("$parametrs[1]?act=do_add.....", $cookie, array('photo' => '@'.$pic));
Запрос идет через сURL, функция curl там же чуть ниже
PHP:
function curl($url, $cookie, $data = false){
тем самым POST
PHP:
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
а не в опере :lol:
 
Xe-Xe
Отсыпь...

Или просто подумайте как можно так упороться дабы родить уже 2 поста сопоставимых с краем адекватности.

А вы стартпост читали вообще?
да
Запрос идет через сURL, функция curl там же чуть ниже
да ладно... серьезно ?

вот это поворот....


А теперь для особо адекватных
Для просмотра ссылки Войди или Зарегистрируйся
это можно назвать запросом с GET параметрами, повторяю с GET а не POST
То куда это пробывалось суваться я боюсь предположить, не, не удивлюсь если это сувалось в адресную строку браузера.
Но даже если это уходило в "Запрос идет через сURL, функция curl там же чуть ниже" то каким образом оно дойдет до условия if ($data) ??? Не интерпретарор если так же уделается то может и вкурит что данные можно дернуть из GET сунуть их в $data и тем самым инициализировать запрос POST с данными из GET (а че нет то ???)

Так что уважаемы вы сначала подумайте а потом пишите (или я что то путаю ??? а не мля не путаю.) Ни каким образом это
Пробовал запрос делать вручную, что-то типа этого:
Для просмотра ссылки Войди или Зарегистрируйся
не может быть хоть как то работоспособным в нашем измерении.
 
Етить колотить.... просто нет слов....

В скрипте работа с постингом файлов таки нормально реализована, даже несмотря на некоторые опечатки
CURLOPT_POSTFIELDS Все данные, передаваемые в HTTP POST-запросе. Для передачи файла, укажите перед именем файла @, а также используйте полный путь к файлу. Тип файла также может быть указан с помощью формата ';type=mimetype', следующим за именем файла. Этот параметр может быть передан как в качестве url-закодированной строки, наподобие 'para1=val1&para2=val2&...', так и в виде массива, ключами которого будут имена полей, а значениями - их содержимое. Если value является массивом, заголовок Content-Type будет установлен в значение multipart/form-data. Начиная с версии PHP 5.2.0, при передаче файлов с префиксом @, value должен быть массивом.
и массив $data там в вызов curl() передаётся и доходит эта переменная не пустая.

А вот то как ТС пытается через браузер (скорее всего) проверить работоспособность заливки, это конечно забавно:
Пробовал запрос делать вручную, что-то типа этого:
 
Не то что как таковая функция работоспособна я не спорю, я пояснял несостоятельность ответного выпада Xe-Xe "а не в опере" следовательно речь он вел про "Для просмотра ссылки Войди или Зарегистрируйся" а это даже если приложить все способности телепата не могло дойти до if ($data) потому как все что он должен был засунуть в масив он сунул в строку запроса. Я имел в виду именно это.

Вообще конечно странно что ТС вообще ни ответил ничего в тебе, ведать и правда ждал поста с рабочим вариантом ((
 
Назад
Сверху