Проект VK API в Delphi. Авторизация приложения в сети

4 минуты на чтение

Итак, давайте вспомним первый пост по VK API в Delphi, в котором я описал как зарегистрировать свое приложение в сети, чтобы в дальнейшем его можно было использовать. Теперь нам необходимо авторизировать приложение в сети и получить секретный код и значение sid, которые в дальнейшем нам пригодятся для того, чтобы получать список друзей пользователя, список фотографий, альбомов и так далее. Что нам потребуется на данный момент

  • Tedit — 2 шт
  • TButton
  • TLabel — 3 шт
  • TidHTTP
  • ну и я поставил еще TPageControl

Для того, чтобы получить данные сессии для нашего приложения, нам необходимо отправить запрос на

https://vkontakte.ru/login.php.

Для начала мы получим запрос GET-ом для того, чтобы получить необходимые данные для отправки запроса POST на страницу vkontakte.ru/login.php. Для того, чтобы получить запрос GET нам необходимо получить следующую страницу ввида

https://vkontakte.ru/login.php?app=1918788&layout=popup&type=browser&settings=130

То есть мы должны заполнить данными наш URL для дальнейшего получения нужной нам информации.  Где

  • app — идентификатор приложения, который вы получили при регистрации, мой идентификатор равен — 1918788
  • layout — указывает тип дизайна, получаемой страницы
  • type — указывает каким образом передается значение сессии
  • settings — битовая маска доступа настроек приложения к вашей странице.

Более подробно про авторизацию приложения Вы сможете прочитать на сайте ВК. Далее, когда мы получили нужный нам параметр с этой страницу, а получали мы значение app_hash путем парсинга страницы полученной, нам необходимо отправить POST запрос на страницу https://login.vk.com/ после чего получить новое значение app_hash и только потом отправить POST запрос на страницу vkontakte.ru/login.php, где мы уже будем получать данные сессии путем парсинга.

Перед началом всей этой работы я написал функцию парсинга вот такую

function Pars(str:String;str_begin:String;str_end:String;count:integer):String;
begin
   Delete(str,1,pos(str_begin,str)+length(str_begin));
   Delete(str,pos(str_end,str)-count,length(str));
   Pars:=str;
end;

И объявил вот такие вот переменные

PostVK:TStringList;
  htmlVK:WideString;
  logVK,app_nash:String;

Итак на событие onClick кнопки получить я написал следующий код

procedure TForm1.ButtonGoClick(Sender: TObject);
begin
   try
    logVK:=IdHTTP1.Get('https://vkontakte.ru/login.php?app=1918788&layout=popup&type=browser&settings=15615');
    PostVK:=TStringList.Create;
    PostVK.Clear;
    PostVK.Add('act=login');
    PostVK.Add('app=1918788');
    PostVK.Add('app_hash='+Pars(logVK,'app_hash = ',';',1));
    PostVK.Add('email='+EditLogin.Text);
    PostVK.Add('pass='+EditPass.Text);
    PostVK.Add('permanent=1');
    logVK:=IdHTTP1.Post('https://login.vk.com/',PostVK);
    PostVK.Clear;
    PostVK.Add('s='+Pars(logVK,'value=','/>',2));
    PostVK.Add('act=auth_result');
    PostVK.Add('m=4');
    PostVK.Add('parmanent=1');
    PostVK.Add('expire=""');
    PostVK.Add('app=1918788');
    PostVK.Add('app_hash='+Pars(logVK,'app_hash" value=','"',0));
    logVK:=IdHTTP1.Post('https://vkontakte.ru/login.php',PostVK);
    LabelSid.Visible:=True;
    LabelMid.Visible:=True;
    LabelSecret.Visible:=True;
    LabelMid.Caption:=Pars(logVK,'mid"',',',0);
    LabelSid.Caption:=Pars(logVK,'sid":','",',0);
    LabelSecret.Caption:=Pars(logVK,'secret":','",',0);
    PostVK.Free;
   except
    on e:Exception do
     PostVK.Free;
   end;
end;

То есть все как и говорил, получаем сначала GET-ом, а затем 2 POST-запроса, чтобы наконец-то добраться до нашей сессии и пропарсив ее, мы получим нужные нам данные — это

  • expire — Время истечения сессии в формате UNIX
  • mid — ID пользователя в ВКонтакте
  • secret — Специально сгенерированный секрет сессии
  • sid — Идентификатор сессии

Эти данные в дальнейшем понадобятся нам для получение более нужной информации с ВК. Но это в следующей статье и готовится модуль, который одной функцией будет получать все эти данные для дальнейшей работы.

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Не так давно наткнулся на сайте VR-ONLINE на одну очень интересную статью, где автор описывал очень интересный проект для Delphi. Проект носит название Raudus. Raudus — это проект, который позволяет создавать интернет-приложения (RIA) — эти интернет приложения...
Здравствуйте, давненько я не писал про проект VK API в Delphi, на этот раз хочу продолжить серию статей про данный проект, тем более, что еще достаточно много не рассмотрено функций по работе с VK API. В последних статьях про VK API в Delphi мы рассмотрели фун...
Вот хочу запустить проект VK API в Delphi(Вконтакте API в Delphi), в связи с тем, что сам сайт вконтакте открыл возможно обращаться к серверу API Vkontakte из Desktop-приложений. Довольно интересно, так как можно написать свой IM-клиент для контакта и общаться...