В этом уроке я покажу вам достаточно простой и эффективный способ авторизации в небезызвестной социальной сети ВКонтакте, например, для получения какой-либо информации.
Всем известно, что в социальных сетях в настоящее время зарегистрировано огромное количество пользователей, в частности в соц. сети ВКонтакте. Поэтому синхронизация, привязка различных данных из аккаунтов соц. сетей к различным приложениям и играм является достаточно актуальной темой. Для того чтобы получать эту информацию в Delphi, можно провести авторизацию посредством библиотеки Indy, принять все cookies и получить необходимую информацию. В интернете можно найти огромное множество различных способов авторизации ВКонтакте посредством Indy, однако будьте уверены, что 99% этих способов не работают, или перестали работать уже очень давно. Это обуславливается тем, что ВКонтакте постоянно изменяется, в него вносится постоянно множество изменений. Способ, который предлагаю я, на сегодняшний день (12 марта 2012) работает достаточно неплохо. Итак, привожу код самой авторизации с подробными комментариями:
var
s: string;
http: TIdHTTPEx;
begin
http:= TIdHTTPEx.Create;
// Создаем экземпляр класса TIdHTTPEx
http.Request.UserAgent:=
‘Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.7.62 Version/11.01’;
// Маскируемся под оперу 🙂
try
s:= http.GetEx(‘http://vk.com/login.php?m=1&email=’ + email +
‘&pass=’ + pass);
// пробуем залогиниться
// для этого выполняем обычный GET запрос, в котором прямо в адресе передаем
// значения email и pass
except
// при авторизации происходит редирект,
// который обязательно необходимо обработать,
// иначе корректно залогиниться нам не удастся
if http.ResponseCode = 302 then
s:= http.GetEx(‘http://vk.com’ + http.Response.Location);
end;

Обратите внимание на то, что в качестве email`а нужно указывать email, который привязан к аккаунту! Если вы укажете вместо email свой номер телефона, по которому вы регистрировались, или логин, то авторизация скорее всего будет неуспешной. В настоящее время привязка аккаунта ВКонтакте к email не обязательна и при регистрации не требуется. Привязать ваш email к аккаунту можно в настройках аккаунта.

Как вы уже заметили, для проведения самой авторизации я использую не стандартный класс TIdHTTP, а TIdHTTPEx, который отличается тем, что более корректно принимает и отправляет печенья. TIdHTTPEx основан естественно на базе стандартного TIdHTTP. Для работы с TIdHTTPEx вам потребуется скачать модуль по этой ссылке , кинуть его в папку с будущим проектом, а затем объявить его в разделе uses.

Итак, если логин и пароль были введены правильно, то авторизация должна пройти без проблем. Чтобы проверить авторизировались ли мы, давайте пропарсим полученный исходный код страницы ВКонтакте, который я поместил в строковую переменную s. Определить успешность авторизации достаточно просто: для этого мы всего лишь поищем в той самой строке s слово ‘logout’, которое появляется в исходном коде в ссылке ‘Выйти’ (для выхода из аккаунта). Если это слово в строке s обнаружено, значит мы успешно авторизировались:
if Pos(‘logout’, s) <> 0 then
ShowMessage(‘Авторизация успешна’)
else
ShowMessage(‘Авторизация неудачна’);
Поместим этот код сразу же после кода с авторизацией.
Теперь, когда мы прошли авторизацию, мы можем получать различную информацию из аккаунта. Делается это достаточно простым парсингом строки s. Можно также зайти на другую страницу ВКонтакте, мы все равно будем авторизованны. Кстати парсить строки очень удобно при помощи библиотеки RegExpr.

Вполне сгодится для работы с любой социальной сетью или онлайн сервисом, которые предоставляют нам в распоряжение API. Но “ВКонтакте”, всё же из всех мне известных социальных сетей (за исключением, наверное, Twitter) является самой популярной в России, поэтому с ней и попробуем поработать, используя в работе Delphi XE6 . Ну, а чтобы было ещё более занимательно, попробуем написать небольшое приложение для Android . Кому потребуется приложение для Windows и VCL, думаю легко разберется в том, какие модули следует подключить в uses, а какие наоборот - убрать.

1. Создаем свое приложение “ВКонтакте” и пробуем авторизовать пользователя.

Для начала работы с API “ВКонтакте” необходимо создать новое приложение и получить необходимые данные для авторизации пользователей. Для этого заходим на страницу разработчиков и жмем вверху страницы кнопку “Создать приложение “:

Жмем кнопку “Подключить приложение” после чего вам предложат подтвердить свое действие, выслав на мобильный телефон проверочный код. После подтверждения Вам станет доступно изменение настроек приложения:

Переходим на вкладку “Настройки” и запоминаем ID приложения и Защищенный ключ :

Теперь можно переходить к Delphi XE6 и попробовать реализовать авторизацию пользователя.

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

Сейчас нам нужны будут следующие компоненты: TButton , TRESTClient , TRESTRequest , TRESTResponse и TOAuth2Authenticator . Клик по кнопке TButton будет вызывать процесс авторизации пользователя. Для начала, напишем процедуру авторизации пользователя.

Теперь необходимо вызвать форму для авторизации пользователя “ВКонтакте” и получить Access Token. Как это делать я достаточно подробно рассказывал в самоё первой статье по . Подключаем в uses модуль REST.Authenticator.OAuth.WebForm.FMX и определяем следующую переменную:

type TForm1 = class (TForm) [ ... ] private WebForm: Tfrm_OAuthWebForm; public { Public declarations } end ;

Напомню, что Tfrm_OAuthWebForm - это форма, на которой расположен компонент TWebBrowser с помощью которого пользователь заходит на сайт, чтобы ввести свои логин/пароль и получить доступ для приложения к каким-либо данным своего аккаунта. Соответственно нам, как разработчикам, эта форма необходима, как минимум, для того, чтобы “отловить” редирект на специальный URL, который будет содержать необходимый нам Access Token. Для управления редиректами у Tfrm_OAuthWebForm определено сразу два события:

type TOAuth2WebFormRedirectEvent = procedure (const AURL: string ; var DoCloseWebView : boolean ) of object ; property OnBeforeRedirect: TOAuth2WebFormRedirectEvent read FOnBeforeRedirect write FOnBeforeRedirect; property OnAfterRedirect: TOAuth2WebFormRedirectEvent read FOnAfterRedirect write FOnAfterRedirect;

Нам необходим обработчик события OnAfterRedirect. Напишем его:

type TForm1 = class (TForm) [ ... ] private WebForm: Tfrm_OAuthWebForm; procedure AfterRedirect(const AURL: string ; var DoCloseWebView : boolean ) ; [ ... ] public { Public declarations } end ; procedure TForm1. AfterRedirect (const AURL: string ; var DoCloseWebView: boolean ) ; var i: integer ; Str: string ; Params: TStringList; begin i: = pos ("#access_token=" , AURL) ; if (i> 0 ) and (OAuth2Authenticator1. AccessToken = EmptyStr) then begin Str: = AURL; Delete (Str, 1 , i) ; Params: = TStringList. Create ; try Params. Delimiter : = "&" ; Params. DelimitedText : = Str; OAuth2Authenticator1. AccessToken : = Params. Values [ "access_token" ] ; OAuth2Authenticator1. AccessTokenExpiry : = IncSecond(Now, StrToInt (Params. Values [ "expires_in" ] ) ) ; finally Params. Free ; end ; WebForm. Close ; end ; end ;

Таким образом, после редиректа мы проверяем есть ли в URL подстрока #access_token= и, если такая строка имеется, то вытаскиваем из URL данные по Access Token и время его жизни - значение параметра expires_in.

Обратите внимание, что данные для доступа к API мы записываем сразу в компонент TOAuth2Authenticator1

Теперь нам необходимо создать форму, определить обработчик OnAfterRedirect и в нужный момент показать эту форму пользователю.
Что касается создания/уничтожения объекта формы, то это можно сделать где вам удобно. Для примера, я создаю форму авторизации в OnCreate главной формы, а уничтожаю, соответственно, в OnDestroy:

procedure TForm1. FormCreate (Sender: TObject ) ; begin WebForm: = Tfrm_OAuthWebForm. Create (nil ) ; WebForm. OnAfterRedirect : = AfterRedirect; end ; procedure TForm1. FormDestroy (Sender: TObject ) ; begin WebForm. Free ; end ;

type TForm1 = class (TForm) [ ... ] private WebForm: Tfrm_OAuthWebForm; procedure AfterRedirect(const AURL: string ; var DoCloseWebView : boolean ) ; procedure Auth; public { Public declarations } end ; procedure TForm1. Auth ; begin OAuth2Authenticator1. AccessToken : = EmptyStr; OAuth2Authenticator1. ClientID : = cAppID; OAuth2Authenticator1. ClientSecret : = cAppKey; OAuth2Authenticator1. ResponseType : = TOAuth2ResponseType. rtTOKEN ; OAuth2Authenticator1. AuthorizationEndpoint : = cEndPoint; WebForm. ShowWithURL (OAuth2Authenticator1. AuthorizationRequestURI ) ; end ;

Здесь мы, опять же, используем компонент TOAuth2Authenticator - записываем в него данные нашего приложения (ID и секретный ключ), а также получаем URL, по которому необходимо перейти пользователю для авторизации.

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

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

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

Приступим
Процесс создания спамера заключается в написании кода в несколько этапов, на каждом из которых пишется какая-то часть спамера. Урок предполагает, что у вас уже есть базовые знания в языке программирования Delphi, и направлен скорее на демонстрацию работы с API ВКонтакте. Ничего кардинально сложного здесь нет, поэтому просто следуйте инструкции.
  • Приступаем к написанию кода. Для начала опишем авторизацию аккаунта. Для этого создадим процедуру 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;

    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;

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


    Ещё раз подчеркнём, что данный вариант программы требует от вашего аккаунта прав администратора для удаления поста со стены и публикации нового поста от имени группы.
  • Заключение
    Конечно, это ещё очень сырой вариант спамера. Для полноценной работы и его применения на постоянной основе его ещё стоит доработать, например:
    • Организовать работу спамера по таймеру бесконечно, чтобы пост публиковался и удалялся по кольцу автоматически, а не по нажатию на кнопку «Запуск » снова и снова.
    • Доработать удаление поста в группе. Так как наш вариант программы просто удаляет последний пост в группе, то может выйти, что перед удалением старого поста и публикацией нового на стену сообщества был добавлен новый пост (не через нашу программу), который удалится вместо старого рекламного поста.
    • Описать адекватное поведение программы при достижении в группе суточного лимита на добавление 50 постов на стену.
    • В случае, если цель использования спамера – реклама по определённым ключевым словам, по которым пост можно найти в поиске, можно научить программу при достижении суточного лимита на публикацию постов автоматически создавать новую группу для продолжения работы.
    • И многое другое.
    На самом деле, это только учебный урок, и программа действительно очень проста. В ней можно сделать множество функциональных доработок, чтобы превратить его в по-настоящему мощный инструмент. Но цель нашего урока – привести пример того, как в целом осуществляется работа в Delphi с API ВКонтакте для написания подобных программ.

    Готовый исходный код спамера можно скачать в прикреплении к материалу.

    В общем задумался я на досуге, что, было бы неплохо научиться постить с помощью делфей в одну из известнейших социальных сетей вКонтакте, задумался, да и решил попробовать свои силы))) Самое интересное, что такой простой авторизации на мой взгляд еще не было, но не будем о лирике…
    Кидаем на форму два эдита, и кнопку, которой дадим громкое название Login. Получим уродца как на скрине:

    Далее в uses дописываем IdHTTP
    Теперь в обработчике событий нажатия кнопки Login пишем следующее:

    Procedure TForm1.btnLoginClick(Sender: TObject); var http: TIdHTTP; Data: TStringList; Coocies: string; begin HTTP:= TIdHTTP.Create(Self); HTTP.HandleRedirects:= True; HTTP.Request.UserAgent:= "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1"; try HTTP.Get("http://login.vk.com/?act=login&q=1&al_frame=1&from_host=vkontakte.ru&email="+Edit1.Text+"&pass="+Edit2.Text); except end; Cookies:= SetCookies(HTTP.Response.RawHeaders.Text); if Pos("remix", Cookies)0 then ShowMessage("Авторизовались"); HTTP.Free; end;

    SetCookies — самописная функция выгребающая кукисы, т.к. кукиманагеру инди я не доверяю, в одном проекте уж больно он мне подосрал))))

    Function SetCookies(Raw: string): string; var PosCook: Integer; Cook: string; begin Cook:= ""; Cook:= "Cookie: "; PosCook:= Pos("Set-Cookie:", Raw); while PosCook0 do begin Delete(Raw, 1, PosCook-1); Cook:= Cook + Copy(Raw, 12, Pos(";", Raw)-11); Delete(Raw, 1, Pos(";", Raw)); PosCook:= Pos("Set-Cookie:", Raw); end; Result:= Cook+"remixlang=0;"; end;

    А теперь внимание, как вы видите, у меня не стоит проверка на появление капчи при логине, скажем так, это есть домашнее задание!)))

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

    Недавно писал себе программулину, сливающую резервные копии с фтп сервера на локальный тазик, и пришлось сесть подразобраться с Indy компонентом idFTP.

    Недавно задумался над тем что было бы неплохо постить автоматом новости на новостные порталы под чудесной CMS DLE, но для начала надо научиться авторизовываться автоматом, подумал я, и не долго думая достал запылившийся Delphi, запустил.

    Собственно возникла такая необходимость в одной из программ вытаскивать случайное слово из строки, самому писать было лень, гугление не принесло результатов, пришлось вспомнить былые годы и напрячь мозговые центры)))) Ничего сложного нет, алгоритм прост, хотя я и не настаиваю на его универсальности и простоте, кому как, но на скорую руку написал следующее, в двух словах по алгоритму, в строке выдергиваем случайный символ, и если это не пробел, то увеличиваем номер символа пока не получаем пробел (банально)))), после удалем из строки все символы, начиная с первого, заканчивая пробелом, далее копируем в результат все, начиная с первого символа, заканчивая пробелом, номер символа которого мы получим из Pos(‘

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

    Простая функция транслита в delphi. function Translit(s: string): string; const rus: string = ‘абвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ’; lat: array of string = (‘a’, ‘b’, ‘v’, ‘g’, ‘d’, ‘e’, ‘yo’, ‘zh’, ‘z’, ‘i’, ‘y’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘r’, ‘s’, ‘t’, ‘u’, ‘f’, ‘kh’, ‘ts’, ‘ch’, ‘sh’, ‘shch’, »», ‘y’, »», ‘e’, ‘yu’, ‘ya’, ‘A’, ‘B’, ‘V’, ‘G’, ‘D’, ‘E’, ‘Yo’, ‘Zh’, ‘Z’, ‘I’, ‘Y’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘R’, ‘S’, ‘T’, ‘U’, ‘F’, ‘Kh’, ‘Ts’, ‘Ch’, ‘Sh’, ‘Shch’, »», ‘Y’, »», ‘E’, ‘Yu’, ‘Ya’);

    Доброго времени суток уважаемые читатели! Сегодня мы с вами поговорим про API ВКонтакте, точней об использовании API в Delphi. Я буду использовать в этой статье Delphi 2010, в принципе вам ее использовать не обязательно, данный материал будет применим к любой версии Delphi. И так, сегодня мы с вами рассмотрим метод авторизации в VK.COM с помощью indy, настройку компонентов indy для работы с API VK. На самом деле все очень-очень просто и 100 раз находится в гуглояндексе и других поисковиках. Но большинство из них написаны еще под vkontakte.ru, API тогда естественно было другое. Ну да ладно, давайте начинать. Для начала нам понадобятся компоненты:

    • IdHTTP
    • IdSSLIOHandlerSocketOpenSSL
    • IdCookieManager

    Ну и стандартно:

    • TLabel
    • TEdit
    • TButton

    Настраиваем компоненты

    ВАЖНО! В папку с исполнительным файлом программы копируем эти DLL

    Они есть в архиве к этому материалу.
    И так, настройка компонентов для авторизации вконтакте завершена, необходимые DLL библиотеки скопированы, теперь напишем немного кода.

    Procedure TForm1.Button1Click(Sender: TObject); var TmpStr: string ; json: TJSONObject ; client_id ,client_secret: string ; Token, IdUser: string ; begin client_id:= Ваш ID полученный на сайте Вконтакте; client_secret:= Секрет от туда же; try TmpStr:= IdHTTP.Get("https://oauth.vk.com/token?grant_type=password&client_id="+client_id+"&client_secret="+client_secret+"&username="+EdtEmail.Text+"&password="+EdtPass.Text); except on E: Exception do begin MessageBox(Application.Handle, PChar(Format("Ошибка: %s",)), "Error", MB_ICONHAND); exit ; end; end; json:= TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(TmpStr),0) as TJSONObject; Token:= json.Get(0).JsonValue.ToString; Token:= StringReplace(Token, """, "", ); IdUser:= json.Get(2).JsonValue.ToString; end;

    я осознанно опускаю ту часть в которой обычно рассказывают про то как получить ID и секрет от вконтакте, это вы уже читали в предыдущих постах. У нас же будет только самое необходимое, не какого левого материала).
    Объясню код:
    Первое что вы наверное не видели в других уроках это json: TJSONObject, да да, я правильно разбираю ответы от сервера, так как того просит религия;). Другими словами это правильная переменная для хранения ответа от сервера на наш GET запрос. Инициализируется она просто: json:= TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(TmpStr),0) as TJSONObject; поля вытащить из нее тоже не составляет большого труда: Token:= json.Get(0).JsonValue.ToString;
    Токен и айди пользователя нужны для дальнейшего выполнения API функций, о которых мы поговорим с вами в следующих статьях.
    Ну собственно и все на этом по коду. Проверку авторизации не делаю, оставляю это вам)))