Недавно понадобилось сделать программу, которая могла бы работать с vk api на python (
по некоторым причинам, использовать модуль vkontakte нельзя) если быть конкретнее, то мне нужно было получить номера телефонов всех моих друзей.
Первым делом полез в документацию VK API, немного почитав, увидел, что есть метод friends.get, не требующий access token, создал standalone приложение, дальше построил запрос, чтобы вызвать метод, и вроде всё очень даже хорошо, получил JSON строку со всеми друзьями и некоторой информацией о них, только вот есть одно
но, если у пользователя запрещен просмотр страницы в интернете, то информация о его номере телефона будет в строке под видом
hidden:1 , что собственно меня не устраивало.
Нужно было получать access token, сформировал ссылку и записал в переменную url, а дальше, используя модуль webbrowser, открываю url и получаю чистое окно, токен есть, только вот он в адресной строке, поискав в гугле о том: «как получить данные из адресной строки на python» и задав вопрос на Stackoverflow и Тостер, понял, что сделать это практически невозможно, и нужно было искать другое решение.
Поскольку получить токен для standalone приложения представляется практически невозможно (
по крайней мере для меня, ибо новичок в python`e), я решил создать приложения для сайта, дальше нашел первый попавшийся бесплатный хостинг с поддержкой PHP и зарегистрировал там сайт. Сделал ссылку вида:
https://oauth.vk.com/authorize?client_id=APP_ID&scope=PERMISSIONS&redirect_uri=REDIRECT_URI&response_type=code&v=API_VERSION
. Открыв ссылку через модуль webbrowser получил главную страницу своего сайта, и в ссылке был параметр code в $_GET, дальше путём нехитрых манипуляций на PHP, записал code в отдельный файл, из которого спарсил его к себе в программу, после чего сформировал ссылку вида
https://oauth.vk.com/access_token?client_id=APP_ID& client_secret=APP_SECRET&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a& redirect_uri=REDIRECT_URI
, в результате чего, получил JSON строку с нужным мне access token`ом, user_id и expires_in.
комментарии (3)