image

Недавно понадобилось сделать программу, которая могла бы работать с 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)


  1. Tsyganov_Ivan
    23.07.2015 14:10
    +5

    Я просто оставлю это здесь:
    github.com/dimka665/vk

    Если посмотреть в код, то можно увидеть, что никаких проблем с получением токена нет.
    Спрячьте лучше в черновики, это лучше подойдет для уютного бложика. Извините за резкость.


  1. SuperDoker
    23.07.2015 15:27

    Эм, а вы в курсе что этот токен дается 1 раз и навсегда, если указать дату окончания 0. Зачем делать эти манипуляции?


    1. AlexBin
      23.07.2015 17:22

      Неприятно будет, если такой безлимитный токен похитят?

      P.S.: статью не читал, с токенами работаю без проблем.