aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/vk
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2018-03-03 15:10:20 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2018-03-03 15:10:20 +0300
commit768fe6080c0ef35935dce0b271d84d442ce0e641 (patch)
treec4c9c2a5b2dac7ffc1ea218d6fd74375fc3fdc4e /vk
parentREADME update (diff)
downloadvk-scripts-768fe6080c0ef35935dce0b271d84d442ce0e641.tar.gz
vk-scripts-768fe6080c0ef35935dce0b271d84d442ce0e641.zip
switch to VK API version 5.73
Diffstat (limited to 'vk')
-rw-r--r--vk/api.py38
-rw-r--r--vk/tracking/status_tracker.py2
-rw-r--r--vk/user.py2
3 files changed, 26 insertions, 16 deletions
diff --git a/vk/api.py b/vk/api.py
index eb1914e..392d4b8 100644
--- a/vk/api.py
+++ b/vk/api.py
@@ -56,9 +56,16 @@ def _join_path(base, url):
base += '/'
return urllib.parse.urljoin(base, url)
+class Version(Enum):
+ V5_73 = '5.73'
+ DEFAULT = V5_73
+
+ def __str__(self):
+ return self.value
+
class Language(Enum):
- DEFAULT = None
EN = 'en'
+ DEFAULT = EN
def __str__(self):
return self.value
@@ -71,6 +78,7 @@ class Method(Enum):
return self.value
class CommonParameters(Enum):
+ VERSION = 'v'
LANGUAGE = 'lang'
def __str__(self):
@@ -81,11 +89,11 @@ class API:
_SCHEME, _HOST, _ROOT_PATH = _split_url(_ROOT_URL)
- def __init__(self, lang=Language.DEFAULT, deactivated_users=True):
+ def __init__(self, version=Version.DEFAULT, lang=Language.DEFAULT):
self._common_params = {
+ CommonParameters.VERSION: version,
CommonParameters.LANGUAGE: lang,
}
- self._skip_deactivated_users = not deactivated_users
def _build_method_url(self, method, **params):
path = _join_path(self._ROOT_PATH, str(method))
@@ -98,28 +106,30 @@ class API:
try:
with urlopen(url) as response:
response = json.loads(response.read().decode())
+ #print(response)
if 'response' not in response:
raise vk.error.InvalidAPIResponseError(response)
- #print(response)
return response['response']
except (ConnectionError, URLError) as e:
raise vk.error.APIConnectionError(str(e)) from e
- def _should_skip_user(self, user):
- return self._skip_deactivated_users and user.is_deactivated()
-
- def _filter_response_with_users(self, user_list):
+ def _filter_response_with_users(self, user_list, deactivated_users=True):
user_list = map(User.from_api_response, user_list)
- return [user for user in user_list if not self._should_skip_user(user)]
+ if deactivated_users:
+ return user_list
+ return [user for user in user_list if not user.is_deactivated()]
- def users_get(self, user_ids, fields=()):
+ def users_get(self, user_ids, fields=(), deactivated_users=True):
return self._filter_response_with_users(self._call_method(
Method.USERS_GET,
user_ids=_join_param_values(user_ids),
- fields=_join_param_values(fields)))
+ fields=_join_param_values(fields)), deactivated_users)
- def friends_get(self, user_id, fields=()):
- return self._filter_response_with_users(self._call_method(
+ def friends_get(self, user_id, fields=(), deactivated_users=True):
+ response = self._call_method(
Method.FRIENDS_GET,
user_id=user_id,
- fields=_join_param_values(fields)))
+ fields=_join_param_values(fields))
+ if 'items' not in response:
+ raise vk.error.InvalidAPIResponseError(response)
+ return self._filter_response_with_users(response['items'], deactivated_users)
diff --git a/vk/tracking/status_tracker.py b/vk/tracking/status_tracker.py
index d47de39..0dba0f9 100644
--- a/vk/tracking/status_tracker.py
+++ b/vk/tracking/status_tracker.py
@@ -47,7 +47,7 @@ class StatusTracker:
_USER_FIELDS = UserField.DOMAIN, UserField.ONLINE, UserField.LAST_SEEN,
def _query_status(self, uids):
- return {user.get_uid(): user for user in self._api.users_get(uids, self._USER_FIELDS)}
+ return {user.get_uid(): user for user in self._api.users_get(uids, self._USER_FIELDS, deactivated_users=False)}
def _notify_status(self, user):
for fn in self._on_initial_status:
diff --git a/vk/user.py b/vk/user.py
index f63f793..36d4dec 100644
--- a/vk/user.py
+++ b/vk/user.py
@@ -35,7 +35,7 @@ def _parse_online_flag(x):
return _parse_bool(x)
class UserField(Enum):
- UID = 'uid'
+ UID = 'id'
FIRST_NAME = 'first_name'
LAST_NAME = 'last_name'
DEACTIVATED = 'deactivated'