Как осуществить вызов VK API ?

Создание Desktop-приложений, виджеты ВКонтакте для сайтов и публичных страниц, OAuth 2.0, Open API, Standalone
handler
Сообщения: 9
Зарегистрирован: 10 сен 2012, 14:00

Как осуществить вызов VK API ?

Сообщение handler »

Здравствуйте!
Простой вопрос: каким образом получить информацию, возвращаемую методом VK API ?
Напоминаю: вопрос очень простой, значит, ответ должен быть максимально развернутым.
Варианты собственных проб:
1. Напрямую методом GET через WGET. Например:
wget http://api.vk.com/api.php?v=3.0&api_id= ... getProfile
2. JavaSсript со страницы сайта:
написал html-страничку

Код: Выделить всё

<html><head><script src="http://vk.com/js/api/xd_connection.js?2" type="text/javascript"></script><script type="text/javascript">  VK.init(function() {     // API initialization succeeded     // Your code here  });</script></head><body onload="vkStart()"></body></html>
3. Поместил страничку со 2-го примера на сайт, url которого указал в настройках приложения, созданного заблаговременно на сайте vkontakte.com

Пока все мои изыскания безрезультатны
Буду весьма признателен за подробное разъяснение
Спасибо
Алексей
handler
Сообщения: 9
Зарегистрирован: 10 сен 2012, 14:00

Re: Как осуществить вызов VK API ?

Сообщение handler »

Немного разобрался в принципе взаимодействия составляющих, построенных на принципе IFrame-приложения.
Существует три компонента:
1. Сам сервер, который отвечает на запросы к API (vk.com)
2. Собственно, клиент, делающий запросы к vk API
3. Каким-то боком приложение, устанавливаемое и запускаемое непосредственно на стороне сервера (vk.com), которое "смотрит" на клиента (настроенное на веб-адрес страницы с кодом клиента) и, собственно, осуществляет вызов функционала клиента.

А существуют способы прямого вызова vk API, минуя приложение?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Как осуществить вызов VK API ?

Сообщение Александр »

handler
Есть приложения которые запускаются внутри сайта вконтакте (Flash и IFrame).
Есть внешние приложения (Desktop и сайты). Для них есть авторизация http://vk.com/developers.php?o=-1&p=%D0 ... %D1%8F&s=1
handler
Сообщения: 9
Зарегистрирован: 10 сен 2012, 14:00

Re: Как осуществить вызов VK API ?

Сообщение handler »

Однако, для этой авторизации нужно знать:
1. client_id (допустим, у нас есть приложение вконтакте, id которого мы знаем)
2. scope (wall)
3. redirect_uri (куда перенаправлять - не понятно)
4. display (page)
5. response_type=token (то что мы получим в ответ)
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Как осуществить вызов VK API ?

Сообщение Александр »

handler
Проблема в чем? Документации не хватает?
REDIRECT_URI – адрес, на который будет передан code. Этот адрес должен находиться в пределах домена, указанного в настройках приложения.
После успешной авторизации приложения браузер пользователя будет перенаправлен по адресу REDIRECT_URI, указанному при открытии диалога авторизации. При этом код для получения ключа доступа code будет передан в GET-параметре на указанный адрес
Серверная авторизация ВКонтакте на базе протокола OAuth 2.0
handler
Сообщения: 9
Зарегистрирован: 10 сен 2012, 14:00

Re: Как осуществить вызов VK API ?

Сообщение handler »

Куда перенаправлять - не надо никуда перенаправлять.
Я curl'ом отправлю запрос на авторизацию и хочу получить назад токен.
О каких диалоговых окнах вообще речь?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Как осуществить вызов VK API ?

Сообщение Александр »

Так работает авторизация. Почитайте документацию.
Процесс авторизации сайта состоит из 4-х шагов:
1. Открытие окна браузера для аутентификации пользователя на сайте ВКонтакте.
2. Разрешение пользователем доступа к своим данным.
3. Передача сайту значения code для получения ключа доступа.
4. Получение сервером приложения ключа доступа access_token для доступа к API ВКонтакте.
http://vk.com/developers.php?oid=-1&p=% ... 0%BE%D0%B2

Код из статьи на которую я дал ссылку не помогает разобраться?


С некоторыми методами можно работать без авторизации. Работать без авторизации со всеми методами не получится. Если и получится, то это явно написано в документации или можно узнать попробовав вызвать метод без авторизации.

Если нужно получать какие-то данные в обход ВКонтакте API, тогда curl + cookies и прямые обращения к скриптам сайта ВКонтакте. Но это нарушение правил Вконтакте. Может быстро перестать работать...
handler
Сообщения: 9
Зарегистрирован: 10 сен 2012, 14:00

Re: Как осуществить вызов VK API ?

Сообщение handler »

Хорошо, давайте по-порядку:
1. Создаю php-скрипт, возвращающий ответ с vk.com с GET-полем code:
file redirect.php:

Код: Выделить всё

<?  echo $_GET['code'];?>
2. Проверяем вновь созданный скрипт на работоспособность:
curl diplom.olymp.dp.ua/redirect.php?code=test_passed
> test_passed
3 отправляю запрос на авторизацию:

Код: Выделить всё

 curl http://oauth.vk.com/authorize?client_id=3116273&scope=wall&redirect_uri=diplom.olymp.dp.ua/redirect.php&response_type=
ничего не происходит
Вам еще не надоело? Или я дебил, или такая документация.
Вот еще:
http://vk.com/developers.php?oid=-1&p=% ... 0%B8_OAuth
Примечание
* Если Вы разрабатываете Standalone-приложение и параметр response_type = "token", то в качестве параметра redirect_uri необходимо указывать адрес http://api.vk.com/blank.html, на который будут переданы данные авторизации. Обратите внимание, что только в данном случае у Вас будет возможность использовать расширенные методы работы с API.
Что такое Standalone-приложение ?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Как осуществить вызов VK API ?

Сообщение Александр »

handler писал(а):Вам еще не надоело?
Я просто не понимаю, почему бы не взять исходник из темы с примером и не разобраться в нем. Может быть там что-то недоступно описано?

Вы пытаетесь авторизовать сервер, а не пользователя. У сервера свои cookies и свой IP. Через PHP вы не получите необходимого доступа для авторизации пользователя на сервере.

Standalone - это мобильные приложения и программы на компьютере, у которых есть доступ к встроенному в них объекту веб-браузера.

1. Авторизовываем ПОЛЬЗОВАТЕЛЯ, а не СЕРВЕР!!!

Код: Выделить всё

$link = 'http://api.vk.com/oauth/authorize?client_id='.CLIENT_ID.'&redirect_uri='.PATH.OAUTH_CALLBACK.'&display=popup&scope='.SCOPE.'&response_type=code';
Curl и file_get_contents - не подойдут - это работает на стороне сервера. Надо перейти на эту страницу в окне браузера пользователя.

Пользователь увидит форму авторизации (если не залогинен на vk.com) и сообщение с разрешением доступа к своим данным. После этого окна происходит перенаправление ПОЛЬЗОВАТЕЛЯ (не СЕРВЕРА) на другую страницу с передачей значения code.

2. Получаем access_token на странице на которую перенаправили.
Для получения access_token нужно использовать полученный code.

Код: Выделить всё

$resp = file_get_contents('https://api.vk.com/oauth/access_token?client_id='.CLIENT_ID.'&code='.$_REQUEST['code'].'&client_secret='.SECRET);
3. Выполняем запрос к ВКонтакте API
Для выполнения запросов надо использовать полученный access_token.

Код: Выделить всё

$resp = file_get_contents('https://api.vkontakte.ru/method/getProfiles?uids='.$uid.'&fields=photo_big&access_token='.$_SESSION['access_token']);
Вот и все, ответ сервера можно обрабатывать.
handler
Сообщения: 9
Зарегистрирован: 10 сен 2012, 14:00

Re: Как осуществить вызов VK API ?

Сообщение handler »

У нас нет браузера, у нас нет пользователя, у нас есть приложение, работающее в фоновом режиме, способное принимать/отправлять запросы на 80-й порт.
Этого не достаточно для взаимодействия с vk api ?

В документации к авторизации описаны три случая:

Код: Выделить всё

 1. Серверная авторизация для подключения сайтов (Authorization Code Flow).2. Клиентская авторизация для Standalone-приложений и мобильных клиентов (Implicit Flow).3. Авторизации сервера приложения для осуществления вызовов к административным методам API, начинающимся с префикса secure (Client Credentials Flow). 
С третим все понятно (относительно), а вот как быть с первыми двумя? В чем их отличие? Так и не смог уловить идеологическую разницу между ними.

По поводу авторизации вообще:
Мы отправляем запрос
http://oauth.vk.com/authorize?client_id ... onse_type=
В документации написано, что ответ придет:

Код: Выделить всё

 REDIRECT_URI – адрес, на который будет передан code. Этот адрес должен находиться в пределах домена, указанного в настройках приложения.  

Код: Выделить всё

 После успешной авторизации приложения браузер пользователя будет перенаправлен по адресу REDIRECT_URI, указанному при открытии диалога авторизации. При этом код для получения ключа доступа code будет передан в GET-параметре на указанный адрес:  
У меня нет ни пользователя, ни браузера.
И какова роль приложения на стороне vk.com ?
Ответить