Skip to content

Commit 43539bf

Browse files
authored
Merge pull request #77 from python273/v9
vk_api v9.0
2 parents 531bf06 + 8c05233 commit 43539bf

19 files changed

Lines changed: 662 additions & 259 deletions

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ MANIFEST
88
.pydevproject
99
.settings/
1010
testing/
11-
tests/config.py
12-
tests/vk_config.json
11+
tests/
1312
vk_config.json
13+
vk_config.v2.json

doc/VkApi.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# class VkApi(object):
2+
3+
## Methods defined here:
4+
### \_\_init\_\_
5+
6+
- login (default: `None`) — Логин ВКонтакте (лучше использовать номер телефона для автоматического обхода проверки безопасности)
7+
- password (default: `None`) — Пароль ВКонтакте (если пароль не передан, то будет попытка использовать сохраненные данные)
8+
- token (default: `None`; type: `str`) — access_token
9+
- auth_handler (default: `None`) — Функция для обработки двухфакторной аутентификации, должна возвращать строку с кодом и булевое значение, означающее, стоит ли запомнить это устройство, для прохождения аутентификации.
10+
- captcha_handler (default: `None`) — Функция для обработки капчи
11+
- config (default: `<class 'jconfig.jconfig.Config'>`) — Класс для сохранения настроек
12+
- config_filename (default: `'vk_config.v2.json'`) — Расположение config файла
13+
- api_version (default: `'5.63'`; type: `str`) — Версия API
14+
- app_id (default: `2895443`; type: `int`) — Standalone-приложение
15+
- scope (default: `33554431`; types: `int`, `str`) — Запрашиваемые права (можно передать строкой или числом)
16+
- client_secret (default: `None`) — Защищенный ключ приложения для серверной авторизации ([https://vk.com/dev/auth_server](https://vk.com/dev/auth_server))
17+
18+
### api_login
19+
Получение токена через Desktop приложение
20+
21+
### auth
22+
Аутентификация
23+
- reauth (default: `False`) — Позволяет переавторизиваться, игнорируя сохраненные куки и токен
24+
- token_only (default: `False`) — Включает оптимальную стратегию аутентификации, если необходим только access_token Например если сохраненные куки не валидны, но токен валиден, то аутентификация пройдет успешно При token_only=False, сначала проверяется валидность куки. Если кука не будет валидна, то будет произведена попытка аутетификации с паролем. Тогда если пароль не верен или пароль не передан, то аутентификация закончится с ошибкой. Если вы не делаете запросы к веб версии сайта используя куки, то лучше использовать token_only=True
25+
26+
### auth_handler
27+
Обработчик двухфакторной аутентификации
28+
29+
### captcha_handler
30+
Обработчик капчи ([http://vk.com/dev/captcha_error](http://vk.com/dev/captcha_error))
31+
- captcha — объект исключения `Captcha`
32+
33+
### check_sid
34+
Проверка Cookies remixsid на валидность
35+
36+
### check_token
37+
Проверка access_token на валидность
38+
39+
### get_api
40+
Возвращает VkApiMethod(self) Позволяет обращаться к методам API как к обычным классам. Например vk.wall.get(...)
41+
42+
### http_handler
43+
Обработчик ошибок соединения
44+
- error — исключение
45+
46+
### method
47+
Вызов метода API
48+
- method (type: `str`) — имя метода
49+
- values (default: `None`; type: `dict`) — параметры
50+
- captcha_sid (default: `None`) — id капчи
51+
- captcha_key (default: `None`; type: `str`) — ответ капчи
52+
- raw (default: `False`; type: `bool`) — при False возвращает `response['response']` при True возвращает `response` (может понадобиться для метода execute для получения execute_errors)
53+
54+
### need_validation_handler
55+
Обработчик проверки безопасности при запросе API ([http://vk.com/dev/need_validation](http://vk.com/dev/need_validation))
56+
- error — исключение
57+
58+
### security_check
59+
Функция для обхода проверки безопасности (запрос номера телефона)
60+
- response (default: `None`) — ответ предыдущего запроса, если есть
61+
62+
### server_auth
63+
Серверная авторизация
64+
65+
### too_many_rps_handler
66+
Обработчик ошибки "Слишком много запросов в секунду". Ждет пол секунды и пробудет отправить запрос заново
67+
- error — исключение
68+
69+
### twofactor
70+
Двухфакторная аутентификация
71+
- auth_response — страница с приглашением к аутентификации
72+
73+
### vk_login
74+
Авторизация ВКонтакте с получением cookies remixsid
75+
- captcha_sid (default: `None`) — id капчи
76+
- captcha_key (default: `None`; type: `str`) — ответ капчи
77+
78+
## Data and other attributes defined here:
79+
**RPS_DELAY** = 0.34
80+

doc/VkTools.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# class VkTools(object):
2+
Содержит некоторые воспомогательные функции, которые могут понадобиться при использовании API
3+
4+
## Methods defined here:
5+
### \_\_init\_\_
6+
7+
- vk — объект VkApi
8+
9+
### get_all
10+
Использовать только если нужно загрузить все объекты в память. Eсли вы можете обрабатывать объекты по частям, то лучше использовать get_all_iter Например если вы записываете объекты в БД, то нет смысла загружать все данные в память
11+
12+
### get_all_iter
13+
Получить все элементы. Работает в методах, где в ответе есть count и items или users. За один запрос получает max_count * 25 элементов
14+
- method (type: `str`) — имя метода
15+
- max_count (type: `int`) — максимальное количество элементов, которое можно получить за один запрос
16+
- values (default: `None`; type: `dict`) — параметры
17+
- key (default: `'items'`; type: `str`) — ключ элементов, которые нужно получить
18+
- limit (default: `None`; type: `int`) — ограничение на кол-во получаемых элементов, но может прийти больше
19+
20+
### get_all_slow
21+
Использовать только если нужно загрузить все объекты в память. Eсли вы можете обрабатывать объекты по частям, то лучше использовать get_all_slow_iter Например если вы записываете объекты в БД, то нет смысла загружать все данные в память
22+
23+
### get_all_slow_iter
24+
Получить все элементы (без использования execute) Работает в методах, где в ответе есть count и items или users
25+
- method (type: `str`) — имя метода
26+
- max_count (type: `int`) — максимальное количество элементов, которое можно получить за один запрос
27+
- values (default: `None`; type: `dict`) — параметры
28+
- key (default: `'items'`; type: `str`) — ключ элементов, которые нужно получить
29+
- limit (default: `None`; type: `int`) — ограничение на кол-во получаемых элементов, но может прийти больше
30+

doc/VkUpload.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# class VkUpload(object):
2+
3+
## Methods defined here:
4+
### \_\_init\_\_
5+
6+
- vk — объект VkApi
7+
8+
### audio
9+
Загрузка аудио
10+
- audio — путь к аудиофайлу или file-like объект
11+
- artist — исполнитель
12+
- title — название
13+
14+
### document
15+
Загрузка документа
16+
- doc — путь к документу или file-like объект
17+
- title (default: `None`) — название документа
18+
- tags (default: `None`) — метки для поиска
19+
- group_id (default: `None`) — идентификатор сообщества (если загрузка идет в группу)
20+
- to_wall (default: `False`) — загрузить на стену
21+
22+
### document_wall
23+
Загрузка документа в папку Отправленные, для последующей отправки документа на стену или личным сообщением.
24+
- doc — путь к документу или file-like объект
25+
- title (default: `None`) — название документа
26+
- tags (default: `None`) — метки для поиска
27+
- group_id (default: `None`) — идентификатор сообщества (если загрузка идет в группу)
28+
29+
### photo
30+
Загрузка изображений в альбом пользователя
31+
- photos (types: `str`, `list`) — путь к изображению(ям) или file-like объект(ы)
32+
- album_id — идентификатор альбома
33+
- latitude (default: `None`) — географическая широта, заданная в градусах (от -90 до 90)
34+
- longitude (default: `None`) — географическая долгота, заданная в градусах (от -180 до 180)
35+
- caption (default: `None`) — текст описания изображения
36+
- description (default: `None`) — текст описания альбома
37+
- group_id (default: `None`) — идентификатор сообщества (если загрузка идет в группу)
38+
39+
### photo_chat
40+
Загрузка и смена обложки в беседе
41+
- photo — путь к изображению или file-like объект
42+
- chat_id — ID беседы
43+
44+
### photo_messages
45+
Загрузка изображений в сообщения
46+
- photos (types: `str`, `list`) — путь к изображению(ям) или file-like объект(ы)
47+
48+
### photo_profile
49+
Загрузка изображения профиля
50+
- photo — путь к изображению или file-like объект
51+
- owner_id (default: `None`) — идентификатор сообщества или текущего пользователя. По умолчанию загрузка идет в профиль текущего пользователя. При отрицательном значении загрузка идет в группу.
52+
- crop_x (default: `None`) — координата X верхнего правого угла миниатюры.
53+
- crop_y (default: `None`) — координата Y верхнего правого угла миниатюры.
54+
- crop_width (default: `None`) — сторона квадрата миниатюры. При передаче всех crop_* для фотографии также будет подготовлена квадратная миниатюра.
55+
56+
### photo_wall
57+
Загрузка изображений на стену пользователя или в группу
58+
- photos (types: `str`, `list`) — путь к изображению(ям) или file-like объект(ы)
59+
- user_id (default: `None`) — идентификатор пользователя
60+
- group_id (default: `None`) — идентификатор сообщества (если загрузка идет в группу)
61+
62+
### video
63+
Загрузка видео
64+
- video_file (default: `None`; types: `object`, `str`) — путь до файла или file-like объект.
65+
- link (default: `None`; type: `str`) — url для встраивания видео с внешнего сайта, например, с Youtube.
66+
- name (default: `None`; type: `str`) — название видеофайла
67+
- description (default: `None`; type: `str`) — описание видеофайла
68+
- is_private (default: `False`; type: `bool`) — указывается 1, если видео загружается для отправки личным сообщением. После загрузки с этим параметром видеозапись не будет отображаться в списке видеозаписей пользователя и не будет доступна другим пользователям по ее идентификатору.
69+
- wallpost (default: `False`; type: `bool`) — требуется ли после сохранения опубликовать запись с видео на стене.
70+
- group_id (default: `None`; type: `int`) — идентификатор сообщества, в которое будет сохранен видеофайл. По умолчанию файл сохраняется на страницу текущего пользователя.
71+
- album_id (default: `None`; type: `int`) — идентификатор альбома, в который будет загружен видео файл.
72+
- privacy_view (default: `None`) — настройки приватности просмотра видеозаписи в специальном формате. ([https://vk.com/dev/objects/privacy](https://vk.com/dev/objects/privacy)) Приватность доступна для видеозаписей, которые пользователь загрузил в профиль. (список слов, разделенных через запятую)
73+
- privacy_comment (default: `None`) — настройки приватности комментирования видеозаписи в специальном формате. ([https://vk.com/dev/objects/privacy](https://vk.com/dev/objects/privacy))
74+
- no_comments (default: `False`; type: `bool`) — 1 — закрыть комментарии (для видео из сообществ).
75+
- repeat (default: `False`; type: `bool`) — зацикливание воспроизведения видеозаписи. флаг.
76+

jconfig/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"""
99

1010
__author__ = 'Kirill Python'
11-
__version__ = '2.1'
11+
__version__ = '3.0'
1212
__email__ = 'whoami@python273.pw'
1313
__contact__ = 'https://vk.com/python273'
1414

jconfig/base.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
@author: python273
4+
@contact: https://vk.com/python273
5+
@license Apache License, Version 2.0, see LICENSE file
6+
7+
Copyright (C) 2017
8+
"""
9+
10+
11+
class BaseConfig(object):
12+
13+
__slots__ = ('section_name', '_settings', '_section')
14+
15+
def __init__(self, section, **kwargs):
16+
self.section_name = section
17+
18+
self._settings = self.load(**kwargs)
19+
self._section = self._settings.setdefault(section, {})
20+
21+
def __getattr__(self, name):
22+
return self._section.get(name)
23+
24+
__getitem__ = __getattr__
25+
26+
def __setattr__(self, name, value):
27+
if name in self.__slots__:
28+
return super(BaseConfig, self).__setattr__(name, value)
29+
30+
self._section[name] = value
31+
32+
__setitem__ = __setattr__
33+
34+
def setdefault(self, k, d=None):
35+
return self._section.setdefault(k, d)
36+
37+
def clear_section(self):
38+
self._section.clear()
39+
40+
def load(self, **kwargs):
41+
raise NotImplementedError
42+
43+
def save(self):
44+
raise NotImplementedError

jconfig/jconfig.py

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,42 +9,26 @@
99

1010
import json
1111

12+
from .base import BaseConfig
1213

13-
class Config(object):
14-
__slots__ = ('_section', '_filename', '_settings')
1514

16-
def __init__(self, section, filename='.jconfig'):
17-
self._section = section
18-
self._filename = filename
19-
self._settings = self.load()
20-
21-
def __getattr__(self, name):
22-
return self._settings[self._section].get(name)
23-
24-
def __getitem__(self, key):
25-
return self.__getattr__(key)
15+
class Config(BaseConfig):
2616

27-
def __setattr__(self, name, value):
28-
if name.startswith('_'):
29-
super(Config, self).__setattr__(name, value)
30-
return
17+
__slots__ = BaseConfig.__slots__ + ('_filename',)
3118

32-
self._settings[self._section][name] = value
33-
34-
def __setitem__(self, key, value):
35-
return self.__setattr__(key, value)
19+
def __init__(self, section, filename='.jconfig'):
20+
self._filename = filename
3621

37-
def clear_section(self):
38-
self._settings[self._section] = {}
22+
super(Config, self).__init__(section, filename=filename)
3923

40-
def load(self):
24+
def load(self, filename, **kwargs):
4125
try:
42-
with open(self._filename, 'r') as f:
26+
with open(filename, 'r') as f:
4327
settings = json.load(f)
4428
except (IOError, ValueError):
4529
settings = {}
4630

47-
settings.setdefault(self._section, {})
31+
settings.setdefault(self.section_name, {})
4832

4933
return settings
5034

jconfig/memory.py

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,12 @@
77
Copyright (C) 2017
88
"""
99

10+
from .base import BaseConfig
1011

11-
class MemoryConfig(object):
1212

13-
__slots__ = ('_section', '_settings')
14-
15-
def __init__(self, section, filename=None, settings=None):
16-
self._section = section
17-
18-
if settings is not None:
19-
self._settings = settings
20-
else:
21-
self._settings = {}
22-
23-
self._settings.setdefault(section, {})
24-
25-
def __getattr__(self, name):
26-
return self._settings[self._section].get(name)
27-
28-
def __getitem__(self, key):
29-
return self.__getattr__(key)
30-
31-
def __setattr__(self, name, value):
32-
if name.startswith('_'):
33-
return super(MemoryConfig, self).__setattr__(name, value)
34-
35-
self._settings[self._section][name] = value
36-
37-
def __setitem__(self, key, value):
38-
return self.__setattr__(key, value)
39-
40-
def clear_section(self):
41-
self._settings[self._section] = {}
13+
class MemoryConfig(BaseConfig):
14+
def load(self, settings=None, **kwargs):
15+
return {} if settings is None else settings
4216

4317
def save(self):
4418
pass

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from distutils.core import setup
44

55
"""
6-
@author: Kirill Python
6+
@author: python273
77
@contact: https://vk.com/python273
88
@license Apache License, Version 2.0, see LICENSE file
99
@@ -13,7 +13,7 @@
1313

1414
setup(
1515
name='vk_api',
16-
version='8.9',
16+
version='9.0',
1717
author='python273',
1818
author_email='whoami@python273.pw',
1919
url='https://github.com/python273/vk_api',

vk_api/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
from .vk_api import VkApi
77

88
"""
9-
@author: Kirill Python
9+
@author: python273
1010
@contact: https://vk.com/python273
1111
@license Apache License, Version 2.0, see LICENSE file
1212
1313
Copyright (C) 2017
1414
"""
1515

1616
__author__ = 'Kirill Python'
17-
__version__ = '8.9'
17+
__version__ = '9.0'
1818
__email__ = 'whoami@python273.pw'
1919
__contact__ = 'https://vk.com/python273'

0 commit comments

Comments
 (0)