Подключение к api vk

Данная публикация написана как простая инструкция для себя, на память, чтобы не забыть.

Предложенный вариант использовался для авторизации через токен VK в серверном приложении.

Для начала создадим метод отправки HTTP запроса и получения ответа от сервера:

/// /// Отправляем запрос на получение /// /// /// private static string GetRequest(string host, string req) < string str = «»; var Vk = new HttpClient(); Vk.DefaultRequestHeaders.Add(«Connection», «close»); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(req); request.UseDefaultCredentials = true; request.PreAuthenticate = true; request.Credentials = CredentialCache.DefaultCredentials; request.Method = «GET»; request.Host = host; request.UserAgent = «RM»; request.ContentType = «application/x-www-form-urlencoded»; request.KeepAlive = false; using (HttpWebResponse responsevk = (HttpWebResponse)request.GetResponse()) using (var stream = responsevk.GetResponseStream()) using (var streamReader = new StreamReader(stream, Encoding.UTF8)) < str = streamReader.ReadToEnd(); >return str; >

Раскрутка группы в ВК: Как подключить CallBack API и не потерять клиентов ВКонтакте


Теперь сами методы для работы с API VK

Получение разового токена VK для работы:

/// /// Получение разового токена с сервера для работы. /// /// /// public static void VK_GetServerToken(string client_id, string client_secret) < string str = GetRequest(«oauth.vk.com», «https://oauth.vk.com/access_token?client_id=» + client_id + » + client_secret + «grant_type=client_credentials»); dynamic stuff = JsonConvert.DeserializeObject(str); string token = stuff.access_token; DbInMemory.VK_TOKEN = token; >

Проверка авторизации пользователя VK:

/// /// Проверка авторизации пользователя через VK /// /// public static Social.SocialProfile VK_GetUserAutorization(string token) < Social.SocialProfile profile = new Social.SocialProfile(); string str = GetRequest(«api.vk.com», «https://api.vk.com/method/secure.checkToken?token=» + token + «client_secret=»+DbInMemory.VK_CLIENT_SECRET+»+DbInMemory.VK_TOKEN); dynamic stuff = JsonConvert.DeserializeObject(str); try < long d = stuff.response.date; var dt = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(d).ToLocalTime(); d = stuff.response.expire; var expire = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(d).ToLocalTime(); >catch (Exception ex) < Program.Logger.Error(ex, ex.Message); >try < profile.IsAutorized = stuff.response.success; profile.Ident = stuff.response.user_id; profile = VK_GetUserData(token, profile); >catch (Exception ex) < Program.Logger.Error(ex, ex.Message); >return profile; >

Получение данных о пользователе из соц-сети VK:

/// /// Получение данных о пользователе из соц-сети VK /// /// public static Social.SocialProfile VK_GetUserData(string token, Social.SocialProfile profile) < try < string str = GetRequest(«api.vk.com», «https://api.vk.com/method/users.get?access_token=» + token + «v=5.85»); dynamic stuff = JsonConvert.DeserializeObject(str); profile.FirstName = stuff.response[0].first_name; profile.LastName = stuff.response[0].last_name; profile.Ident = stuff.response[0].id; //string photo_max = stuff.response[0].photo_max; //string bdate = stuff.response[0].bdate; profile.Details = str; >catch(Exception ex) < Program.Logger.Error(ex, ex.Message); profile.IsAutorized = false; >return profile; >

Источник: babakov.net

Уроки PHP / Подключение к API VK

Аутентификация через «ВКонтакте»

Доброго времени суток, сегодня речь пойдет об авторизации пользователей на вашем сайте через социальную сеть «Вконтакте». Данный способ авторизации довольно популярен и его любят пользователи, ведь подобное решение избавляет от необходимости заполнять кучу полей формы, придумывать и запоминать пароль, ждать письма, подтверждать авторизацию на сайте. Ну а мы не заморачиваемся с проверками регулярных выражений, экономим место на хостинге и получаем сразу заполненный профиль пользователя с аватаркой, которую, к слову, редко кто спешит добавлять.

Итак, приступим к технический части. Для этого мы создадим и настроим новое приложение в социальной сети. После чего напишем класс, который будет взаимодействовать с API «ВКонтакте»: устанавливать соединение и получать данные о пользователе. В результате проделанных действий, мы сможем авторизовать пользователя у себя на сайте.

Создаём новое приложение «ВКонтакте»

Перед тем, как писать код, нам нужно зарегистрировать новое приложение. Делается это просто, заходим в свой профиль, переходим в раздел приложения и в нем кликаем на кнопку «Управление». В этом разделе вы увидите список всех приложений, которыми вы пользуетесь и кнопку «Создать приложение», жмём по ней. Заполняем название и выбираем пункт «Веб-сайт».

sozdanie-novogo-prilozheniya-vkontakte

После этого появятся два новых поля, которые также заполняем и жмём «Подключить сайт». В следующем окне вам останется подтвердить регистрацию.

podtverzhdenie-registratsii-prilozheniya-vkontakte

Вот так просто и быстро регистрируется новое приложение «ВКонтакте». Теперь переходим в настройки и копируем ID приложения и защищенный ключ в блокнот. На этом работа с социальной сетью заканчивается.

nastrojka-prilozheniya-vkontakte

Пишем класс для работы с API

Перед тем, как написать класс, мы определим его логику, которая будет содержать 3 свойства и 3 метода (включая конструктор).

Еще по теме:  Как посмотреть Вконтакте понравившиеся публикации

class VKAuth < public $settings = array(); public $auth_status = false; public $user_info = array(); public function __construct($settings)< >public function auth($code) < >public function get_link() < >>

  • settings – отвечает за хранение настроек для подключения к API;
  • auth_status – статус аутентификации, если пользователь пройдет, то значение изменяться на true;
  • В конструкторе мы будем принимать настройки для подключения, и сохранять в переменную settings;
  • auth – метод, который будет производить соединение с API и вытягивать нужные нам данные (принимает код для получения ключа доступа);
  • get_link – метод генерирующий путь ссылки для аутентификации.

Теперь давайте рассмотрим каждый из методов подробно:

Как и было раннее оговорено, мы принимаем настройки и сохраняем их в переменную settings. Для надёжности проверяем наличие их при помощи функции isset().

public function __construct($settings)< if(isset($settings[«client_id»], $settings[«client_secret»], $settings[«redirect_uri»]))< $this->settings = $settings; > >

С начала мы проверяем наличие переменных code и settings. Если всё нормально, то формируем первый запрос, который будет состоять из массива данных, обёрнутых в две функции.

  • urldecode() – декодирует %## символы в url;
  • http_build_query() – генерирует строку запроса.

После того, как мы обратимся по сформированному адресу, нам в ответ придет json строка. Для удобства, получаемые данные мы преобразуем в массив, делается это путем передачи у функции json_decode() второго параметра true. Данный массив будет содержать три ячейки: access_token, expires_in и user_id.

Идём дальше, проверяем наличие токена и формируем новый запрос на получение данных пользователя. В нашей функции мы будем сохранять: id, имя, фамилию и аватарку. Для этого через запятую в ячейку fields поместим строку с параметрами «uid,first_name,last_name,photo_100». Какие ещё данные пользователя можно получить описаны в документации объекта user . Обращаемся по новой ссылке и получаем ответ в виде массива. Проверяем наличие принятых данных и сохраняем их в переменную user_info (принятый массив является многомерным, данные будут храниться в нулевой ячейке response), а так же значение auth_status меняем на true и возвращаем true.

public function auth($code)< if($code $this->settings) < $query = urldecode(http_build_query(array( «client_id» =>$this->settings[«client_id»], «client_secret» => $this->settings[«client_secret»], «code» => $code, «redirect_uri» => $this->settings[«redirect_uri»] ))); $token = json_decode(file_get_contents(«https://oauth.vk.com/access_token?».$query), true); if(isset($token[«access_token»])) < $query = urldecode(http_build_query(array( «uids» =>$token[«user_id»], «fields» => «uid,first_name,last_name,photo_100», «access_token» => $token[«access_token»] ))); $this->user_info = json_decode(file_get_contents(«https://api.vk.com/method/users.get?».$query), true); if(isset($this->user_info[«response»][0][«uid»]))< $this->user_info = $this->user_info[«response»][0]; $this->auth_status = true; return true; > > > return false; >

Первым делом проверяем наличие настроек, а далее формируем путь для ссылки. Функции, которые используются, описаны выше. Когда пользователь нажмёт на ссылку с этим путём, то его перебросит на страницу c параметром code в адресной строке – код для получения токена.

public function get_link()< if($this->settings) < $query = urldecode(http_build_query(array( «client_id» =>$this->settings[«client_id»], «redirect_uri» => $this->settings[«redirect_uri»], «response_type» => «code» ))); return «https://oauth.vk.com/authorize?».$query; > return false; >

Простая авторизация

На этом этапе – всё довольно рационально. После того как вы подключите класс к файлу, останется получить экземпляр VKAuth, передав ему настройки. Ниже описываем простой обработчик, который отлавливает переменную $_GET[code] и проверяем аутентификацию.

require_once(«VKAuth.php»); $vk = new VKAuth(array( «client_id» => «ID_приложения», «client_secret» => «защищенный_ключ», «redirect_uri» => «адрес_сайта» )); if(isset($_GET[«code»]))< if($vk->auth($_GET[«code»])) < // Делаем свои дела >>

Далее, чтобы произвести авторизацию, вам нужно будет проверить наличие пользователя у себя в базе данных и, если его нет, то добавить. В противном случае обновить его данные (перед обновлением желательно проверить — изменились ли они). Касательно базы данных обычно добавляют два поля: тип авторизации и id пользователя в социальной сети. Вот так осуществляется аутентификация и авторизация через социальную сеть «ВКонтакте».

В архиве вы найдёте готовый пример работы с классом VKAuth, где выводятся данные пользователя.

Источник: falbar.ru

Подключение к api vk

RomanLoveText — Обзор GameDev статей со всего интернета.
Лучшие посты попадают сюда)

Страницы

VK.api — библиотека для работы.

Представляю вам новую Qt библиотеку для работы с vk api, которая может пригодиться вам при создании любых настольных и мобильных приложений, взаимодействующих с vk. Проект родился из vkontakte плагина для qutIM’а и перерос в отдельную независимую библиотеку, которой теперь может пользоваться каждый.

Еще по теме:  Как посмотреть первую запись на стене Вконтакте

Краткий обзор

Vreen это обёртка над vk.com api, написанная на C++11/Qt, предназначенная для быстрого и простого создания мобильных и настольных приложений, а также встраивания взаимодействия с vk.com api в уже существующие приложения. Библиотека поддерживает несколько способов авторизации и позволяет при необходимости добавлять свои. Также в vreen существует полноценная привязка к qml, что позволяет создавать приложения, не написав ни единой строчки на C++. Для уменьшения количества обязательных зависимостей все способы авторизации вынесены в отдельные статические библиотеки.

Основные возможности:
  1. Поддержка любых видов диалогов в том числе и групповых чатов.
  2. Поддержка просмотра новостных лент, стен.
  3. Работа с комментариями, в том числе добавления, лайки и репосты.
  4. Поддержка работы с вложениями.
  5. Поддержка ростера в том числе отслеживание статуса собеседников.
  6. Поддержка аудиозаписей.
  7. Возможность напрямую работать с API из qml в привычном для многих XHTTPRequest стиле.
  8. Расширяемость.
  9. Свободная LGPL лицензия, позволяющая использовать библиотеку с проприетарными приложениям.
Основы:
  • Connection — класс, основанный на QNetworkAccessManager’е, выполняющий авторизацию и непосредственно реализующий запросы к API.
  • Reply — класс отслеживает выполнение запроса.
  • Longpoll — класс, выполняющий опрос сервера на предмет событий.
  • Roster — класс, управляющий списком друзей.
  • Client — базовый класс, который сшивает всё в единое целое.

QVariantMap args; args.insert(«uids», join(ids)); args.insert(«fields», fields.join(«,»)); auto reply = d->client->request(«users.get», args); reply->connect(reply, SIGNAL(resultReady(const QVariant)));

Сигнал resultReady кидается в случае завершения запроса и содержит в response сконвертированный в QVariant json ответ от сервера или ничего в случае ошибки, код ошибки в этом случае содержится в reply->error()
Помимо этого можно скрыть обработку результата от получателя, добавив в reply функцию-обработчик результата, в этом случае результат будет можно получить при помощи вызова метода reply->result(), результат будет возращен в виде QVariant’а, поэтому его нужно будет еще дополнительно преобразовать при помощи QVariant::fromValue.

QVariantMap args; //TODO add chat messages support and contact check args.insert(«uid», message.toId()); args.insert(«message», message.body()); args.insert(«title», message.subject()); return request («messages.send», args, [](const QVariant QVariant < return response.toInt(); >);

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

typedef ReplyBaseint> SendMessageReply; QVariantMap args; //TODO add chat messages support and contact check args.insert(«uid», message.toId()); args.insert(«message», message.body()); args.insert(«title», message.subject()); return request («messages.send», args, [](const QVariant QVariant < return response.toInt(); >);

В результате в слоте SendMessageReply::result() будет возращать int вместо QVariant’а.
auto reply = static_cast(sender()); m_unreachedMessagesCount—; int mid = reply->result();

В целом, все взаимодействие с API получается простым и прозрачным.

Получение и сборка

Vreen использует субмодули и поэтому самым оптимальным способом получения исходников является.

$ git clone git://github.com/gorthauer/vreen.git $ cd vreen $ git submodule update —init

Для сборки необходимы cmake 2.8, Qt 4.7.4, и любой компилятор с базовой поддержкой С++11 (gcc 4.4+, clang 3.0+, msvc2010+).
Сама сборка достаточно тривиальна:

$ mkdir build $ cd build $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr $ make $ make install (sudo)

Если будут возникать вопросы относительно сборки релизной или дебажной версии, то лучше просто обратитесь к документации по cmake. В качестве экспериментального варианта поддерживается сборка при помощи qbs. Существует возможность собрать библиотеку при помощи qmake’, но данный способ не является официально поддерживаемым.

Использование в C++ проекте

Подключение

Для подключения к другим проектам в Vreen’е используется pkg-config, поэтому для подключения vreen’а со стандартым методом авторизации через браузер достаточно добавить в pro файл строчки.

CONFIG += link_pkgconfig PKGCONFIG += vreen vreenoauth

В случае систем, которые не поддерживают pkgconfig, можно или вручную добавить LIBS и INCLUDEPATH или написать find скрипт для cmake или qbs.
Желающие могут помочь мне написать prf файл для Qt.

Использование

Давайте в качестве примера напишем небольшое консольное приложение, которое будет вытаскивать все номера телефонов у списка друзей.

Еще по теме:  Можно ли найти человека ВК по инстаграму

Для начала просто инициализируем клиента, указав ему способ подключения, идентификатор приложения, а также попросим его самостоятельно создавать окошко с разрешением для доступа из приложения к api.

auto auth = new Vreen::OAuthConnection(3220807, this); //в качестве clientId используйте собственный auth->setConnectionOption(Vreen::Connection::ShowAuthDialog, true); //заставляет клиент самостоятельно создавать окошко авторизации. auth->setConnectionOption(Vreen::Connection::KeepAuthData, true); //заставляет хранить токен между сессиями setConnection(auth); connect(this, SIGNAL(onlineStateChanged(bool)), SLOT(onOnlineChanged(bool))); connect(roster(), SIGNAL(syncFinished(bool)), SLOT(onSynced(bool)));

После того, как клиент успешно подключится к api, будет вызван слот onOnlineChanged в котором мы запросим у ростера список друзей. При запросе можно выбирать поля, которые хочется получить. Существует несколько макросов с наиболее распространёнными вариантами полей VK_COMMON_FIELDS, VK_EXTENDED_FIELDS и VK_ALL_FIELDS для всех известных полей.
Описание полей и получаемых свойств можно прочитать здесьu.
В данном случае нас интересует всего три поля и нет необходимости напрягать сервер более тяжелыми запросами.

roster()->sync(QStringList() «first_name») «last_name») «contacts»));

После успешного завершения синхронизации ростера просто выведем на экран результат:
qDebug() «— %1 contacts recieved»).arg(roster()->buddies().count()); foreach (auto buddy, roster()->buddies()) < QString homeNumber = buddy->property(«_q_home_phone»).toString(); QString mobileNumber = buddy->property(«_q_mobile_phone»).toString(); qDebug() «name: %1, home: %2, mobile: %3»).arg(buddy->name()) .arg(homeNumber.isEmpty() ? tr(«unknown») : homeNumber) .arg(mobileNumber.isEmpty() ? tr(«unknown») : mobileNumber); >

Все свойства, которые еще не реализованы штатно для контактов будут иметь префикс _q_, остальные же можно получить через getter’ы или через имена, указанные в Q_PROPERTY.

В качестве второго примера попробуем воспользоваться qml api и получим список друзей.
Импортируем в qml поддержку Vreen’а:

import com.vk.api 1.0

И создадим клиента:
Client < id: client connection: conn //используем в качестве подключения и авторизации известный по C++ примеру метод > OAuthConnection < id: conn Component.onCompleted: < //Не забудем установить для него те же самые свойства, что и в случае с photoview’ером setConnectionOption(Connection.ShowAuthDialog, true); setConnectionOption(Connection.KeepAuthData, true); > clientId: 3220807 displayType: OAuthConnection.Popup //из всех окошек авторизации это оказалось наиболее удобным >

Подключаться будем просто через client.connectToHost, в появившемся окошке подтверждения будет возможность вписать логин и пароль, поэтому можно не создавать отдельные поля для ввода, а ограничимся крайне лаконичным приглашением.

Для отображения списка диалогов можно воспользоваться готовой моделью из com.vk.api 1.0:

DialogsModel

Для получения списка последних диалогов достаточно просто после подключения запросить список:
Connections < target: client onOnlineChanged: < if (client.online) < client.roster.sync(); dialogsModel.getDialogs(0, //смещение относительно последнего элемента 15, //число элементов 160 //максимальная длина сообщения ); > > >

Доступные для делегата свойства модели можно подсмотреть в коде её реализации:
roles[SubjectRole] = «subject»; roles[BodyRole] = «body»; roles[FromRole] = «from»; roles[ToRole] = «to»; roles[ReadStateRole] = «unread»; roles[DirectionRole] = «incoming»; roles[DateRole] = «date»; roles[IdRole] = «mid»; roles[AttachmentRole] = «attachments»; roles[ChatIdRole] = «chatId»;

С помощью использования этих полей можно получить вполне опрятный на вид список диалогов:

Аналогичным образом создадим фотоальбом:

Причем хочется заметить, что в случае создания фотоальбома мы работаем через qml напрямую с vk.api

function getAll(ownerId, count, offset) if (!offset) offset = 0; if (!count) count = 200; var args = < «owner_id» : ownerId, «offset» : offset, «count» : count, «extended» : 0 > var reply = client.request(«photos.getAll», args) reply.resultReady.connect(function(response) < var count = response.shift() for (var index in response) < var photo = response[index] model.append(photo) > >) >

Получается очень кратко и лаконично.

Заключение

Текущая версия vreen’а — 0.9.5, то есть фактически это уже почти релиз, а это значит, что API по большей части уже не будет меняться и будет поддерживаться бинарная совместимость между версиями, а значит можно уже смело присоединяться к использованию и тестированию в реальных условиях.
На данный момент поддержка API еще очень неполная, но само написание оберток над ним максимально упрощено, так, что буду рад всем патчам с реализацией различных возможностей.
По остальным вопросам готов ответить в личку или в jabber’е, который можно найти в профиле.

Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями. Для этого воспользуйтесь предлагаемыми ниже кнопками:

Источник: romanlovetext.blogspot.com

Рейтинг
( Пока оценок нет )
Загрузка ...