Авторизация ВКонтакте через API на Python
В настоящее время ВКонтакте - ресурс, который не нуждается в представлении. Это вторая по величине соц.сеть в мире. ВКонтакте предоставляет нам возможность создавать desktop-приложения, которые могут иметь доступ к данным пользователей. Судя по сообщениям на различных форумах, чуть ли не каждый третий, а то и второй программист задавался целью создать приложение для соц.сети с использованием ее API.
Вот способ авторизации, который предлагают разработчики ВКонтакте: Документация
Предлагаемый ими способ хорош, однако реализовать его в Python проблематично, поскольку в Python нет компонента Webbrowser, который необходим для обработки javascript'ов на странице авторизации. В связи с этим я предлагаю свой способ авторизации, который требует лишь наличия библиотеки urllib.
#-----------------------------------------------------------
#Copyright Igor http://py-coding-secrets.blogspot.com 2011
#-----------------------------------------------------------
def login_vkontakte(login,passw,app_id,app_hash):
import urllib
resp = urllib.urlopen("http://login.vk.com/?act=login&app="+
app_id+"&app_hash="+app_hash+
"&vk=1&captcha_sid=&al_test=14&captcha_key=&email="+
login+"&pass="+passw+"&expire=0&permanent=1")
page = resp.read()
pos = page.find("name='s'")
s = page[pos+16:pos+76]
pos = page.find('name="app_hash"')
app_hash_two = page[pos+23:pos+41]
resp = urllib.urlopen("http://vk.com/login.php?s="+
s+"&act=auth_result&m=4&permanent=1&expire=&app="+
app_id+"&app_hash="+app_hash_two)
page = resp.read()
pos1 = page.find("(")+1
pos2 = page.find(")")
params = eval(page[pos1:pos2])
return params
Функция login_vkontakte принимает четыре параметра:- login - ваш email
- passw - пароль
- app_id - id вашего приложения
- app_hash - хэш, который генерирует Вконтакте при запросе страницы авторизации (см.Документация; для приложения, которое запрашивает определенные права доступа, хэш постоянен)
Пример использования:
data = login_vkontakte("igor@email.com","password","2169003","8de61ebd53afbed646")
print data['user_full_name']
В настоящий момент ВКонтакте возвращает следующие параметры:
['user_first_name', 'secret', 'expire', 'user_thumb',
'sid', 'auth_hash', 'settings_hash', 'settings', 'mid', 'user_full_name']
Ну и напоследок об ограничениях:
Первое. Мой код реализует лишь базовый функционал авторизации. Код может не работать, если страница не привязана к телефону, так как в этом случае требуется ввод капчи, а работу с капчей в этом коде я не реализовал. Когда-нибудь, если потребуется, прикручу и капчу :)
Второе. Рано или поздно разработчики ВКонтакте изменят javascript авторизации и мой код тоже придется менять.
Пожалуй и все)
PS Если что-то непонятно, пишите, буду рад вашим вопросам в комментариях.
Ярлыки: Авторизация ВКонтакте, ВКонтакте API, Python
Комментарии: 3:
Примечание: код работает под windows, версия под symbian на отладке.
Выдаёт ошибку:
Traceback (most recent call last):
File "./main.py", line 85, in
letsdothis = main()
File "./main.py", line 43, in main
print data['user_full_name']
TypeError: string indices must be integers, not str
К сожалению, Вконтакте слишком часто модифицирует систему авторизации. В моем случае нет необходимости следить за работоспособностью этого кода.
Есть один верный вариант. Для symbian появилось официальное приложение http://store.ovi.com/content/123537 Там нет капчи, и видимо, используется не документированный протокол авторизации Вконтакте. Если "проснифферить" трафик этого приложения можно узнать как реализован этот протокол и повторить его на питоне.
Отправить комментарий
Подпишитесь на каналы Комментарии к сообщению [Atom]
<< Главная страница