Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Delphi и сообщения групп во Вконтакте  [new]
Menmo
Member

Откуда:
Сообщений: 3
Дорогие наши программисты, помогите решить задачу. Нужно получать сообщения именно из группы во Вконтакте и реагировать на них, если в сообщении найден определённый текст. Второе реализовать легко, а вот первое? Как получать сообщения из сообщества вк?
27 апр 19, 13:56    [21873336]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
shonli95
Member

Откуда:
Сообщений: 85
post,get. xml массив и так далее. for-in pos match и все дела. Программа за 5 минут, ничего сложного
27 апр 19, 14:14    [21873342]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
Menmo
Member

Откуда:
Сообщений: 3
shonli95,

Можно пример кода? Для кого-то может и легко, но я самоучка.. Долго доходит)
27 апр 19, 15:06    [21873357]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
s62
Member

Откуда: Жуковский
Сообщений: 962
Menmo,

посмотри темы вот этого пользователя: https://www.sql.ru/forum/memberinfo.aspx?mid=250348
Он писал что-то для работы с сообщениями ВК и тут задавал вопросы.
27 апр 19, 19:14    [21873455]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 995
самое сложное там процедура логина, в остальном все довольно тривиально.
27 апр 19, 21:55    [21873519]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
Menmo
Member

Откуда:
Сообщений: 3
энди
самое сложное там процедура логина, в остальном все довольно тривиально.

Можно пожалуйста пример? Как залогиниться в вк знаю, через API, но вот как именно получать информацию из сообщений в группе не представляю.
28 апр 19, 08:42    [21873609]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 995
Мне кажется если Вы не представляете как вызвать url передав ему параметры описанные в API то Вы слишком рано взялись за эту тему, возьмите пример попроще для начала. У VK очень приличная документация с описанием всех методов, полностью на русском языке, обычному программисту этого должно быть более чем достаточно, просто это пока не Ваш уровень, не обижайтесь.
28 апр 19, 11:16    [21873635]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
shonli95
Member

Откуда:
Сообщений: 85
энди,

Ржу не могу, аж до слёз. Ох как сложно - то взять, и передать username и password с client_id а так же client_secret с типом grant_type равным password и правами scope предварительно указав версию v по адресу oauth.vk.com/token. И авторизация готова, в 1 строку
29 апр 19, 15:26    [21874489]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
shonli95
Member

Откуда:
Сообщений: 85
Вот ваша сложная авторизация

https://oauth.vk.com/token?username=Login@gmail.com&password=MyPass&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&grant_type=password&scope=244236287&v=5.92

К сообщению приложен файл. Размер - 11Kb
29 апр 19, 15:31    [21874498]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
alekcvp
Member

Откуда:
Сообщений: 1458
shonli95
Вот ваша сложная авторизация


Все снифферы в локальной сети бьются в экстазе :)
29 апр 19, 16:23    [21874587]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 995
не инди конечно но общий смысл уяснить можно

https://www.clevercomponents.com/portal/kb/a111/vk-authorization-getting-the-oauth-code-in-delphi-app-using-twebbrowser.aspx
29 апр 19, 17:09    [21874648]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 995
а вот тут как использовать стандартный OAuth
http://disik-programmer.blogspot.com/2017/07/delphi-102-tokyo-rest-api-1.html
29 апр 19, 17:16    [21874656]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
shonli95
Member

Откуда:
Сообщений: 85
alekcvp,

Пусть упадут в конвульсию) Авторизация, post метод который не только передаёт аргументы, но и файлы

+
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Net.URLClient, System.Net.HttpClient,
  System.Net.HttpClientComponent, System.JSON, System.Net.Mime, Vcl.StdCtrls;

type
  TForm2 = class(TForm)
    NetHTTPClient1: TNetHTTPClient;
    ButtonAuth: TButton;
    Login: TEdit;
    Pass: TEdit;
    GetDialogs: TButton;
    procedure ButtonAuthClick(Sender: TObject);
    procedure GetDialogsClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    Access_token, Ver: string;
    function AuthVK(const Login, Pass, Client_id, Client_secret, Scope, V: string): string;
    function Call(const Method: string; Data: TMultipartFormData): TJSONValue;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

function TForm2.AuthVK(const Login, Pass, Client_id, Client_secret, Scope, V: string): string;
var
  Resp: IHTTPResponse;
  JsonValue: TJSONObject;
  Val: TJSONValue;
  Str: string;
begin
  Result := '';
  Resp := NetHTTPClient1.Get('https://oauth.vk.com/token?username=' + Login + '&password=' + Pass +
    '&client_id=' + Client_id + '&client_secret=' + Client_secret + '&grant_type=password&scope=' +
    Scope + '&v=' + V);

  JsonValue := TJSonObject.ParseJSONValue(Resp.ContentAsString()) as TJSONObject;
  if JsonValue = nil then
    Exit;

  Val := JsonValue.Values['access_token'];
  if Val = nil then
    Application.MessageBox(PChar(JsonValue.Values['error_description'].Value),
      PChar(JsonValue.Values['error'].Value), MB_OK or MB_ICONINFORMATION)
  else
    Result := Val.Value;

  Ver := V;
end;

function TForm2.Call(const Method: string; Data: TMultipartFormData): TJSONValue;
var
  Val: TJSONValue;
begin
  try
    Result := nil;
    if Access_token <> '' then
    begin
      if Data = nil then
      begin
        Application.MessageBox(PChar('Empty Data in call method to ' + Method), 'Error',
          MB_OK or MB_ICONINFORMATION);
        Exit;
      end;

      Data.AddField('access_token', Access_token);
      Data.AddField('v', Ver);

      Result := TJSonObject.ParseJSONValue(NetHTTPClient1.Post('https://api.vk.com/method/' +
        Method, Data).ContentAsString()) as TJSONObject;
      if Result = nil then
        Exit;

      Val := Result.GetValue<TJSONValue>('error', nil);
      if Val <> nil then
        Application.MessageBox(PChar(Val.ToJSON), PChar(Val.GetValue<string>('error_msg')),
          MB_OK or MB_ICONINFORMATION)
      else
        Result := Result.GetValue<TJSONValue>('response', nil);
    end
  except

  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  NetHTTPClient1.UserAgent :=
    'VKAndroidApp/4.38-816 (Android 6.0; SDK 23; x86; Google Nexus 5X; ru)';
end;

procedure TForm2.ButtonAuthClick(Sender: TObject);
begin
  Access_token := AuthVK(Login.Text, Pass.Text, '2274003', 'hHbZxrka2uZ6jB1inYsH',
    '244236287', '5.95');
  if Access_token <> '' then
    ShowMessage('Удачно');
end;

procedure TForm2.GetDialogsClick(Sender: TObject);
var
  P: TMultipartFormData;
  JsonValue, Tmp: TJSONValue;
  Items, Items2: TJSONArray;
  Count, I: Integer;
  Vv: TJSONValue;
  Ss: string;
begin
  if Access_token <> '' then
  begin
    P := TMultipartFormData.Create();

    P.AddField('count', '5'); // 5 записей

    JsonValue := Call('messages.getDialogs', P);
    if JsonValue = nil then
      Exit;
    Items := JsonValue.GetValue<TJSONArray>('items', nil);
    if Items = nil then
      Exit;

    For I := 0 to Items.Count - 1 do
    begin
      Tmp := Items.Items[I].GetValue<TJSONValue>('message', nil);
      ShowMessage('user_id: ' + Tmp.GetValue<string>('user_id', '') + #13 + 'Message:' +
        Tmp.GetValue<string>('body', ''));
    end;
  end;
end;

end.
30 апр 19, 01:39    [21875072]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
Василий 2
Member

Откуда:
Сообщений: 676
alekcvp
shonli95
Вот ваша сложная авторизация


Все снифферы в локальной сети бьются в экстазе :)

Эти снифферы увидят только обращение по https к домену oauth.vk.com и лососнут тунца
13 май 19, 15:22    [21883500]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
ziv-2014
Member

Откуда:
Сообщений: 375
Василий 2,
Fiddler тебе в помощь, он как зоркий глаз, почти что все видит.
14 май 19, 08:59    [21884032]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
Василий 2
Member

Откуда:
Сообщений: 676
ziv-2014
Василий 2,
Fiddler тебе в помощь, он как зоркий глаз, почти что все видит.


Картинка с другого сайта.
Ага, расскажи мне, как он в LAN без установки своего сертификата расковыряет SSL xD
14 май 19, 11:03    [21884155]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
ziv-2014
Member

Откуда:
Сообщений: 375
Василий 2, Установи сертификат, тебе что-то мешает.
14 май 19, 11:04    [21884157]     Ответить | Цитировать Сообщить модератору
 Re: Delphi и сообщения групп во Вконтакте  [new]
Василий 2
Member

Откуда:
Сообщений: 676
Кому? Узлу в локальной сети?
14 май 19, 19:48    [21884751]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить