7even/vkontakte_api

генерит не верные ссылки

roushkaman opened this issue · 5 comments

после поиска аудиозаписей

VkontakteApi::Client.new(session[:token]).audio.get(uid: 167270710)

возвращает хэш с трэками, только вот проблема, генерит не верные url для скачивания допустим, помогите решить пожалуйста эту проблему

вот что нашел в постах:
"Для каждого пользователя ссылка на файл является уникальной. Прежде, чем получить ссылку, вы должны представится системе. Естественно, браузер и php это разные пользователи. Либо вы должны имитировать через headers/curl браузер."

взято от сюда:
http://hashcode.ru/questions/161857/php-404-not-found-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%BF%D1%8B%D1%82%D0%BA%D0%B5-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-get_headers-vk

vkontakte_api никак не изменяет url-ы треков - они возвращаются ровно в том виде, в котором их возвращает вконтакте.

Ключевая фраза - "браузер и php это разные пользователи": если перефразировать на человеческий язык, запрос с сервера нужно авторизовать с сервера, а запрос из браузера нужно авторизовать через браузер - трек будет доступен по полученному урлу только для того IP-адреса, с которого был получен токен. То есть если авторизация проведена через метод VkontakteApi.authorize(code: params[:code]) (серверный вариант), то трек можно будет только скачать на сервер, а уже оттуда отдавать в браузер. Если нужно отдавать из вконтакта напрямую в браузер, то и авторизовывать нужно через браузер - тут уже данный гем вряд ли поможет.

Ясно, плохо конечно, но спасибо =)

Извините что вас бес толку может беспокою снова. Но если мне попробовать клиентскую авторизацию?
VkontakteApi.authorization_url(type: :client, scope: [:audio])
То как мне выловить access_token?

Нужно поставить VkontakteApi.redirect_uri на https://oauth.vk.com/blank.html. После подтверждения юзером прав пойдет редирект на этот blank.html, причем в урле будет содержаться токен - что-то вроде этого: https://oauth.vk.com/blank.html#access_token=4ccecbfa8c054a12438576cb3a4cf85e3b48cc84ccc571d1c039762fce315ee86fc53ce&expires_in=86400&user_id=628985. В веб-приложении вытащить его оттуда не получится - нужен контроль над адресной строкой браузера.

Но эта авторизация нужна для других методов API - для работы со стеной, личными сообщениями итд. Чтобы аудиотреки были доступны в браузере, нужен яваскрипт.

Ага, спасибо большое!