Страница 1 из 2
Как осуществить вызов VK API ?
Добавлено: 13 сен 2012, 16:08
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
Пока все мои изыскания безрезультатны
Буду весьма признателен за подробное разъяснение
Спасибо
Алексей
Re: Как осуществить вызов VK API ?
Добавлено: 14 сен 2012, 16:10
handler
Немного разобрался в принципе взаимодействия составляющих, построенных на принципе IFrame-приложения.
Существует три компонента:
1. Сам сервер, который отвечает на запросы к API (vk.com)
2. Собственно, клиент, делающий запросы к vk API
3. Каким-то боком приложение, устанавливаемое и запускаемое непосредственно на стороне сервера (vk.com), которое "смотрит" на клиента (настроенное на веб-адрес страницы с кодом клиента) и, собственно, осуществляет вызов функционала клиента.
А существуют способы прямого вызова vk API, минуя приложение?
Re: Как осуществить вызов VK API ?
Добавлено: 14 сен 2012, 20:10
Александр
handler
Есть приложения которые запускаются внутри сайта вконтакте (Flash и IFrame).
Есть внешние приложения (Desktop и сайты). Для них есть авторизация
http://vk.com/developers.php?o=-1&p=%D0 ... %D1%8F&s=1
Re: Как осуществить вызов VK API ?
Добавлено: 15 сен 2012, 10:30
handler
Однако, для этой авторизации нужно знать:
1. client_id (допустим, у нас есть приложение вконтакте, id которого мы знаем)
2. scope (wall)
3. redirect_uri (куда перенаправлять - не понятно)
4. display (page)
5. response_type=token (то что мы получим в ответ)
Re: Как осуществить вызов VK API ?
Добавлено: 15 сен 2012, 13:51
Александр
handler
Проблема в чем? Документации не хватает?
REDIRECT_URI – адрес, на который будет передан code. Этот адрес должен находиться в пределах домена, указанного в настройках приложения.
После успешной авторизации приложения браузер пользователя будет перенаправлен по адресу REDIRECT_URI, указанному при открытии диалога авторизации. При этом код для получения ключа доступа code будет передан в GET-параметре на указанный адрес
Серверная авторизация ВКонтакте на базе протокола OAuth 2.0
Re: Как осуществить вызов VK API ?
Добавлено: 15 сен 2012, 17:15
handler
Куда перенаправлять - не надо никуда перенаправлять.
Я curl'ом отправлю запрос на авторизацию и хочу получить назад токен.
О каких диалоговых окнах вообще речь?
Re: Как осуществить вызов VK API ?
Добавлено: 15 сен 2012, 18:08
Александр
Так работает авторизация. Почитайте документацию.
Процесс авторизации сайта состоит из 4-х шагов:
1. Открытие окна браузера для аутентификации пользователя на сайте ВКонтакте.
2. Разрешение пользователем доступа к своим данным.
3. Передача сайту значения code для получения ключа доступа.
4. Получение сервером приложения ключа доступа access_token для доступа к API ВКонтакте.
http://vk.com/developers.php?oid=-1&p=% ... 0%BE%D0%B2
Код из статьи на которую я дал ссылку не помогает разобраться?
С некоторыми методами можно работать без авторизации. Работать без авторизации со всеми методами не получится. Если и получится, то это явно написано в документации или можно узнать попробовав вызвать метод без авторизации.
Если нужно получать какие-то данные в обход ВКонтакте API, тогда curl + cookies и прямые обращения к скриптам сайта ВКонтакте. Но это нарушение правил Вконтакте. Может быстро перестать работать...
Re: Как осуществить вызов VK API ?
Добавлено: 18 сен 2012, 12:57
handler
Хорошо, давайте по-порядку:
1. Создаю php-скрипт, возвращающий ответ с vk.com с GET-полем code:
file redirect.php:
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-приложение ?
Re: Как осуществить вызов VK API ?
Добавлено: 18 сен 2012, 21:17
Александр
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']);
Вот и все, ответ сервера можно обрабатывать.
Re: Как осуществить вызов VK API ?
Добавлено: 19 сен 2012, 04:29
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 ?