Доброго времени суток. Понадобилось прикрутить к проге (пишу в RAD Studio XE5 на C++ т.е. пытаюсь ), возможность тырить информацию о видео ВКонтакте.
Начал разбираться с API. Пока делал всё вручную через обычный браузер.
Если коротко, то всё делается примерно так (Принцип вам знаком? Смело пропускайте все это, основной вопрос после блока
Код):
Создаём
Standalone приложение на сайте ВК в разделе "Разработчикам". В результате получаем 2 параметра: номер приложения и
secret. Авторизация проводится по протоколу OAuth 2.0
Далее нужно отправить запрос на получение токена, который в свою очередь используется для всех остальных операций от имени пользователя.
Мой запрос будет выглядить так: **tps://oauth.vk.com/authorize?client_id=
ид_приложения&scope=video,offline&redirect_uri=**tps://oauth.vk.com/blank.html&display=page&v=5.14&response_type=token
Теперь по порядку.
Client_ID - это понятно;
scope - для тестирования позволю себе бесконечный токен)) и мне нужен доступ к видео;
redirect_uri - хорош, когда с API работает сайт, на этот адрес вышлют тот самый токен, но т.к. приложение
standalone, то и отправлять ответ некуда (
redirect_uri можно и не указывать, всё равно будет blank);
display - тип окна авторизации (page, mobile,..);
v - версия API;
response_type - какой прислать ответ токен или
code?
Что получится, если всё это дело выполнить в браузере? Появится окно авторизации ВК, если пользователь не вошел на свой акк, то ему предложат ввести пароль и логин, затем спросят давать ли привилегии приложению такому-то или нет? Те самые
video и доступ к видеозаписям и
offline - доступ в любое время, даже, если пользователь не в сети.
В строке браузера появится ссылка: **ps://oauth.vk.com/blank.html#access_token=
Набор_Буков_и_Цифр&expires_in=0&user_id=
ИД_Пользователя_ВК
А вместо страницы надпись: Пожалуйста, не копируйте данные из адресной строки для сторонних сайтов. Таким образом Вы можете потерять доступ к Вашему аккаунту.
Оно и понятно, токен то бесконечный. Зная его и ид можно начать гадить согласно запрошенным разрешениям от имени пользователя)
expires_in без
offline будет содержать не нулевое значение. Например 86000 (сек)
Всё, теперь можно выполнять методы. Лезу смотреть документацию. Нужный мне метод video.get.
Запрос должен быть таким: **ps://api.vk.com/method/'''METHOD_NAME'''?'''PARAMETERS'''&access_token='''ACCESS_TOKEN'''
Ага,
**tps://api.vk.com/method/video.get?owner_id=-51189706&count=1&access_token=
токен_полученный_при_авторизации&v=5.14&extended=1
owner_id - имя группы или пользователя (минус ставится, если группа). count - кол-во результатов в ответе API, extended - отобразить доп. параметры такие как приватность.
Результат:
Специально вставил пробелы для наглядности. Так всё будет подряд.
{"response":{
"count":1296,
"items":
[{
"id":168023859,
"owner_id":-51189706,
"title":"Пока никто не видит. Пёс и скрытая камера",
"duration":127,
"description":"\nЕще больше крутых видео: vk.com\/just_vid\nРекомендую!",
"date":1394873597,"views":36621,"comments":55,
"photo_130":"http:\/\/cs619719.vk.me\/u191269\/video\/s_cb41ed31.jpg",
"photo_320":"http:\/\/cs619719.vk.me\/u191269\/video\/l_465756dc.jpg",
"player":"http:\/\/www.youtube.com\/embed\/7D5bPLxU8U8",
"can_comment":1,"can_repost":1,"likes":{"user_likes":0,"count":7413},
"repeat":0}
]}}
---------------------------
Отсюда мне нужны:
"player" - ссылка на видео и описание -
"title". Пока всё, остально по мере надобности доделаю сам.
В результате ошибочного запроса ответ будет error и другие поля тоже будут error со всякими животрепещущими подробностями.
А можно и
id. ...com/videos-
owner_id присоединю
id и получится намного аккуратнее.
Player содержит любую ссылку, которую поддерживает ВК.
Всё это прекрасно и замечательно, НО как всегда страдает реализация. Погуглив нашел Indy компонент TRESTClient (response и т.д.). Он поддерживает OAuth 2.0 и обладает собственным веб интерфейсом авторизации. Добился я от него лишь
code, видимо без
secret_key не обойтись, однако где-то в документации вычитал, что его не рекомендуется вставлять в код программы из-за угрозы безопасности, всего 2 запроса, авторизация и видео, секрет нафиг не нужен.
С английским туго, много инфы про делфи и другие соц. сети). Как же мне организовать именно так как требует ВК?
Вторая проблема - дальнейшее выполнение методов с помощью этих самых компонентов. В результате мне бы просто иметь переменные выдернутые из ответа JSON. Опять же подойдут ли компоненты TRest* ?
Вопрос в том связываться ли вообще с Indy или легче использовать другие способы/библиотеки (с примерами желательно)
Мои запрсы API в тексте выше
P.S.: Собственно почему я такими мелочами озаботился? Да потому, что мало работал вообще с HTTP и с JSON в частности. Одним словом нуб)