diff --git a/LICENSE b/LICENSE index 0f9d7082..467d219c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2011-2013 Kirill Python +Copyright 2011-2014 Kirill Python Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/setup.py b/setup.py index 2233c14f..56e83a5b 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ from distutils.core import setup setup( name='vk_api', - version='4.7.1', + version='4.7.5', author='Kirill Python', author_email='siberianpython@gmail.com', url='https://github.com/python273/vk_api', diff --git a/vk_api/__init__.py b/vk_api/__init__.py index ad594b69..32b062e1 100644 --- a/vk_api/__init__.py +++ b/vk_api/__init__.py @@ -9,7 +9,7 @@ """ __author__ = 'Kirill Python' -__version__ = '4.7.1' +__version__ = '4.7.5' __email__ = 'siberianpython@gmail.com' __contact__ = 'https://vk.com/python273' diff --git a/vk_api/vk_api.py b/vk_api/vk_api.py index c35dfb75..83debb19 100644 --- a/vk_api/vk_api.py +++ b/vk_api/vk_api.py @@ -163,7 +163,7 @@ def security_check(self, url=None, response=None): if response.text.split('')[4] == '4': return True - raise SecurityCheck('Enter number') + raise SecurityCheck(phone_prefix, phone_postfix) def check_sid(self): """ Прверка Cookies remixsid на валидность """ @@ -331,7 +331,14 @@ class BadPassword(AuthorizationError): class SecurityCheck(AuthorizationError): - pass + def __init__(self, phone_prefix, phone_postfix): + self.phone_prefix = phone_prefix + self.phone_postfix = phone_postfix + + def __str__(self): + return 'Security check. Enter number: {}...{}'.format( + self.phone_prefix, self.phone_postfix + ) class ApiError(Exception): diff --git a/vk_api/vk_upload.py b/vk_api/vk_upload.py index 775765df..425c0ade 100644 --- a/vk_api/vk_upload.py +++ b/vk_api/vk_upload.py @@ -14,27 +14,29 @@ def __init__(self, vk): self.vk = vk # https://vk.com/dev/upload_files - def photo(self, photos, album_id=None, group_id=None): + def photo(self, photos, album_id, + latitude=None, longitude=None, caption=None, description=None, + group_id=None): """ Загрузка изображений в альбом пользователя - photos = ['photo1.jpg', 'img.png'] - = 'screen.png' - Максимум 5 фотографий - - album_id + :param photos: список путей к изображениям, либо путь к изображению + :param album_id: идентификатор альбома + :param latitude: географическая широта, заданная в градусах + (от -90 до 90) + :param longitude: географическая долгота, заданная в градусах + (от -180 до 180) + :param caption: текст описания изображения + :param description: текст описания альбома + :param group_id: идентификатор сообщества (если загрузка идет в группу) """ - if not (album_id and photos): - return False - - if type(photos) == str: # upload.photo('photo.jpg', ...) + if type(photos) == str: photos = [photos] values = { - 'album_id': album_id + 'album_id': album_id, + 'group_id': group_id } - if group_id: # Если загружаем в группу - values.update({'group_id': group_id}) # Получаем ссылку для загрузки url = self.vk.method('photos.getUploadServer', values)['upload_url'] @@ -49,43 +51,87 @@ def photo(self, photos, album_id=None, group_id=None): if not 'album_id' in response: response['album_id'] = response['aid'] + response.update({ + 'latitude': latitude, + 'longitude': longitude, + 'caption': caption, + 'description': description + }) + # Сохраняем фото в альбоме response = self.vk.method('photos.save', response) return response - def photoMessages(self, photos, group_id=None): + def photo_messages(self, photos): """ Загрузка изображений в сообщения - photos = ['photo1.jpg', 'img.png'] - = 'screen.png' - Максимум 7(?) фотографий + :param photos: список путей к изображениям, либо путь к изображению """ - if not photos: - return False - - if type(photos) == str: # upload.photo('photo.jpg', ...) + if type(photos) == str: photos = [photos] values = {} - if group_id: - values.update({'group_id': group_id}) - # Получаем ссылку для загрузки url = self.vk.method('photos.getMessagesUploadServer', values) url = url['upload_url'] - # Загружаем photos_files = openPhotos(photos) response = self.vk.http.post(url, files=photos_files) closePhotos(photos_files) - # Сохраняем фото в альбоме response = self.vk.method('photos.saveMessagesPhoto', response.json()) return response + def photo_wall(self, photos, group_id=None): + """ Загрузка изображений на стену пользователя или в группу + + :param photos: список путей к изображениям, либо путь к изображению + :param group_id: идентификатор сообщества (если загрузка идет в группу) + """ + + if type(photos) == str: + photos = [photos] + + values = {'group_id': group_id} + + response = self.vk.method('photos.getWallUploadServer', values) + url = response['upload_url'] + + photos_files = openPhotos(photos) + response = self.vk.http.post(url, files=photos_files) + closePhotos(photos_files) + + response = self.vk.method('photos.saveWallPhoto', response.json()) + + return response + + def document(self, file_path, title=None, tags=None, group_id=None): + """ Загрузка документа + + :param file_path: путь к документу + :param title: название документа + :param tags: метки для поиска + :param group_id: идентификатор сообщества (если загрузка идет в группу) + """ + + values = {'group_id': group_id} + url = self.vk.method('docs.getUploadServer', values)['upload_url'] + + with open(file_path, 'rb') as file: + response = self.vk.http.post(url, files={'file': file}).json() + + response.update({ + 'title': title, + 'tags': tags + }) + + response = self.vk.method('docs.save', response) + + return response + def openPhotos(photos_paths): photos = {}