Skip to content

Commit 9393b73

Browse files
committed
4.6
License Apache2 Api version 5.0 Load photos in messages
1 parent e2c1e66 commit 9393b73

10 files changed

Lines changed: 201 additions & 60 deletions

File tree

LICENSE

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Copyright 2011-2013 Kirill Python
2+
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
7+
http://www.apache.org/licenses/LICENSE-2.0
8+
9+
Unless required by applicable law or agreed to in writing, software
10+
distributed under the License is distributed on an "AS IS" BASIS,
11+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
See the License for the specific language governing permissions and
13+
limitations under the License.

example.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
'''
2+
@author: Kirill Python
3+
@contact: http://vk.com/python273
4+
@license Apache License, Version 2.0, see LICENSE file
5+
6+
Copyright (C) 2013
7+
'''
8+
19
# -*- coding: utf-8 -*-
210
import vk_api
311

4-
__author__ = "Kirill Python"
5-
__email__ = "mikeking568@gmail.com"
6-
__contact__ = "https://vk.com/python273"
7-
812

913
def main():
1014
u""" Пример получения последнего сообщения со стены """

jconfig/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
'''
2+
@author: Kirill Python
3+
@contact: http://vk.com/python273
4+
@license Apache License, Version 2.0, see LICENSE file
5+
6+
Copyright (C) 2013
7+
'''
8+
19
__author__ = "Kirill Python"
210
__version__ = "1.1"
311
__email__ = "mikeking568@gmail.com"

jconfig/jconfig.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
'''
2+
@author: Kirill Python
3+
@contact: http://vk.com/python273
4+
@license Apache License, Version 2.0, see LICENSE file
5+
6+
Copyright (C) 2013
7+
'''
8+
19
# -*- coding: utf-8 -*-
210
import os
311
import json

setup.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
1+
'''
2+
@author: Kirill Python
3+
@contact: http://vk.com/python273
4+
@license Apache License, Version 2.0, see LICENSE file
5+
6+
Copyright (C) 2013
7+
'''
8+
19
#!/usr/bin/env python
210
""" Setup file for vk_api package """
311

412
from distutils.core import setup
513
setup(name='vk_api',
6-
version='4.5',
14+
version='4.6',
715
description='Module to use API VKontakte vk.com',
816
author='Kirill Python',
917
author_email='mikeking568@gmail.com',
1018
url='https://github.com/python273/vk_api',
11-
packages=['vk_api', 'vk_api.upload', 'jconfig'],
19+
packages=['vk_api', 'jconfig'],
1220
)

vk_api/__init__.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
1+
'''
2+
@author: Kirill Python
3+
@contact: http://vk.com/python273
4+
@license Apache License, Version 2.0, see LICENSE file
5+
6+
Copyright (C) 2013
7+
'''
8+
19
__author__ = "Kirill Python"
2-
__version__ = "4.5"
10+
__version__ = "4.6"
311
__email__ = "mikeking568@gmail.com"
412
__contact__ = "https://vk.com/python273"
513

6-
714
import sys
15+
816
if sys.version_info[0] == 2:
917
from vk_api import *
18+
from vk_upload import *
1019
else:
1120
from .vk_api import *
21+
from .vk_upload import *

vk_api/upload/__init__.py

Lines changed: 0 additions & 5 deletions
This file was deleted.

vk_api/upload/vk_upload.py

Lines changed: 0 additions & 19 deletions
This file was deleted.

vk_api/vk_api.py

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,53 @@
1+
'''
2+
@author: Kirill Python
3+
@contact: http://vk.com/python273
4+
@license Apache License, Version 2.0, see LICENSE file
5+
6+
Copyright (C) 2013
7+
'''
8+
19
# -*- coding: utf-8 -*-
210
import jconfig
311
import re
412
import requests
13+
import time
514

615

716
class VkApi():
817
def __init__(self,
918
login=None, password=None, number=None,
1019
sid=None, token=None,
11-
app_id=2895443, scope=2097151, proxies=None):
12-
u""" Данные для авторизации:
13-
login, password
14-
15-
number - На случай проверки безопасности
16-
Номер: +7 12345678 90
17-
Передавать в number: 12345678
18-
19-
Для авторизации без логина и пароля:
20-
sid, token
21-
22-
app_id - айди Standalone-приложения
23-
scope - права приложения числом
24-
proxies - использование прокси
25-
{'http': 'http://127.0.0.1:8888/',
26-
'https' : 'https://127.0.0.1:8888/'}
27-
28-
"""
20+
proxies=None,
21+
version='5.0', app_id=2895443, scope=2097151):
22+
'''
23+
:param login: Логин ВКонтакте
24+
:param password: Пароль ВКонтакте
25+
:param number: Номер при проверке безопасности
26+
Номер: +7 12345678 90
27+
number = 12345678
28+
:param sid: cookie remixsid
29+
:param token: access_token
30+
:param proxies: proxy server
31+
{'http': 'http://127.0.0.1:8888/',
32+
'https' : 'https://127.0.0.1:8888/'}
33+
:param version: Версия API (default: '5.0')
34+
:param app_id: Standalone-приложение (default: 2895443)
35+
:param scope: Запрашиваемые права (default: 2097151)
36+
'''
2937

3038
self.login = login
3139
self.password = password
3240
self.number = number
3341

3442
self.sid = sid
3543
self.token = {'access_token': token}
36-
self.settings = jconfig.config(login)
3744

45+
self.version = version
3846
self.app_id = app_id
3947
self.scope = scope
4048

49+
self.settings = jconfig.config(login)
50+
4151
self.http = requests.Session()
4252
self.http.proxies = proxies # Ставим прокси
4353
self.http.headers = { # Притворимся браузером
@@ -57,7 +67,7 @@ def __init__(self,
5767
self.api_login()
5868

5969
def vk_login(self, captcha_sid=None, captcha_key=None):
60-
u""" Авторизцаия ВКонтакте с получением cookies remixsid """
70+
''' Авторизцаия ВКонтакте с получением cookies remixsid '''
6171

6272
url = 'https://login.vk.com/'
6373
values = {
@@ -115,7 +125,7 @@ def vk_login(self, captcha_sid=None, captcha_key=None):
115125
raise authorization_error('Authorization error (enter number)')
116126

117127
def check_sid(self):
118-
u""" Прверка Cookies remixsid на валидность """
128+
''' Прверка Cookies remixsid на валидность '''
119129

120130
if self.sid:
121131
url = 'https://vk.com/feed2.php'
@@ -131,7 +141,7 @@ def check_sid(self):
131141
return response
132142

133143
def api_login(self):
134-
u""" Получение токена через Desktop приложение """
144+
''' Получение токена через Desktop приложение '''
135145

136146
url = 'https://oauth.vk.com/authorize'
137147
values = {
@@ -163,7 +173,7 @@ def api_login(self):
163173
raise authorization_error('Authorization error (api)')
164174

165175
def check_token(self):
166-
u""" Прверка access_token на валидность """
176+
''' Прверка access_token на валидность '''
167177

168178
if self.token.get('access_token'):
169179
try:
@@ -174,21 +184,24 @@ def check_token(self):
174184
return True
175185

176186
def method(self, method, values=None):
177-
u""" Использование методов API
187+
''' Использование методов API
178188
179189
method - название метода
180190
'users.get'
181191
182192
values - параметры
183193
{'uids': 1}
184-
185-
"""
194+
'''
186195

187196
url = 'https://api.vk.com/method/%s' % method
188197

189198
if not values:
190199
values = {}
191-
values.update({'access_token': self.token['access_token']})
200+
201+
values.update({'v': self.version})
202+
203+
if self.token:
204+
values.update({'access_token': self.token['access_token']})
192205

193206
response = self.http.post(url, values).json()
194207
if 'error' in response:
@@ -198,7 +211,7 @@ def method(self, method, values=None):
198211

199212

200213
def regexp(reg, string):
201-
u""" Поиск по регулярке """
214+
''' Поиск по регулярке '''
202215

203216
reg = re.compile(reg, re.IGNORECASE | re.DOTALL)
204217
reg = reg.findall(string)

vk_api/vk_upload.py

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
'''
2+
@author: Kirill Python
3+
@contact: http://vk.com/python273
4+
@license Apache License, Version 2.0, see LICENSE file
5+
6+
Copyright (C) 2013
7+
'''
8+
9+
# -*- coding: utf-8 -*-
10+
11+
12+
class VkUpload():
13+
def __init__(self, vk):
14+
self.vk = vk
15+
# https://vk.com/dev/upload_files
16+
17+
def photo(self, photos, album_id=None, group_id=None):
18+
''' Загрузка изображений в альбом пользователя
19+
20+
photos = ['photo1.jpg', 'img.png']
21+
= 'screen.png'
22+
Максимум 5 фотографий
23+
24+
album_id
25+
'''
26+
27+
if not (album_id and photos):
28+
return False
29+
30+
if type(photos) == str: # upload.photo('photo.jpg', ...)
31+
photos = [photos]
32+
33+
values = {
34+
'album_id': album_id
35+
}
36+
if group_id: # Если загружаем в группу
37+
values.update({'group_id': group_id})
38+
39+
# Получаем ссылку для загрузки
40+
url = self.vk.method('photos.getUploadServer', values)['upload_url']
41+
42+
# Загружаем
43+
photos_files = openPhotos(photos)
44+
response = self.vk.http.post(url, files=photos_files).json()
45+
closePhotos(photos_files)
46+
47+
# Олег Илларионов:
48+
# это не могу к сожалению просто пофиксить
49+
if not 'album_id' in response:
50+
response['album_id'] = response['aid']
51+
52+
# Сохраняем фото в альбоме
53+
response = self.vk.method('photos.save', response)
54+
55+
return response
56+
57+
def photoMessages(self, photos, group_id=None):
58+
''' Загрузка изображений в сообщения
59+
60+
photos = ['photo1.jpg', 'img.png']
61+
= 'screen.png'
62+
Максимум 7(?) фотографий
63+
'''
64+
65+
if not photos:
66+
return False
67+
68+
if type(photos) == str: # upload.photo('photo.jpg', ...)
69+
photos = [photos]
70+
71+
values = {}
72+
if group_id:
73+
values.update({'group_id': group_id})
74+
75+
# Получаем ссылку для загрузки
76+
url = self.vk.method('photos.getMessagesUploadServer', values)['upload_url']
77+
78+
# Загружаем
79+
photos_files = openPhotos(photos)
80+
response = self.vk.http.post(url, files=photos_files)
81+
closePhotos(photos_files)
82+
83+
# Сохраняем фото в альбоме
84+
response = self.vk.method('photos.saveMessagesPhoto', response.json())
85+
86+
return response
87+
88+
89+
def openPhotos(photos_paths):
90+
photos = {}
91+
92+
for x, filename in enumerate(photos_paths): # Открываем файлы
93+
photos.update(
94+
{'file%s' % x: open(filename, 'rb')}
95+
)
96+
97+
return photos
98+
99+
def closePhotos(photos):
100+
for i in photos:
101+
photos[i].close()

0 commit comments

Comments
 (0)