Пишем простой спамер для ВКонтакте на Delphi

С каждым днём в рядах программистов происходит пополнение. Кто-то постоянно желал сиим заняться и вдруг отважился, кто-то в один момент решил поменять сферу деятельности и изучить программирование, а кому-то это требуется, например, для выполнения собственных рабочих обязательств. Так либо по другому, постоянно легче учиться по готовым примерам, когда все самые трудные вопросцы исследованы за вас, а для вас предоставляется урок, изложенный в достаточно упрощённой форме. Конкретно таковой урок ждёт вас сейчас.

пишем простой спамер для вконтакте на delphi

Цель урока

Цель этого урока – написать простейшую программку для ВКонтакте, которая будет спустя минутку опосля пуска публиковать пост в обозначенное общество от имени админа, удаляя при всем этом предшествующий пост, ежели такой имеется.

В целях написания данной программки было применено программное обеспечение Embarcadero RAD Studio с Delphi XE6 на борту. Вы сможете применять это ПО либо всякую другую версию.

Приступим

Процесс сотворения спамера заключается в написании Codа в несколько шагов, на каждом из которых пишется какая-то часть спамера. Урок подразумевает, что у вас уже есть базисные познания в языке программирования Delphi, и ориентирован быстрее на демонстрацию работы с API ВКонтакте. Ничего кардинально сложного тут нет, потому просто следуйте аннотации.

    Запускаем Delphi, создаём новейший проект и добавляем на форму поля, нужные для простого спамера:

    проект спамера вконтакте на delphi

      4 поля Edit для логина и пароля, для ID группы-приёмника и прикрепления аттача
      2 текстовых поля Memo для текста сообщения и лога событий
      2 клавиши Button для входа в акк и пуска спамера
      Компонент Timer для отправки сообщения спустя некий интервал времени
      Компонент HTTP для воплощения GET и POST запросов к ВКонтакте
      Компонент IdSSLIOHandlerSocketOpenSSL для отправки запросов по защищённому соединению HTTPS

    Приступаем к написанию Codа. Для начала опишем авторизацию аккаунта. Для этого сделаем функцию GetToken:

    Procedure TForm1.GetToken; 
    var
    temp: string;
    response: string;
    begin
    try
    // отправка запроса на авторизацию
    response := idhttp1.Get('https://oauth. vk. com/token? grant_type=password&client_id=2274003&scope=wall&client_secret=hHbZxrka2uZ6jB1inYsH&username=' LoginEdit. Text '&password=' PassEdit. text);
    except
    // ежели что-то пошло не так, выводим в лог информацию о этом
    logmemo. Lines. Add('ошибка соединения при получении access token');
    end;

    // проверяем, ежели слово token есть в переменной response, означает access_token получен
    if Pos('token', response) <> 0 then
    begin
    // выдергиваем access_token
    temp := Copy(response, Pos('access_token":"', response), Pos('","expires_in', response) - 3);
    Delete(temp, 1, 15);
    // и кладём в переменную token
    token := temp;
    logmemo. Lines. Add('token получен');
    end else
    begin
    // ежели token получить не удалось, пишем о этом в логе
    logmemo. Lines. Add('token не получен');
    end;
    end;

    Описанный способ авторизации заключается в получении ключа доступа Access_token. Ежели поточнее, это так именуемая «Ровная авторизация». Прочесть о ней можно тут: Vk. com/dev/auth_direct.

    Access_token, либо Маркер доступа, – программный объект, который содержит информацию по сохранности сеанса и идентифицирует юзера и его привилегии в социальной сети ВКонтакте.

    Позднее, при отправке неких Get либо Post запросов к ВКонтакте, нужно будет совместно с самими запросами передавать и сгенерированный при авторизации маркер доступа, так как не все способы API ВКонтакте являются общедоступными и могут добиваться от юзера определённых прав, которые идентифицируются средством передаваемого Access_token.

    В запрос для получения маркер доступа Access_token в процедуре выше были включены последующие характеристики:

      Grant_type – тип авторизации, должен быть постоянно равен Password
      Client_id – ID приложения, через которое происходит авторизация
      Client_secret – скрытый ключ такого же приложения
      Username – логин от вашего аккаунта ВКонтакте
      Password – пароль от вашего аккаунта ВКонтакте

    Доступ к этому типу авторизации быть может получен лишь опосля подготовительного согласования с администрацией ВКонтакте. Но потому что это более резвый и удачный метод авторизации, мы схитрили и для реализации данного типа авторизации в нашей программке употребляли в качестве приложения для авторизации данные от официального клиента ВКонтакте для Android (имеются ввиду характеристики Client_id и Client_secret). Потому не надо возиться с созданием новейшего приложения ВКонтакте и отправкой запроса на одобрение администрацией – для нашего примера возможно обойтись и таковым вариантом.

    Привяжем сделанную функцию к кнопочке «Авторизация», по клику на которую программка будет проходить авторизацию и получать сгенерированный Access_token:

    Procedure TForm1.Button1Click(Sender: TObject); 
    begin
    GetToken;
    end;

    Все запросы к ВКонтакте в неотклонимом порядке производятся через защищённое соединение. Потому непременно необходимо связать составляющие HTTP и IdSSLIOHandlerSocketOpenSSL, также положить в папку с программкой файлы dll-библиотек Ssleay32.dll и Libeay32.dll, ежели их там нет.

    Последующий шаг – написание функции, отвечающей за работу спамера по таймеру. Мы уже обусловились, что программка будет инспектировать стенку общества на наличие уже размещенного поста, удалять его, ежели он существует, и публиковать новейший по таймеру через данный интервал времени. В нашем случае, через минутку. Для реализации такового метода нам потребуются 3 способа API ВКонтакте со последующими параметрами:

      Wall. get – получение записей со стенки юзера либо общества

      Требуемые характеристики:

        Owner_id – ID общества ВКонтакте, записи со стенки которого нужно получить
        Access_token – маркер доступа тут необязателен, т. к. способ wall. get – общедоступный

      Wall. delete – удаление записи со стенки юзера либо общества

      Требуемые характеристики:

        Owner_id – ID общества ВКонтакте, запись со стенки которого нужно удалить
        Post_id – ID записи на стенке общества, которую нужно удалить
        Access_token – маркер доступа, приобретенный при авторизации

      Wall. post – публикация записи на стенку юзера либо общества

      Требуемые характеристики:

        Owner_id – ID общества ВКонтакте, на стенке которого нужно расположить запись
        From_group – метка, обозначающая, от имени кого публиковать запись. В нашем случае, мы публикуем от имени админа общества, потому этот параметр должен быть равен 1
        Message – текст сообщения
        Attachments – прикрепление по ссылке. Это быть может: фото, аудио либо видеозапись, документ, wiki-страница, заметка, опрос, альбом, продукт либо выборка продуктов
        Access_token – маркер доступа, приобретенный при авторизации

    Ознакомиться со всеми параметрами применяемых способов API ВКонтакте вы сможете на страничках документации, но для нашей задачки нам хватит и вышеперечисленных характеристик.

    Объединив эти способы и поколдовав над ними, вышла вот таковая простая процедура, которую мы связали с событием таймера OnTimer:

    Procedure TForm1.Timer1Timer(Sender: TObject); 
    var
    response: String;
    id: String;
    pos1: Integer;
    Info: TStringList;
    begin
    // как интервал, данный в таймере, подойдёт к концу, выключаем таймер и исполняем метод
    timer1.Enabled := false;
    try
    // получаем перечень записей со стенки общества
    // согласно документации API ВКонтакте, способ wall. get – общедоступный, потому access_token можно не передавать
    response := idhttp1.Get('https://api. vk. com/method/wall. get? owner_id=-' GroupEdit. text);
    except
    logmemo. Lines. Add('Ошибка получения ID поста');
    end;

    // получаем ID крайнего поста
    id := Pars(response,'"id":', ',"');
    sleep(500);

    // ежели пост есть
    if Length(id) > 0 then
    begin
    try
    // удаляем его
    response := idhttp1.Get('https://api. vk. com/method/wall. delete? owner_id=-' GroupEdit. text '&post_id=' id '&access_token=' token);
    except
    // ежели что-то пошло не так, сообщаем о этом в логе
    logmemo. Lines. Add('Ошибка удаления поста');
    end;
    end;
    sleep(500);

    // публикуем новейший пост средством post-запроса
    try
    response := '';
    Info := TStringList. Create;
    Info. Add('owner_id=-' GroupEdit. text);
    Info. Add('from_group=1');
    Info. Add('access_token=' token);
    Info. Add('message=' messagememo. text);
    Info. Add('attachments=' attachedit. text);
    response := idhttp1.Post('https://api. vk. com/method/wall. post', Info);
    except
    // ежели что-то пошло не так, сообщаем о этом в логе
    logmemo. Lines. Add('Ошибка сотворения поста');
    end;

    // проверяем ответ от сервера: удалось ли опубликовать пост либо нет, и выводим подобающую надпись в лог
    if Pos('post_id', response) > 0 then logmemo. Lines. Add('Пост добавлен!') else logmemo. Lines. Add('Пост не добавлен!');
    Info. Free;
    end;

    И опишем функцию Pars, при помощи которой в процедуре выше происходит извлечение ID крайнего поста из ответа от сервера:

    Function TForm1.Pars(st, st_begin, st_end: WideString): WideString; 
    begin
    if Pos(st_begin, st) <> 0 then Delete(st, 1, Pos(st_begin, st) Length(st_begin) - 1) else
    begin
    result := '';
    exit;
    end;

    if Pos(st_end, st) <> 0 then Delete(st, Pos(st_end, st), Length(st)) else
    begin
    result := '';
    exit;
    end;
    result := st;
    end;

    В свойствах таймера в блоке Object Inspector нашего Delphi устанавливаем свойство Interval равным 60000 миллисекунд (1 минутка). Это будет означать, что опосля пуска спамера обязана будет пройти 1 минутка, до того как выполнится основной метод программки.

    Дальше создаём событие нажатия на клавишу «Запустить». Оно будет по клику запускать таймер, ежели заблаговременно был получен ключ Access_token:

    Procedure TForm1.StartButtonClick(Sender: TObject); 
    begin
    if Length(token) > 0 then timer1.Enabled := true;
    end;

    В конечном итоге, скомпилировав весь этот Cod и запустив программку, можно насладиться результатом:

    пишем простой спамер для вконтакте на delphi
    Введя данные как на снимке экрана выше, авторизовавшись и запустив спамер, в конечном итоге мы получили последующий итог:

    итог работы написанного на delphi спамера вконтакте
    Ещё раз подчеркнём, что данный вариант программки просит от вашего аккаунта прав админа для удаления поста со стенки и публикации новейшего поста от имени группы.

Заключение

Естественно, это ещё чрезвычайно сырой вариант спамера. Для настоящей работы и его внедрения на неизменной базе его ещё стоит доработать, к примеру:

    Организовать работу спамера по таймеру нескончаемо, чтоб пост публиковался и удалялся по кольцу автоматом, а не по нажатию на клавишу «Пуск» опять и опять.

    Доработать удаление поста в группе. Потому что наш вариант программки просто удаляет крайний пост в группе, то может выйти, что перед удалением старенького поста и публикацией новейшего на стенку общества был добавлен новейший пост (не через нашу программку), который удалится заместо старенького маркетингового поста.

    Обрисовать адекватное поведение программки при достижении в группе дневного лимита на добавление 50 постов на стенку.

    В случае, ежели цель использования спамера – реклама по определённым ключевикам, по которым пост можно отыскать в поиске, можно обучить программку при достижении дневного лимита на публикацию постов автоматом создавать новейшую группу для продолжения работы.

    И почти все другое.

По сути, это лишь учебный урок, и программка вправду чрезвычайно ординарна. В ней можно сделать огромное количество многофункциональных доработок, чтоб перевоплотить его в по-настоящему мощнейший инструмент. Но цель нашего урока – привести пример того, как в целом осуществляется работа в Delphi с API ВКонтакте для написания схожих программ.

Готовый начальный Cod спамера можно скачать в прикреплении к материалу. Для вас приглянулся материал? 12 Скачать прикрепления 6.16 MB Антивирусный анализ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *