m0nr
GOLD
- Joined
- Jun 8, 2016
- Messages
- 599
- Reaction score
- 348
Unit Hi2All; {Привет всем. Сейчас я покажу как работать с VKAPI через DELPHI, на примере бота, автоматически принимающего заявки в закрытую группу.}
Var
{
В итоге получаем нечто такое:
View attachment 8495
}
Весь код;
{На написание сие гайда, и оформление ушло куча времени - но я доволен результатом}
End.
Var
Delphi: Любая_версия;
Руки: Две; //Можно справиться ногами, ибо код весь дам.
Интернет: С_хорошим_соединением; //Для исключения провисаний сети при работе
BeginFile>New>VCL Form Application; //Создаём новый проект
Кидаем на форуму TLabel, TMemo, TTimer, TidHTTP, TIdServerIOHandlerSSLOpenSSL;
Сохраняем проект в отдельную папку, и компилируем его;
Залезаем в папку с проектом и ищем файл, который выходит после компиляции, и рядом с ним кладём библиотеки libeay32.dll ssleay32.dll; //без этого VKAPI не даст доступ из-за SSL
{Теперь, когда подготовка проекта завершена - можно приступать к коду}
Для начала объявим глобальные переменные и константы, для лёгкости в обращении к ним;
- id:string;
- i:Integer;
- const gid = 'ID_ГРУППЫ';
- 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: