Delphi работа с API Вконтакте (vkontakte) часть 2

Опубиковано: 15.07.2010 г., автор: , просмотров: 55046

    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 человек ! Подписаться

    Ну, а если вы ищете где купить Explay Infinity , тогда обращайтесь в этот интернет магазин.

    Похожие материалы

    Последние из рубрики

    Teratox 18 Jan 2013 в 00:00 #
    Сколько перерыл в интернете исходников для контакта, ни один не работает, все хлам!
    А ругается компилятор на AsHEX потому что, тот кто писал код не предупреждал о том что может у других какой-то другой компилятор.
    Выбросьте эту функцию к чертовой матери она не рабочая, вставить сюда не получается комментарии не пускают, но погуглите, ответ есть.
    max 31 Jul 2012 в 00:00 #
    извиняюсь...так как я начинающий программер...хотелось бы пояснить для чего этот коддинг ВК?)
    Иван 10 Jan 2012 в 00:00 #
    1.Post запрос по адресу :
    Иван 10 Jan 2012 в 00:00 #
    Старый метод работы с API
    Не работает он у меня
    Алексей 08 Dec 2011 в 00:00 #
    А можно такоеже толь для МойМир Api

    ОтменитьДобавить комментарий