Delphi. API ВКонтакте
Совсем недавно ВКонтакте разрешила Desktop-приложениям получать все необходимые права, чтобы полноценно работать с соц. сетью методами API. Фактически это было сделано, дабы дать возможность создать клиент для общения, который бы использовал не XMPP (Jabber), а только лишь API.
Здесь я покажу, как можно легко и просто создать своё Desktop-приложение и пользоваться всеми благами API ВКонтакте.
Для начала нужно указать ВК, что мы создали своё приложение и хотим им пользоваться. Для этого переходим на страницу добавления приложений и жмем на “Создать приложение”.

Дальше вводим название, выбираем “Desktop-приложение” и жмем “Перейти к загрузке приложения”.

Теперь в настройках приложения можно увидеть его ID. Это главное, что нам нужно для работы.

Теперь переходим к написанию программы. Я уже подготовил готовный исходник, в котором прописан ID моего приложения (можете пользоваться им или вписать свой).

Итак, в самом начале новому пользователю приложения необходимо добавить его в свои приложения и дать ему необходимые права (это достаточно сделать один раз для конкретного пользователя). Для этого вводим Логин, Пароль и с помощью компонента TWebBrowser переходим на страницу
http://vkontakte.ru/login.php?app=ID_вашего_приложения&layout=popup&type=browser&settings=15615
И добавляем приложения, а также даем ему все необходимые права.
Параметр settings здесь показывает, какие права запросит приложение при добавлении. Для получения всех возможных прав нужно выставить значение параметра 15615.
После добавления приложения мы может авторизоваться им.
После успешной авторизации ВК выдаст:
- mid – равен ID пользователя
- sid – идентификатор сессии
- secret – специально сгенерированный секрет сессии
Эти параметры пригодятся при использовании методов.
В данной программе можно воспользоваться четырьмя методами API. Первый из них – friends.get. Позволяет получить список друзей пользователя. И список сразу же будет парситься и записываться в ListView.
На примере этого метода покажу, как делать запрос. Для начала нужно высчитать подпись запроса (sig). Она представляет собой md5 следующей строки:
значение_midapi_id=ID_приложенияfields=поля_анкет_которые_хотите_получить_(sex, bdate и т.д.)format=XMLmethod=название_метода_(friends.get)v=3.0значение_secret
Здесь нужно обратить внимание, что все параметры, что находятся между значение_mid и значение_secret должны располагаться по алфавиту, т.е.:
- api_id=
- fields=
- format=
- method=
- v=
После этого сам запрос:
http://api.vkontakte.ru/api.php?api_id=ID_приложения&format=XML&method=название_метода_(friends.get)&sid=значение_sid&sig=значение_sid&v=3.0&fields=поля_анкет_которые_хотите_получить_(sex, bdate и т.д.)
В ответ сервер выдаст результат в формате XML со списком ID друзей и полями анкет, которые запросили. Остается лишь спарсить всё это.
Вторым методом является getProfiles. Получает информацию о пользователе по его ID и вписывает ее в соответствующие поля.
При клике на пользователе в списке ListView программа делает еще два запроса: getCities (получает название города по его ID) и getCountries (получает название страны по ее ID). А также запрашивается фото пользователя, которое выводится на форму (если такового нет, то выводится изображение из файла).
А тут можно почитать про авторизацию ВКонтакте.
Похожие записи из категории Статьи
Метки: api, delphi, indy, ВКонтакте, исходник, методы Рубрика: Статьи

Спасибо!
очень отличная статья!
[Ответить]
Пиши ещё статьи на тему делфи и контакта!
[Ответить]
http://api.vkontakte.ru/api.php?api_id=ID_вашего_приложения&format=XML&method=friends.get&sid='+sid+'&sig='+sig+'&v=3.0&fields=sex,bdate‘
вот как должно быть
[Ответить]
Zdez Bil Ya Reply:
августа 5, 2010 at 13:45
Спасибо, поправил)
[Ответить]
Отличная статья Роман. Ждём продолжения по данной тематике)
[Ответить]
Здравствуй Автор
Можно ли статью на сайт себе вылажит под вашим источником?
Заранее спасибо. Статья просто супер !
[Ответить]
Огромнейшее спасибо за статью! но у меня возник вопрос:
Хочу получить ссылку на фотографию максимального размера.
использую photos.get
А мне почему в возвращаемых данных не отдаёт ссылки на большие фото типа src_xbig и src_xxbig хотя они загружены в увеличенном размере!!
В чём может быть ошибка? Вот что я запрашиваю:
data:=TStringList.Create;
sig:=mid+’aid=’+Base[Ind].Id+’api_id=’+MyApiId+’format=JSONmethod=photos.getuid=’+InterestId+’v=3.0′+secret;
sig:=md5(sig);
data.Clear;
data.Add(‘aid=’+Base[Ind].Id);
data.Add(‘api_id=’+MyApiId);
data.Add(‘format=JSON’);
data.Add(‘method=photos.get’);
data.Add(‘sid=’+sid);
data.Add(‘uid=’+InterestId);
data.Add(‘sig=’+sig);
data.Add(‘v=3.0′);
log:=IdHTTP1.Post(‘http://api.vkontakte.ru/api.php',data);
[Ответить]
Алексей, такой же баг у меня в open api, не отдаются src_xbig, до сих пор не исправили, жесть
[Ответить]
Да без контакта как без рук, даже программки можно под него писать, наконец то)))
[Ответить]
Как сделать запрос на то что-бы после успешной Авторизации появлялась фотография человека и его имя?
[Ответить]
Zdez Bil Ya Reply:
января 23, 2011 at 22:10
Видите, фотография появляется в демо? А в поле появляется имя и фамилия
[Ответить]
пробовал ничего не получаеться создает еще 1 сервис и все уже все перебрал исходники
админ напиши в асю или кто сможет помочь 421755500
[Ответить]
Автор нужна помощь, плз) в вашей программе..
IdHTTP1.ConnectTimeout:=30000;
[Error] Unit1.pas(152): Undeclared identifier: ‘ConnectTimeout’
[Error] Unit1.pas(333): Undeclared identifier: ‘HashStringAsHex’
[Fatal Error] Project1.dpr(6): Could not compile used unit ‘Unit1.pas’
[Ответить]