[Delphi] Работа VKAPI, на примере бота

Status
Not open for further replies.

m0nr

Malware Analyst
Joined
Jun 8, 2016
Messages
586
Reaction score
344
Unit Hi2All; {Привет всем. Сейчас я покажу как работать с VKAPI через DELPHI, на примере бота, автоматически принимающего заявки в закрытую группу.}
Var
Delphi: Любая_версия;​
Руки: Две; //Можно справиться ногами, ибо код весь дам.
Интернет: С_хорошим_соединением; //Для исключения провисаний сети при работе
Begin
File>New>VCL Form Application; //Создаём новый проект
Кидаем на форуму TLabel, TMemo, TTimer, TidHTTP, TIdServerIOHandlerSSLOpenSSL;​
Сохраняем проект в отдельную папку, и компилируем его;​
Залезаем в папку с проектом и ищем файл, который выходит после компиляции, и рядом с ним кладём библиотеки libeay32.dll ssleay32.dll; //без этого VKAPI не даст доступ из-за SSL
{Теперь, когда подготовка проекта завершена - можно приступать к коду}
Для начала объявим глобальные переменные и константы, для лёгкости в обращении к ним;​

  1. id:string;
  2. i:Integer;
  3. const gid = 'ID_ГРУППЫ';
  4. const token = 'ТОКЕН_ЛЮБОГО_АДМИНИСТРАТОРА_ГРУППЫ';
{ т.к. я показываю самый примитивный способ работы с VKAPI, тут не будет показан способ получения токена, авторизацией через login;pass. Об этом позже
Теперь непосредственно сам код проверки на наличие заявки, в виде процедуры }
procedure getRequest; //Объявление процедуры "getRequest"
var response: string; //переменная для получения ответов
begin
response:=Form1.IdHTP1.get('https://api.vk.com/method/groups.getRequests?group_id='+gid+'&access_token='+token+'&count=1&v=5.92'); //Запрос к VKAPI
id := Pars ('[', response, ']'); //Получаем значение id из полученного ответа, эту функцию можно взять из кода который будет ниже, либо в интернете
if id <> '' then approveRequest ; //Если значение id не пустое, вызываем процедуру подтверждения заявки
end;
{
Теперь разберём запрос к VKAPI.
--
groups.getRequests - это метод VKAPI (Для ознакомления - кликабельно)
--
group_id='+gid+'
group_id - параметр, отвечающий за передачу ID группы
gid - Константа, содержащая ID группы
--
& - знак, отделяющий параметры
--
access_token='+token+'
access_token - параметр, содержащий токен доступа
token - Константа, в которой токен администратора
--
count=1&v=5.92
Count=1 - Количество получаемых заявок за запрос, в данном случае одна
v=5.92 - Версия VKAPI, смотрите в методах, к какой версии обращаться
}
procedure approveRequest;​
var Response: string;
time : Extended;​
begin
time := (Now)/(24*60*60);​
Response:=Form1.idhtp1.Get('https://api.vk.com/method/groups.approveRequest?group_id='+gid+'&user_id='+id+'&access_token='+token+'&v=5.92');​
Form1.Memo1.lines.Add('['+FormatDateTime('hh:nn:ss', Now)+'] Принята заявка'); Inc(i);​
Form1.Label1.Caption:='Заявок принято : '+inttostr(i);​
end;
{Тут абсолютно тот-же принцип}
Настраиваем таймер на интервал ~2500 (2.5 сек);​
Ставим вызов процедуры getRequest на таймер;​

{
В итоге получаем нечто такое:
View attachment 8495
}

Весь код;
Code:
var
  Form1: TForm1;
  id:string;
  i:Integer;
  const gid   = '17***0**7';
  const token = '135de8e143d99a5da1c16*****e8dfbeae9e*******************1c7ca8f52622b**********63';
implementation
{$R *.dfm}
function Pars(T_, ForS, _T: string): string;
var a, b:integer;
begin
  Result := '';
  if (T_='') or (ForS='') or (_T='') then Exit;
  a:=Pos(T_, ForS);
  if a=0 then Exit else a:=a+Length(T_);
  ForS:=Copy(ForS, a, Length(ForS)-a+1);
  b:=Pos(_T, ForS);
  if b>0 then
  Result:=Copy(ForS, 1, b - 1);
end;

procedure approveRequest;
var Response: string;
    time : Extended;
begin
    time := (Now)/(24*60*60);
    Response:=Form1.idhtp1.Get('https://api.vk.com/method/groups.approveRequest?group_id='+gid+'&user_id='+id+'&access_token='+token+'&v=5.92');
    Form1.sMemo1.lines.Add('['+FormatDateTime('hh:nn:ss', Now)+'] Принята заявка');   Inc(i);
    Form1.sLabel1.Caption:='Заявок принято : '+inttostr(i);
end;

procedure getRequest;
var response: string;
begin
  response:=Form1.IdHTP1.get('https://api.vk.com/method/groups.getRequests?group_id='+gid+'&access_token='+token+'&count=1&v=5.92');
  id := Pars  ('[', response, ']');
  if id <> '' then approveRequest ;
end;

procedure TForm1.tmr1Timer(Sender: TObject);
begin
getRequest;
end;

{На написание сие гайда, и оформление ушло куча времени - но я доволен результатом}

End.
 
Last edited:

m0nr

Malware Analyst
Joined
Jun 8, 2016
Messages
586
Reaction score
344
Так-с, закончил писать VKApi на Indy.
Навел красоту в коде - работает без запинок, в отличии от прошлых версий на Synapse.
Готов поделиться, однако вопрос в том - нужно ли это вообще тут?
Пример полностью рабочего софта на этом апи, авторизация идёт через верифицированное приложение в вк, с бесконечным токеном.
View attachment 8526
 

m0nr

Malware Analyst
Joined
Jun 8, 2016
Messages
586
Reaction score
344
Так-с. Поделюсь немного результатами работы над VKApi.
Всё то-же приложения автопринятия заявок в закрытую группу, в роли примера.
View attachment 8594
Добавлена полная поддержка двухфакторной аутентификации, а так-же авторизации по токену.
--
А теперь тот самый софт, о котором была речь - про мини вк клиент с аналоговым способом авторизации через токен, с возможным дампом профиля:
View attachment 8595View attachment 8596View attachment 8597View attachment 8598

Да, сообщения сейчас выглядят стрёмно, но работа над этим ведётся. Один из вариантов оформления сейчас такой:
View attachment 8599
Связь со мной m.hhide.su
 

Max_Legend

Member
Joined
Jul 29, 2018
Messages
126
Reaction score
15
Интересно, есть идеи как можно раскрутить группу
 

Godzilla_king00

New member
Joined
May 17, 2023
Messages
2
Reaction score
0
Nice to see you're experimenting with VKAPI. Did you guys encounter any issues with the rates limit or getting the API key to work properly?
 
Status
Not open for further replies.
Top