Pull to refresh

Загрузка картинок на стену ВКонтакте

Reading time 2 min
Views 5.9K
А вам приходят сообщения от друзей с просьбами отослать куда-нибуть СМС или заглянуть в галерею где ваша знакомая позирует ню? А все потому, что пользуются сомнительным ПО и ходят на сомнительные сайты.

Мы сейчас напишем скрипт, который будет размещать картинки-граффити на стене. Писал под себя, так что любителям удобств напильник в руки и удачи. Напишем на PHP (да-да, на этом тупом тормознутом языке для говнокодеров и школьников) а заодно и подучим работу с cURL, и загрузку с его помощью файлов на сервер.

Итак, из инструментов нам нужен снифер и flash-декомпилятор. Снифер нам выдаст параметры запроса:
'Signature' => цифровая подпись отправляемой на сервер картинки,
'Filedata' => собственно картинка в формате PNG и размером 586Х293,
'Upload' => строка 'Submit Query'
… а флеш-декомпилятор для того, чтобы узнать, каким образом формируется цифровая подпись:
Signature = md5 от первого килобайта base64-кода PNG-картинки

Собственно код:

UPD: В связи со сменой системы авторизации в контакте, скрипт уже не рабочий. В будущем переделаю.

<?
    //http://vkontakte.ru/graffiti.php?act=last
    
    $userID         = 'komu_ID';
    $myID           = 'otkogo_ID';
    $myEMail        = 'moi_login_v_kontakte%40mail.ru';
    $myRemixId      = 'f2a72a32c5b112da4e1701b0815614f34c680278918fbc08c4d3ed70';
    $myPassword     = md5('pass');
    $graffitiFile   = 'graffiti.png';

    $vh = curl_init();
    $options = Array
    (
        CURLOPT_URL         => 'http://vkontakte.ru/graffiti.php?to_id=' . $userID . '&group_id=0',
        CURLOPT_POST        => 1,
        CURLOPT_POSTFIELDS  => Array
        (
            'Signature' => md5(substr(base64_encode(file_get_contents($graffitiFile)),   0,1024)),
            //'Filedata'  => file_get_contents($graffitiFile),
            'Filedata'  => '@' . realpath($graffitiFile),
            'Upload'    => 'Submit Query',
        ),
        CURLOPT_REFERER     => 'http://vkontakte.ru/swf/Graffiti.swf?15',
        CURLOPT_USERAGENT   => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729) FirePHP/0.2.4',
        CURLOPT_COOKIE      => 'remixlang=0; remixchk=5; remixautobookmark=14; remixmid=' . $myID. '; remixemail=' . $myEMail. '; remixpass=' . $myPassword . '; remixid=' . $myRemixId . ';',
        CURLOPT_HTTPHEADER  => Array
        (
            'Host: vkontakte.ru',
            'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language: ru,en-us;q=0.7,en;q=0.3',
            'Accept-Encoding: gzip,deflate',
            'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7',
            'Keep-Alive: 300',
            'Connection: keep-alive',
        ),
        CURLOPT_RETURNTRANSFER  => true,
    );
    curl_setopt_array($vh, $options);
    curl_exec($vh);
    curl_close($vh);

    Header("Location: http://vkontakte.ru/graffiti.php?act=last");
?>


Рядом со скриптом положить файлик PNG размером 586Х293 и названием graffiti.png. Запускать из консоли.
Когда скрипт отработает, необходимо зайти по адресу vkontakte.ru/graffiti.php?act=last и подтвердить загруженную картинку. Если не грузится, возможно картинка слишком большая по весу. Лимит по весу не вычислял, но килобайт 100-150 влазит спокойно…

Всем спасибо. С Днем Победы.
Tags:
Hubs:
-1
Comments 26
Comments Comments 26

Articles