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

Ми продовжуємо займатися написаннямDelphi програми для роботи зAPI vkontakte. Минулого разу ми зупинилися на тому, що почали створювати запит для виведення розширеної інформації про користувача. Запит вийшов наступним:

http://api.vkontakte.ru/api.php? api_id =1905253& format =XML& method =getUserInfoEx

Відразу хочу сказати, що такий запит не працюватиме, т.к. ми ще не додали парочку дуже важливих параметрів, а саме параметри sig і sid.

Впевнений, що багато хто з вас мало що зрозумів з вище написаного), тому спробую все розжувати і покласти в рот.

У нашому випадку sig або підпис запиту виглядатиме приблизно так:

IDкористувачаВконтакті api_ >IDДодатки format=XMLmethod=getUserInfoExu >IDкористувачаВконтакте v=3.0 СекретСесії

Розберемо все на пальцях:

  • Замість IDкористувачаВконтакті ми підставимо свій ID (дізнатися його можна відвідавши сторінку http://vkontakte.ru/settings.php , у розділі Адреса вашої сторінки => Ваш номер: буде вказано цей самий ID ID>додатки ми підставимо >IDкористувачаВконтакті.
  • v=3.0 означає, що версія api дорівнює 3.0
  • Завершує все секрет сесії чи secret.

Значення всіх змінних нам відомі, крім останньої – Секрет Сесії.

http://vkontakte.ru/api/login_success.html#session=%7B%22 mid %22%3A63790444%2C%22 sid %22%3A%22756d0c7c91db66f66f82dba3cb5b6729 2%2C%22 secret % 22%3A%224c63d7e10d%22%2C%22 expire %22%3A1279018989%2C%22 sig %22%3A%228a5ea3f9ee8c57781782d402d6eea5ed2

Отже, кидаємо на форму ще один компонент Button (у мене він буде називатися button2) і компонент Label обидва із закладки Standard

Переходимо в код і на самому початку післяключового слова var створюємо 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;

http://vkontakte.ru/api/login_success.html#session=%7B%22 mid %22%3A63790444%2C%22 sid %22%3A%22756d0c7c91db66f66f82dba3cb5b6729 2%2C%22 secret % 22%3A%224c63d7e10d%22%2C%22 expire %22%3A1279018989%2C%22 sig %22%3A%228a5ea3f9ee8c57781782d402d6eea5ed2

Потім за допомогою стандартних функцій роботи з рядком Pos, Copy, Delete ми дістаємо з рядка значення змінної secret, це значення записуємо в змінну Stroka3 і виводимо її в компонент Label1. В принципі, все просто, головне тут не заплутатися.

Все, із секретом сесії ми розібралися, спробуємо підставити всі параметри:

Було: IDкористувачаВконтакті api_ >IDДодатки format=XMLmethod=getUserInfoExu >IDкористувачаВконтакті v=3.0 СекретСесії

Стало: 63790444 api_ >1905253 format=XMLmethod=getUserInfoExu >63790444 v=3.0 stroka3

Тут замість 63790444 підставляєте ваш ID вконтакті, замість 1905253 id вашої програми. Але, це ще не все, отриманий рядок ми повинні кодувати в MD5

Для цього після ключового слова uses до списку додаємо новий модуль, який називається IdHashMessageDigest Далі створимо функцію длякодування у md5. У коді майже на самому верху знаходимо ключове слово private після якого пишемо:

function md5(s: string): string;

Потім натискаємо комбінацію клавіш Ctrl+Shift+C В результаті чогоDelphi створює заготовочку для нашої функції, яка, як ви вже напевно помітили називається MD5. Отже зараз між begin end у нашій заготовочці ми напишемо код, який кодуватиме наш рядок у md5:

Result := ''; з TIdHashMessageDigest5.Create do try Result := AnsiLowerCase(AsHex(HashValue(s))); finally Free; end;

Тепер у такий же спосіб дістанемо від туди параметр 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_ >+stroka3; //Підпис запиту + секрет сесії sig: = md5 (sig); // кодуємо підпис запиту, за допомогою раніше створеної функції Md5 WebBrowser1.Navigate('http://api.vkontakte.ru/api.php?api_>'&sig='+sig+'&u ;);

* Скрізь природно замість 63790444 підставляєте ваш ID вконтакті, замість 1905253 id вашої програми.

А на початку статті цей запит виглядав так:

'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&s

Після чого ми додали параметр sig та його значення, яке зберігається у змінній sig. У результаті вийшло:

'http://api.vkontakte.ru/api.php? api_id =1905253& format =XML& method =getUserInfoEx&s

Ну і нарешті додали параметри uids який дорівнює ID користувача вконтакті і параметр v який дорівнює версії API вконтакті, вийшло:

'http://api.vkontakte.ru/api.php? api_id =1905253& format =XML& method =getUserInfoEx&s & sig='+sig+'&u >

Ось у принципі і все запускаємо проект, натискаємо по черзі, з початку першу кнопку, після того, як у компоненті webbrowser з'явився напис login succes натискаємо другу, а потім третю кнопку. В результаті чого компонент WebBrowser вивів результат нашого запиту у форматі XML. Вам залишається лише дістати від туди необхідні параметри і використовувати їх у своїй програмі.

P.S. Хочете вперед решти відвідувачів сайту отримувати свіжі Відео уроки, Аудіо подкасти, статті по Delphi. Участь у конкурсах і поступово вливатися в нашу команду?! Тоді зараз підписуйтесь на безкоштовну мультимедійну розсилку сайту delphiexpert.ru Нас вже більше ніж 5500 осіб! Підписатися

Ну, а якщо ви шукаєте купити Explay Infinity , тоді звертайтеся в цей інтернет магазин.