@@ -34,7 +34,8 @@ class VkApi(object):
3434 def __init__ (self , login = None , password = None , number = None , sec_number = None ,
3535 token = None ,
3636 proxies = None , captcha_handler = None , config_filename = 'vk_config.json' ,
37- api_version = '5.33' , app_id = 2895443 , scope = 2097151 ):
37+ api_version = '5.33' , app_id = 2895443 , scope = 2097151 ,
38+ client_secret = None ):
3839 """
3940 :param login: Логин ВКонтакте
4041 :param password: Пароль ВКонтакте
@@ -55,6 +56,8 @@ def __init__(self, login=None, password=None, number=None, sec_number=None,
5556 :param api_version: Версия API (default: '5.33')
5657 :param app_id: Standalone-приложение (default: 2895443)
5758 :param scope: Запрашиваемые права (default: 2097151)
59+ :param client_secret: Защищенный ключ приложения для серверной
60+ авторизации (https://vk.com/dev/auth_server)
5861 """
5962
6063 self .login = login
@@ -68,6 +71,7 @@ def __init__(self, login=None, password=None, number=None, sec_number=None,
6871 self .api_version = api_version
6972 self .app_id = app_id
7073 self .scope = scope
74+ self .client_secret = client_secret
7175
7276 self .settings = jconfig .Config (login , filename = config_filename )
7377
@@ -221,6 +225,9 @@ def check_sid(self):
221225 def api_login (self ):
222226 """ Получение токена через Desktop приложение """
223227
228+ if not self .sid :
229+ raise AuthorizationError ('API authorization error (no sid cookie)' )
230+
224231 url = 'https://oauth.vk.com/authorize'
225232 values = {
226233 'client_id' : self .app_id ,
@@ -250,12 +257,29 @@ def api_login(self):
250257 else :
251258 raise AuthorizationError ('Authorization error (api)' )
252259
260+ def server_auth (self ):
261+ """ Серверная авторизация """
262+ values = {
263+ 'client_id' : self .app_id ,
264+ 'client_secret' : self .client_secret ,
265+ 'v' : self .api_version ,
266+ 'grant_type' : 'client_credentials'
267+ }
268+
269+ response = self .http .post (
270+ 'https://oauth.vk.com/access_token' , values ).json ()
271+
272+ if 'error' in response :
273+ raise AuthorizationError (response ['error_description' ])
274+ else :
275+ self .token = response
276+
253277 def check_token (self ):
254278 """ Проверка access_token на валидность """
255279
256280 if self .token :
257281 try :
258- self .method ('isAppUser ' )
282+ self .method ('stats.trackVisitor ' )
259283 except ApiError :
260284 return False
261285
0 commit comments