Delphi работа с API Вконтакте (vkontakte) часть 2
Мы продолжаем заниматься написанием Delphi приложения для работы с API vkontakte. В прошлый раз мы остановились на том, что начали создавать запрос для вывода расширенной информации о пользователе. Запрос получился следующим:
http://api.vkontakte.ru/api.php?api_id=1905253&format=XML&method=getUserInfoEx
Сразу хочу сказать, что такой запрос работать не будет, т.к. мы еще не добавили в него парочку очень важных параметров, а именно параметры sig и sid.
Итак, начнем с первого параметра - sig, необходим он для создания подписи запроса. Вычисляется он следующим образом: берем параметр mid или id пользователя вконтакте. Затем берем все необходимые параметры и их значения, которые хотим передавать, и выставляем их в алфавитном порядке. В конец добавляется параметр secret - или секрет сессии, получили мы его с вами ранее, когда проходили процедуру авторизации. После чего полученную строку кодируем в MD5
Уверен, что многие из вас мало что поняли из выше написанного), поэтому попытаюсь всё разжувать и положить в рот...
В нашем случае sig или подпись запроса будет выглядеть примерно так:
IDпользователяВконтактеapi_id=IDПриложенияformat=XMLmethod=getUserInfoExuids=IDпользователяВконтактеv=3.0СекретСессии
Разберем все на пальцах:
- Вместо IDпользователяВконтакте мы подставим свой ID (узнать его можно посетив страницу http://vkontakte.ru/settings.php , в разделе Адрес вашей страницы => Ваш номер: будет указан этот самый ID, так же его можно взять из параметра mid)
- api_id - вместо IDПриложения мы подставим ID нашего приложения, который получили ранее при регистрации. В моем случае это 1905253
- format - мы указываем формат получаемых данных JSON или XML как вы видете я поставил здесь XML
- metod - какой API метод мы будем использовать, в нашем случае это getUserInfoEx
- uids - сюда опять подставляем IDпользователяВконтакте.
- v=3.0 означает, что версия api равна 3.0
- Завершает все секрет сессии или secret.
Значение всех переменных нам известны, кроме последней - Секрет Сессии.
Как вы помните, после успешной авторизации нас переадресовывают на http://vkontakte.ru/api/login_success.html Хотя полностью адрес выглядит примерно так:
http://vkontakte.ru/api/login_success.html#session=%7B%22mid%22%3A63790444%2C%22
sid%22%3A%22756d0c7c91db66f66f82dba3cb5b67be6629d2295f878d9a70210836%22%2C%22
secret%22%3A%224c63d7e10d%22%2C%22expire%22%3A1279018989%2C%22
sig%22%3A%228a5ea3f9ee8c57781782d402d6eea5ed%22%7D
Сейчас из этой запутанной строчки нам нужно достать значение переменной secret в моем случае оно равно 4c63d7e10d, но учтите, что при каждой новой авторизации значение будет изменятся и у вас оно может быть совсем другим!
Итак, кидаем на форму еще один компонент Button (у меня он будет называться button2) и компонент Label оба с закладки Standard
Переходим в код и в самом начале после ключевого слова var cоздаем 3 глобальные переменные stroka2,stroka3, sig типа string;
var
stroka2,stroka3, sig: string;
После чего создаем обработчик событий OnClick на новой кнопке. Перед ключевым словом begin также создадим 2 переменные типа integer и одну типа string
var
start2,start3:integer;
URL:string;
Далее, между begin end пишем вот такой код:
URL:=WebBrowser1.LocationURL;
start3:=Pos('secret%22%3A%22',URL);
stroka3:=Copy(URL, start3+15, 900);
Delete(stroka3, Pos('%22%2C%22expire',stroka3) , 5900);
Label1.caption:=stroka3;
Здесь мы в переменную URL заносим, то что находится в настоящей момент в адресной строке компонента WebBrowser1, т.е. вот эту строчку:
http://vkontakte.ru/api/login_success.html#session=%7B%22mid%22%3A63790444%2C%22
sid%22%3A%22756d0c7c91db66f66f82dba3cb5b67be6629d2295f878d9a70210836%22%2C%22
secret%22%3A%224c63d7e10d%22%2C%22expire%22%3A1279018989%2C%22
sig%22%3A%228a5ea3f9ee8c57781782d402d6eea5ed%22%7D
Затем с помощью, стандартных функций работы со строкой Pos, Copy, Delete мы достаем из строки значение переменной secret, это значение записываем в переменную Stroka3 и выводим её в компонент Label1. В принципе все просто, главное тут не запутаться.
Все, с секретом сессии мы разобрались, попробуем подставить все параметры:
Было:
IDпользователяВконтактеapi_id=IDПриложенияformat=XMLmethod=getUserInfoExuids=IDпользователяВконтактеv=3.0СекретСессии
Стало:
63790444api_id=1905253format=XMLmethod=getUserInfoExuids=63790444v=3.0stroka3
Тут вместо 63790444 подставляете ваш ID вконтакте, вместо 1905253 id вашего приложения.
Но, это еще не всё, полученную строку мы должны кодировать в MD5
Для этого после ключевого слова uses в список добавляем новый модуль, который называется IdHashMessageDigest
Далее создадим функцию для кодирования в md5. В коде почти в самом верху находим ключевое слово private после которого пишем:
function md5(s: string): string;
Затем нажимаем комбинацию клавиш Ctrl+Shift+C В результате чего Delphi создает заготовочку для нашей бедующей функции, которая как вы уже наверно заметили называется MD5. Итак сейчас между begin end в нашей заготовочке мы напишем код, который будет кодировать нашу строку в md5:
Result := '';
with TIdHashMessageDigest5.Create do
try
Result := AnsiLowerCase(AsHex(HashValue(s)));
finally
Free;
end;
Использовать эту функцию мы будем чуть позже, а сейчас разберемся с параметром sid - который хранит в себе идентификатор сессии. После успешной авторизации, этот параметр так же будет браться из адресной строки компонента WebBrowser.
Итак, вновь переходим в обработчик событий OnClick на второй кнопке, напомню вам что тут мы уже скопировали адресную строку компонента webbrowser в переменную URL, когда извлекали из неё параметр secret (секрет сессии)
Теперь таким же способом достанем от туда параметр sid, для этого в конце дописываем такой код:
start2:=Pos('sid%22%3A%22',URL);
stroka2:=Copy(URL, start2+12, 500);
Delete(stroka2, Pos('%22%2C%22secret',stroka2) , 5900);
Тут опять, все тоже самое.... С помощью, стандартных функций работы со строкой Pos, Copy, Delete мы достаем из неё значение переменной sid, это значение записываем в переменную Stroka2
Мозги еще не закипели ?! Ладно осталось совсем чуть-чуть.
Кидаем на форму еще один компонент Button с закладки Standard и сразу же создаем на нем обработчик событий OnClick, в котором прописываем следующий код:
sig:='63790444api_id=1905253format=XMLmethod=getUserInfoExuids=63790444v=3.0'+stroka3; //подпись запроса + секрет сессии
sig:=md5(sig); // кодируем подпись запроса, при помощи ранее созданной функции Md5
WebBrowser1.Navigate('http://api.vkontakte.ru/api.php?api_id=1905253&format=XML&method=getUserInfoEx&sid='+stroka2+
'&sig='+sig+'&uids=63790444&v=3.0');
* Везде естественно вместо 63790444 подставляете ваш ID вконтакте, вместо 1905253 id вашего приложения.
В последней строке мы полностью сформированный запрос и посылаем его по адресу по адресу: http://api.vkontakte.ru/api.php
А в начале статьи этот запрос выглядел так:
'http://api.vkontakte.ru/api.php?api_id=1905253&format=XML&method=getUserInfoEx'
Затем мы добавили к нему параметр sid и его значение, которое хранится в переменной stroka2. В итоге получилось это:
'http://api.vkontakte.ru/api.php?api_id=1905253&format=XML&method=getUserInfoEx&sid='+stroka2+'
После чего мы добавили параметр sig и его значение, которое хранится в переменной sig. В итоге получилось:
'http://api.vkontakte.ru/api.php?api_id=1905253&format=XML&method=getUserInfoEx&sid='+stroka2+'&sig='+sig+'
Ну и наконец добавили параметры uids который равен id пользователя вконтакте и параметр v который равен версии API вконтакте, получилось:
'http://api.vkontakte.ru/api.php?api_id=1905253&format=XML&method=getUserInfoEx&sid='+stroka2+'&
sig='+sig+'&uids=63790444&v=3.0'
Вот в принципе и все запускаем проект, нажимаем поочередно, с начала первую кнопку, после того как в компоненте webbrowser появилась надпись login succes нажимаем вторую, а затем третью кнопку. В результате чего в компонент WebBrowser вывелся результат нашего запроса в формате XML. Вам остается лишь только достать от туда необходимые параметры и использовать их в своей программе.
Еще раз повторюсь, что данная статья описывает саму суть работы с API вконтакте и не является конечным решением поставленной задачи. Поняв основные моменты, вы всегда сможете самостоятельно доработать имеющийся исходник. На этом у меня все, удачного вам кодинга друзья !)
Скачать исходник Delphi Api Vkontakte
Delphi работа с API Вконтакте (vkontakte) часть 21
P.S. Хотите вперед всех остальных посетителей сайта получать свежие Видео уроки, Аудио подкасты, статьи по Delphi.
Участвовать в конкурсах и постепенно вливаться в нашу команду ?!
Тогда прямо сейчас подписывайтесь на бесплатную мультимедийную рассылку сайта delphiexpert.ru
Нас уже больше чем 5500 человек ! Подписаться
Похожие материалы
- Delphi работа с vkontakte API
- Delphi исходники - игра Морской бой
- Погружение в Indy, редкая книга delphi
- htmlhelp - Дополнение
- ASPack - Компрессор исполняемых файлов
Последние из рубрики
- Видео урок ini файлы в Delphi
- Видео урок - Rave Report и Delphi печатаем таблицы
- Delphi работа с vkontakte API