Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
Alex
@JWo1F
Воу
Салют
Vsevolod Romashov
@7even
Привет
Aleksey Kurepin
@foxweb
хелоу
Vsevolod Romashov
@7even
@foxweb за консультацией пришел?)
Roman Storm
@rstormsf
а в чем разница между этим и https://github.com/zinenko/vk-ruby ?
Vsevolod Romashov
@7even
не слежу за развитием vk-ruby, но когда однажды мне понадобилось работать с API вконтакта, возможностей этого гема не хватило - так и появился vkontakte_api
Roman Storm
@rstormsf
ok
TIT
@tit
Всем привет. Есть живые?
Vsevolod Romashov
@7even
привет, есть время от времени
TIT
@tit

Подскажите тогда, пожалуйста. Не получается авторизоваться внутри gem'а Vkontakte_api. Создал приложение внутри ВК (Standalone-приложение). Получил ID приложения и Защищенный ключ. А вот дальше — плохо, не получается что-то.

VkontakteApi.configure do |config|
  config.app_id       = ''
  config.app_secret   = ''
end

# показать ссылку для авторизации
puts VkontakteApi.authorization_url

# взять код из ссылки выше (после авторизации)
code = gets

vk = VkontakteApi.authorize code: code
puts vk.user_id

вылетает с ошибкой: "error":"invalid_grant","error_description":"Code is invalid or expired."

Общая задача у меня простая: от определённого пользователя создать >100 сообществ (групп). Я могу их создать «вручную» через Selenium, но там есть засада в виде CAPTCHA после 2-3 групп подряд. Решил через API, там лимиты побольше вроде.

Vsevolod Romashov
@7even
может, в code какой-нибудь лишний пробел или перенос строки попадает?
ну то есть код, работающий с вконтактом, верный и должен работать
TIT
@tit
О! Сделал по-другому немного. Сначала выполнил VkontakteApi.authorization_url, получил ссылку, перешёл по ней, взял code, потом вставил его inline в код и запустил его. Сработало. Вывело user_id мой. Но! Повторный запуск уже не работает. Та же ошибка: "error":"invalid_grant","error_description":"Code is invalid or expired."
Vsevolod Romashov
@7even
этот код срабатывает только один раз, потом нужно получать новый
TIT
@tit
Т. к. КАЖДЫЙ запуск приложения должен подтверждаться переходом в браузере по ссылке и забором нового code?
Vsevolod Romashov
@7even
нет, можно сохранить полученный токен и в следующие разы создавать объект так:
vk = VkontakteApi::Client.new(token)
но у токена есть определенное время жизни, кажется сутки по умолчанию
TIT
@tit

Фух. Вроде разобрался в итоге. Поправьте, пожалуйста, если я сильно не прав.

Сначала (однократно) мы делаем:

VkontakteApi.configure do |config|
  config.app_id = ''
  config.app_secret = ''
end

# просим перейти по ссылке и вернуть code
puts VkontakteApi.authorization_url scope: [:groups]

# берём code из ссылки выше
code = gets

# убираем перенос строки
code.gsub! /\n/, ''

# получаем token
token = VkontakteApi.authorize(code: code).token

Потом, при каждом запуске приложения:

VkontakteApi.configure do |config|
  config.app_id = ''
  config.app_secret = ''
end

# длинный токен с прошлого раза
vk = VkontakteApi::Client.new token

# наши действия
vk.groups.create title: 'foo'

И, соответственно, если токен устарел, то повторяем первый шаг ещё раз.

Vsevolod Romashov
@7even
да, все так
TIT
@tit
Моё вам огромное спасибо. Голова чуть не лопнула от этих token'ов.
Vsevolod Romashov
@7even
:)
TIT
@tit
Пришла вторая беда — Captcha в API, но она показывается, если больше 2-3 запросов в секунду идёт. Это обойти просто (реже отправлять запрос на создание группы). Но в целом, ужасно же API сделано в ВК, или нет?
Vsevolod Romashov
@7even
ну можно было бы и получше, да
Sanches
@maksportnyagin
7even, доброго времени суток. В ruby я совсем новичек. Сейчас делаю "синхронизатор" музыки из spotify в vk. Возникла проблема с капчей. Как правильно ее обработать? Сейчас я первым делом в контролере проверяю есть ли params[:captcha], если нет то делаю запрос на добавление песни к себе на страницу, далее идет rescue, и если ошибка 14 то делаю рэндер js файла который выдает модальное окно с капчей и формой. Форма отправляется опять таки ajax в тот-же контроллер. Теперь у нас условие params[:captcha] срабатывает и мы отправляем запрос на добавление уже с капчей. Правильно ли так или условие можно куда-то убрать?
Sanches
@maksportnyagin
@vk_track = VkTrack.find(params[:id])