Главная » 2011 » Февраль » 20 » API Вконтакте - Авторизация
16:12
API Вконтакте - Авторизация
Многие начинающие программисты задумываются о том, как написать приложение для работы с популярной социальной сетью Вконтакте. Попытки "гуглить" или спрашивать на соответствующих форумах в интернете в частых случаях никчему не приводят.

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

Этап 1. Регистрация нашего приложения в системе.
Для того, чтобы наше приложение полнофункционально работало нам необходимо зарегистрировать его на сайте. Для этого перейдем по следующей ссылке:

Справа на этой странице мы увидим кнопку "Создать приложение", нажимаем на нее. Далее вводим Название нашего приложения и Тип приложения ставим Desktop-приложение. Описание уже по усмотрению разработчика.
Нажимаем на кнопку "Перейти к загрузке приложения". Введите код с картинки и подтвердите нажатием на кнопку "Отправить". Если «капча» была введена правильно, то появится информация (правила) по размещению приложений в ВК.
Если Вы согласны с данными условиями, то необходимо на данной странице нажать на кнопку «Я согласен с условиями», после чего появится страница вашего приложения, для которого Вы сможете написать описание и загрузить логотип Вашего приложения.
Справа есть меню по управлению Вашим приложением. Нам на данный момент необходим пункт «Настройки» – нажимаем и видим появляется новая страница, на которой расположены id приложения и защищенный ключ, эти данные запишите или потом скопируете.
Далее на Вашей страничке есть пункт приложения, если Вы нажмете на них, то увидите на данной странице пункт Администрирование – это означает, что Вы в ВК зарегистрировали свое приложение и можете редактировать его настройки, а также смотреть все данные, то есть например id-приложения. Это мы делали для того, чтобы без проблем могли пользоваться сервером API ВК.

Этап 2. Авторизация пользователя.
И так мы подошли к самой важной части данной статьи. Теперь, когда у нас зарегистрировано приложение мы можем полноценно писать наше desktop-приложение. Приступим.

Запускаем среду разработки Delphi и создаем новый проект. На форму кидаем следующие компоненты:

TEdit - 2 шт.
TButton - 1 шт.
TLabel - 3 шт.
TidHTTP - 1 шт.

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

http://vkontakte.ru/login.php

Для начала мы получим запрос GET-ом для того, чтобы получить необходимые данные для отправки запроса POST на страницу

vkontakte.ru/login.php

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

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

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

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


Более подробно про авторизацию приложения Вы сможете прочитать на сайте ВК. Далее, когда мы получили нужный нам параметр с этой страницу, а получали мы значение app_hash путем парсинга страницы полученной, нам необходимо отправить POST запрос на страницу http://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('http://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('http://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('http://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 – Идентификатор сессии


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

С Уважением, Кодер.

Часть материала была позаимствована из статьи Andrey53 в целях збежания многописания.
Категория: Программирование | Просмотров: 1905 | Добавил: Кодер | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]