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

Status
Not open for further replies.

m0nr

GOLD
Joined
Jun 8, 2016
Messages
599
Reaction score
348
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

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

m0nr

GOLD
Joined
Jun 8, 2016
Messages
599
Reaction score
348
Так-с. Поделюсь немного результатами работы над 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
125
Reaction score
15
Интересно, есть идеи как можно раскрутить группу
 
Status
Not open for further replies.
Top