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

Тема в разделе "Как сделать...", создана пользователем ZiX, 15 ноя 2012.

  1. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.390
    Симпатии:
    580
    Нашел такой вот код, для загрузки фото вконтакт. Других скриптом не нашел, остальные что в паблике работают через апи. Хотелось бы как нибудь без апи обойтись. Загружать не хочет, хотя на первый взгляд все нормально. Может у контакта поменялся алгоритм загрузки фото?
    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($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_FOLLOWLOCATION0);
    curl_setopt ($chCURLOPT_COOKIE$cookie);
    curl_setopt ($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
    if (
    $data){
    curl_setopt($chCURLOPT_POSTFIELDS1);
    curl_setopt($chCURLOPT_POSTFIELDS$data);
    }
    $response curl_exec ($ch);
    curl_close($ch);
    return 
    $response;
    }
    ?>
    Пишет <!--11118<!><!>0<!>6363<!>8<!>Ошибка доступа<!><!>
    Пробовал запрос делать вручную, что-то типа этого:
    Перейти по ссылке
    Не загружает и в ответ пишет {"code":"0"}
    В чем может быть проблема ?Если есть готовое решение загрузки фото вконтакт, не жмитесь, выкладывайте.
     
  2. Qwest-fx

    Qwest-fx Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    131
    Симпатии:
    39
    :confused: теперь HTTP сервер сам может забирать файлы? По переданному гет параметру....
    скрипт работает на регулярных выражениях, и вполне вероятно, что вк поменял html код своих страниц и все перестало работать. в добавок, не используется стандартная фича с cookie для curl.
    А скрипты с API будут работать пока поддерживается api.
     
    Последнее редактирование: 19 ноя 2013
  3. Xe-Xe

    Xe-Xe Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    10
    Симпатии:
    6
    ну вроде ж как cURL забирает локальные файлы через @
     
  4. Inviseble_Demon

    Inviseble_Demon

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

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

    Если бы вы решились хотя бы час потратить на прочтение мануалов по вашему вопросу у вас бы не возникло вопросов что за хрень творится и вы бы смогли оценить шутку с
    Что за беда пошла ? Все каму не лень лезут писать на curl ничерта не зная языка и тем более основ работы протакола. Даже разбираться в вопросе лень. Идите и начинайте писать скрипт с 0 на сокетах и будет все отлично и в вопросе разберетесь и суть проблемы найдете и тогда уже юзайте curl, а там гляди и до class curl доберетесь.

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

    PS. Наболело.


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

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

    Xe-Xe Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    10
    Симпатии:
    6
    А вы стартпост читали вообще?
    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($chCURLOPT_POSTFIELDS$data);
    а не в опере :lol:
     
  6. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    351
    Xe-Xe
    Отсыпь...

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

    да
    да ладно... серьезно ?

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


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

    Так что уважаемы вы сначала подумайте а потом пишите (или я что то путаю ??? а не мля не путаю.) Ни каким образом это
    не может быть хоть как то работоспособным в нашем измерении.
     
  7. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.521
    Симпатии:
    1.370
    В скрипте работа с постингом файлов таки нормально реализована, даже несмотря на некоторые опечатки
    и массив $data там в вызов curl() передаётся и доходит эта переменная не пустая.

    А вот то как ТС пытается через браузер (скорее всего) проверить работоспособность заливки, это конечно забавно:
     
  8. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    351
    Не то что как таковая функция работоспособна я не спорю, я пояснял несостоятельность ответного выпада Xe-Xe "а не в опере" следовательно речь он вел про "Перейти по ссылке" а это даже если приложить все способности телепата не могло дойти до if ($data) потому как все что он должен был засунуть в масив он сунул в строку запроса. Я имел в виду именно это.

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