Задать вопрос
Screatch
@Screatch
Ruby On Rails front-end developer

Как теперь авторизовать скрипт для работы с Vkontakte?

Есть задача, настроить поиск видео через Vkontakte API с сервера.



Авторизация до недавнего времени решалась не очень красиво, но работало.



application_id = '123456'<br>
    application_secret = 'secretapplicationkey'<br>
    code_url = 'http://oauth.vk.com/oauth/authorize?client_id=***&scope=video&redirect_uri=http://vasja.ru&response_type=code&_hash=0'<br>
    email = 'vasja@vasja.ru'<br>
    password = 'password'<br><br>
    # Settings<br>
    tokenExpire = Settings.vkontakte[:expires]<br>
    token = Settings.vkontakte[:access_token]<br><br>
    if Time.current >= tokenExpire<br>
      puts '=== Logging in to vk.com and getting cookies ==='<br>
      resp = Net::HTTP.post_form(URI.parse('http://vk.com/login.php'),<br>
                                 {'m' => '1', 'email' => email, 'pass' => password})<br>
      cookies = resp.response['set-cookie']<br>
      remixsid = cookies.split('remixsid=')[1].split(';')[0].split(',')[0]<br><br>
      puts '=== Logging in once again with the cookies ==='<br>
      # Подключаемся снова к http://vk.com<br>
      header = { "Cookie" => 'remixsid=' + remixsid }<br>
      data = open(code_url, header)<br><br>
      resultURL = data.base_uri.to_s<br><br>
      puts '== Parsing URL for code param ==='<br>
      codeParams = Rack::Utils.parse_query URI(resultURL).query<br>
      code = codeParams['code']<br>
    end<br><br>
    puts '=== Authorizing ==='<br>
    if Time.current >= tokenExpire<br>
      app = VK::Serverside.new app_id: application_id, app_secret: application_secret<br>
      app.authorize code<br>
      Settings.vkontakte = { :access_token => app.access_token, :expires => (Time.current + app.expires_in) }<br>
    else<br>
      app = VK::Serverside.new app_id: application_id, app_secret: application_secret, access_token: token<br>
    end<br>




Дальше уже работали с API как обычно используя обёртку над API vk-ruby

Но тут где-то в 20-ых числах сентября Vkontakte вдруг внезапно изменили порядок авторизацию, чем сломали огромное количество скриптов и сервисов разных направлений (Так например Loginza тоже оказалась под ударом). Об этом писали например на античате.



Теперь просто так

resp = Net::HTTP.post_form(URI.parse('http://vk.com/login.php'),<br>
                                 {'m' => '1', 'email' => email, 'pass' => password})<br>


уже не залогинится, он просто не авторизует и уже невозможно далее получить куку Remixsid.



Пробовали пойти легальным путём и воспользоватся github.com/7even/vkontakte_api (Сервер приложения)

Токен получаем, всё замечательно только вот при попытке воспользоваться video.search получаем ошибку:

User authorization failed: method is unavailable with server auth.



Собственно вопрос. Как теперь малой кровью можно авторизоваться в vkontakte с сервера и получить полноценный access_token для дальнейшего использования с API.



Заранее благодарю за любую помощь в решении этого вопроса :)
  • Вопрос задан
  • 18758 просмотров
Подписаться 15 Оценить Комментировать
Ответ пользователя Oleg Bozhenko К ответам на вопрос (5)
Я просто заменил
http://vk.com/?act=login&email=$email&pass=$pass
на
http://login.vk.com/?act=login&email=$email&pass=$pass
и мой скрипт заработал.
Ответ написан
Комментировать