К основному контенту

C# и API ВКонтакте. Обращение к адресу API-сервиса путем создания HTTP-запроса (POST)

В статье C# POST. Отправляем запросы на адрес стороннего сервера я рассказал про метод, с помощью которого можно работать с различным API, принимающими POST запрос и возвращающими ответ в виде json или xml.

Сегодня я хочу написать, как я применял этот метод при работе с API  ВКонтакте. Для примера возьму задачу получения через API списка групп, в которых состоит пользователь.

В первую очередь необходимо зарегистристрировать наш сайт как приложение ВКонтакте.

Заходим по ссылке http://vk.com/editapp?act=create&site=1 и подключаем наш сайт.

Дальше задача  делится на две подзадачи, а именно: авторизация пользователя и обращение к API для получения списка групп.

Для авторизации мы пользователю предлагаем перейти по следующей ссылке:

http://api.vkontakte.ru/oauth/authorize? response_type=code&redirect_uri={0} &client_id={1} &scope={2} &display=page ,

redirect_uri - адрес страницы нашего сайта, куда будет возвращен пользователь после авторизации Вконтакте;
client_id - идентификатор нашего сайта, полученный при регистрации;
scope - уровень доступа, который мы запрашиваем у пользователя (подробно об уровнях доступа можно посмотреть по этой ссылке).

После того как пользователь перешел по ссылке и авторизовался ВКонтакте, он возвращается на наш сайт. При этом в обратном адресе содержится параметр code, который нам понадобится для получения Token-а.

Token  - это уникальный ключ, с помощью которого мы будем делать запросы к API.

Для получения токена мы должны сделать запрос, используя метод C# POST.
Адрес, по которому мы будем обращаться: https://api.vkontakte.ru/oauth/access_token
В качестве параметров передаем:

string.Format("client_id={0}&client_secret={1}&code={2}",  [идентификатор нашего сайта],  [секретный ключ нашего сайта, полученный при регистрации],  [код, полученный из параметра code])


Метод возвращает json строку. Я десериализую ее в класс TokenModel(создал для сериализации), в поле AccessToken содержится наш ключ.

Теперь все просто. Зная AccessToken мы можем делать любые запросы к API с одним условием: они должны удовлетворять уровню доступа, запрошенному у пользователя.

Для получения списка групп снова делаем запрос  используя метод C# POST, теперь в качестве адреса указываем https://api.vkontakte.ru/method/getGroups


В качестве параметров передаем

string.Format("{uid={0}&access_token={1}", [идентификатор пользователя, чьи группы мы хотим получить],  [полученный токен])


Как видите, ничего сложного. Следующий раз напишу про API Одноклассников.

Update: Пример взаимодействия с Odnoklassniki Rest API на C#
Update2: C# и API Facebook. Пример размещения записи на стене пользователя с помощью API. 

Комментарии

  1. Денис, а нет такого универсального готового класса, с помощью которого можно было организовать авторизацию через соц.сети? это было бы очень удобно :)

    ОтветитьУдалить
  2. Gurgen, большую работу в этом направлении сделали ребята из проекта http://www.dotnetopenauth.net/ Сейчас у них, если не ошибаюсь, помимо openId есть авторизация через twitter и facebook. Дальше можете расширять.

    ОтветитьУдалить
  3. Привет Денис!
    Делаю как ты пишешь, получаю код https://oauth.vk.com/authorize?client_id=3192659&redirect_uri=http://localhost:26672/API?provider=vkontakte&response_type=code
    Потом передаю на https://api.vk.com/oauth/access_token POST данные: client_id={0}&client_secret={1}&code={2} по методике описанной здесь http://rudevelop.spb.ru/2012/02/c-post.html.
    Доходит до (return request.GetResponse()) и выдает ошибку "Удаленный сервер возвратил ошибку: (400) Недопустимый запрос".
    P.S. Пробовал и на хостинге, та же самая ошибка

    ОтветитьУдалить
  4. Вячеслав, попробуйте вместо POST использовать GET метод. В качестве адреса использовать https://api.vk.com/oauth/access_token?client_id={0}&client_secret={1}&code={2}

    Про GET метод можно прочитать здесь.

    ОтветитьУдалить
  5. Денис, авторизация пользователя происходит посредством браузера?

    ОтветитьУдалить
  6. Денис, пожалуйста подскажи, мне нужно такое:

    На моем сайте посетитель вводит в форму сообщение и наживает отправить, затем эта запись появляется на стене пользователя в вконтакте.

    Если нет возможности вконтакте публиковать, то можно и facebook.

    Пожалуйста дай наводку.

    ОтветитьУдалить
    Ответы
    1. Нашел в сети такое на php:

      api(‘/’.$uid.’/feed’, ‘post’, array(
      ‘message’ => ‘Сообщение’,
      ‘name’ => ‘Имя’,
      ‘description’ => ‘Описание’,
      ‘caption’ => ‘Дополнительно’,
      ‘picture’ => ‘http://www.facebookapps.ru/fbp.jpg’,
      ‘link’ => ‘http://www.facebookapps.ru’
      ));

      ?>

      Но не знаю (там инструкции нет) что куда вводить.

      Удалить
    2. ВКонтакте закрыли возможность отправлять сообщение на стену через Веб, только через приложения. Раньше такая возможность была. Про Фейсбук смотри здесь http://rudevelop.spb.ru/2012/06/c-api-facebook-api.html

      Удалить
  7. Добрый день!
    Таки нельзя оставить запись на стене юзера, группы с веб-приложения asp.net mvc4 ???
    А можно ли получить e-mail юзера?

    ОтветитьУдалить

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

Популярные сообщения из этого блога

Пример взаимодействия с Odnoklassniki Rest API на C#.

Итак, как и обещал, продолжаю тему взаимодействия с различными API. В прошлый раз писал про  API ВКонтакте , сегодня напишу про API Одноклассников. Первое, что нам нужно сделать - это зарегистрироваться как разработчик на Одноклассниках. Сделать это можно по следующей ссылке  Форма регистрации разработчика приложений Получив права разработчика, необходимо зарегистрировать сайт как приложение. Подробно как это сделать можно прочитать  здесь После того как сайт будет зарегистрирован придет письмо, содержащее: Application ID: xxxxxx. Публичный ключ приложения: xxxxxxxxxxxxxxxxxxxxxxxxx. Секретный ключ приложения:  xxxxxxxxxxxxxxxxxxxxxxxxx. Ссылка на приложение: http://www.odnoklassniki.ru/games/xxxxx Используя эти данные можно начать работу с API. Для выполнения запросов к API пользователь должен авторизоваться в Одноклассниках. Добавляем на нашем сайте ссылку для авторизации пользователя: http://www.odnoklassniki.ru/oauth/authorize?client_id={0}&scope={1}&

IIS (Internet Information Services) и applicationHost.config. Изменение доменных привязок.

Сегодня затронем тему настроек IIS (Internet Information Services). Речь пойдет о версии IIS 7.0 (7.5). Допустим у вас есть  большое количество поддоменов, которые нужно привязать к сайту или быстро исправить на уже существующих привязках IP адрес. Стандартный интерфейс IIS позволяет редактировать привязки по одной, что в нашем случае не очень-то удобно. См. картинку Чтобы ускорить процесс, нужно вспомнить, что все доменные привязки (и не только, а и другие настройки) хранятся в конфигурационном файле applicationHost.config. Данный файл находится по адресу C:\Windows\System32\inetsrv\config\ В файле отредактировать привязки можно очень быстро.