Как получить капчу из ответа от ВКонтакте API?

У меня есть скрипт на Python, который помогает мне оставлять заметки в ВК. Но иногда мой сценарий должен решить капчу. У меня есть следующий код:

vk = vkontakte.API(token=token)
response = vk.wall.repost(object = link)

Как я понимаю, если мне нужно решить капчу, VK API вызывает исключение. Но я не смог найти никаких примеров для этого. Проблема в том, что я не могу получить captcha_sid а также captcha_img от него.

Или, может быть, вы знаете, как я могу получить ответ в формате JSON, а не как исключение?

2 ответа

Вы можете получить доступ к vk api через http запросы. Для этого вам нужен access_token, прочитайте здесь, как получить его, если у вас его еще нет.

Тогда вам будет очень легко по ссылке

https://api.vk.com/method/wall.repost?object=WALL_OBJECT_HERE&group_id=TARGET_GROUP_ID&access_token=YOUR_ACCESS_TOKEN

Если репост выполнен успешно, вы увидите ответ, подобный этому:

{"response":{"success":1,"post_id":676,"reposts_count":3,"likes_count":11}}

Но если вам нужно решить, что код с картинки должен быть таким:

{"error":{"error_code":14,"error_msg":"Captcha needed","request_params":[{"key":"oauth","value":"1"},{"key":"method","value":"wall.repost"},{"key":"object","value":"your_object_here"},{"key":"group_id","value":"56983001"}],"captcha_sid":"381041951450","captcha_img":"http:\/\/api.vk.com\/captcha.php?sid=381041951450&s=1"}}

Теперь вы можете легко получить ссылки captcha sid и captcha_img, скачать их, решить и повторить верхний запрос, просто добавив к нему 2 параметра: captcha_key=YOUR_SOLVED_CAPTCHA&captcha_sid=SID_YOU_GOT

Успех:)

Сначала убедитесь, что у вас последняя стабильная версия vkapi

Тем не менее, в старых, когда вы получаете VKError, captcha_img а также captcha_sid являются ключами к .errorне к Exception сам:

except vkerror as e:
    captcha_img = e.error['captcha_img']
    captcha_sid = e.error['captcha_sid']

Просто убедитесь, что вы определили правильную ошибку:

vkapi = vk.API(access_token=ACCESS_TOKEN)
vkerror = vk.api.VkAPIMethodError  # not vk.API (still it has the same Exception in it)
Другие вопросы по тегам