2015-08-08 5 views
0

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

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

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

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

ответ

0

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

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

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

успеха :)

0

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