Как установить vk api python
Перейти к содержимому

Как установить vk api python

  • автор:

Установка vk_api python

При установки vk_api на Ubuntu 16.04.5 LTS выдетает ошибка установки.

pip install vk_api Collecting vk_api Using cached https://files.pythonhosted.org/packages/ac/c6/7ab7b58b00c6b06af38ce244515e4c6ad6b8fae0c00d4931c63bcdc803f3/vk_api-11.0.0.tar.gz Complete output from command python setup.py egg_info: Traceback (most recent call last): File "", line 1, in File "/tmp/pip-install-a21j4lkr/vk-api/setup.py", line 16, in long_description = f.read() File "/usr/local/lib/python3.6/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 193: ordinal not in range(128) ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-a21j4lkr/vk-api/ 

Какие варианты ее устранить

Отслеживать

задан 16 сен 2018 в 12:42

6,383 5 5 золотых знаков 25 25 серебряных знаков 57 57 бронзовых знаков

Библиотека vk для работы с VK API на Python

image

Привет, Хабр! Данная статья предназначена для тех, кто хочет разобраться с основами VK API на Python, так как статей по этому поводу нет (на Хабре есть одна статья, но она уже не совсем актуальна, так как некоторые методы не работают), а на других ресурсах мне удалось найти только вопросы пользователей, но никаких гайдов и прочего.

Для работы с VK API в Python есть две популярные библиотеки: vk и vk_api. Какая из библиотек лучше я судить не возьмусь, но скажу одно: у vk документация слишком мала (поэтому разбирался практически методом тыка) и на английском языке, а у vk_api документация более развернута (поэтому писать о данной библиотеке смысла не вижу) и на русском. Для меня не главное на каком языке документация, но для некоторых пользователей это играет большое значение при выборе.

Как вы уже поняли, в данной статье рассматривается работа с библиотекой vk.

Устанавливается данная библиотека следующей стандартной командой:

pip install vk

После того, как модуль будет установлен, нам необходимо создать приложение на сайте соц.сети. Я думаю, что большинство пользователей умеет это делать, поэтому информацию по этому шагу пропускаю. Если кто не умеет, то гуглим, не стесняемся.

После регистрации приложения нам нужен будет только его ID.

Начнем с авторизации. В принципе, некоторую информацию можно получить и без ввода личных данных, что конечно же хорошо, например:

import vk session = vk.Session() vk_api = vk.API(session) vk_api.users.get(user_id=1) 

Таким образом мы получим фамилию, имя и id пользователя с user_id = 1. Если вам нужно получить еще какую-то информацию о пользователе, то в вызове метода нужно указать дополнительные поля, информация о которых должна быть возвращена:

vk_api.users.get(user_id=1, fields=’online, last_seen’)

Т.е. в данном случае мы получим не только информацию об имени и фамилии пользователя с но и информацию о том, находится ли пользователь сейчас на сайте (fields=’online’) и время последнего посещения, а также тип устройства (fields=’ last_seen’).

Действия без авторизации не предоставляют нам возможность использования VK API на полную мощь, поэтому рассмотрим авторизацию с вводом личных данных. Есть два способа: ввод логина и пароля, ввод токена. Чтобы авторизоваться с помощью токена нужно немного дополнить первый пример, а именно вот эту строку:

session = vk.Session(access_token='tocken')

Дальше все остается так же, как и было раньше, без каких-либо изменений.

Следующий способ авторизации – ввод логина и пароля. В данном случае тоже все довольно просто и понятно:

session = vk.AuthSession('id_app', 'login', 'pass') vk_api = vk.API(session)

Как видите, ничего сложного и все настолько просто и понятно, что даже не нуждается в дополнительных комментариях.

При такой авторизации нужно указывать не только логин, пароль и ID приложения, но то, к чему мы хотим получить доступ.

Например, у нас сейчас не указан доступ к стене пользователя, поэтому при попытке добавить запись на стену мы получим ошибку:

vk_api.wall.post(message="hello") Ошибка: vk.exceptions.VkAPIError: 15.

Для того чтобы данный код сработал корректно, при авторизации нужно указать дополнительно аргумент с названием scope и перечислить через запятую те методы, доступ к которым мы хотим получить.

session = vk.AuthSession('id_app', 'login', 'pass', scope=’wall, messages’) vk_api = vk.API(session) vk_api.wall.post(message="hello")

В данном примере я запрашиваю доступ к стене и сообщениям. Выполнение программы завершается корректно, а на стене появляется запись с текстом ‘hello’. Названия методов, к которым возможно получить доступ можно посмотреть на этой странице документации.

Вот и все. Вызов методов происходит по одному шаблону:

vk_api.метод.название(параметры=значения) Например: vk_api.messages.send(users_id=0, messages=’hello’)

Таким образом мы отправляем сообщение hello пользователю с (т.е. самому себе). Названия параметров, которые нужно передавать при вызове какого-либо метода можно найти в документации, в описании самого метода.

Для более наглядной работы библиотеки я реализовал небольшую программку, которая следит когда пользователь зашел в ВК, а когда из него вышел (слабо верится, но может будет кому интересна). Код программы ниже и на GitHub.

Пример программы с использованием библиотеки vk

import datetime from time import sleep import vk def get_status(current_status, vk_api, id): profiles = vk_api.users.get(user_id=id, fields='online, last_seen') if (not current_status) and (profiles[0]['online']): # если появился в сети, то выводим время now = datetime.datetime.now() print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') print('Появился в сети в: ', now.strftime("%d-%m-%Y %H:%M")) return True if (current_status) and (not profiles[0]['online']): # если был онлайн, но уже вышел, то выводим время выхода print('Вышел из сети: ', datetime.datetime.fromtimestamp(profiles[0]['last_seen']['time']).strftime('%d-%m-%Y %H:%M')) print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') return False return current_status if __name__ == '__main__': пользователя: ") session = vk.Session() vk_api = vk.API(session) current_status = False while(True): current_status = get_status(current_status, vk_api, id) sleep(60)

Данная статья предназначалась лишь для понимания основ работы с VK API на Python с использованием библиотеки VK.

vk_api

История выпусков Уведомления о выпусках | Лента RSS

Эта версия

Загрузка файлов

Загрузите файл для вашей платформы. Если вы не уверены, какой выбрать, узнайте больше об установке пакетов.

Источник распределения

Uploaded 25 июн. 2022 г. source

Построенный дистрибутив

Uploaded 25 июн. 2022 г. py3

Хеши для vk_api-11.9.9.tar.gz

Хеши для vk_api-11.9.9.tar.gz

Алгоритм Хеш-дайджест
SHA256 c7741e40bc05980c91ed94c84542e1e7e7370e101b5eaa74222958d4130fe3c2 Копировать
MD5 da25cd23b3315480aa6eb40e246b8411 Копировать
BLAKE2b-256 fc6cb696dcc8f10136f0c1afc98e37a267e46b63301e7f48ab5fc13065f0755f Копировать

Хеши для vk_api-11.9.9-py3-none-any.whl

Хеши для vk_api-11.9.9-py3-none-any.whl

Алгоритм Хеш-дайджест
SHA256 c71021506449afe5b9bbb1c4acb0d86b35a007ddc21678478e46fbbeabd1f3ef Копировать
MD5 453fc6600135f7e8a88d4e8ee7b7f236 Копировать
BLAKE2b-256 55ff2298f424d7a7ef994e295a31911d47f23a6afdb9e880f10b2dc7a9998a8a Копировать

Помощь

О PyPI

Внесение вклада в PyPI

Использование PyPI

Разработано и поддерживается сообществом Python’а для сообщества Python’а.
Пожертвуйте сегодня!

PyPI», «Python Package Index» и логотипы блоков являются зарегистрированными товарными знаками Python Software Foundation.

Парсинг данных через api vk и google sheets api на python

Появилась потребность собирать статистику постов из группы в контакте и затем проанализировать реакции подписчиков на конкретные посты. Если переформулировать на выходе стоит задача с заданной периодичностью снимать показания статистики постов в вк и сохранять их.

Я не профессиональный программист и не претендую, поэтому решил сделать все довольно просто. При помощи api VK забирать посты из группы, собираю нужный мне датафрейм и записываю данные в гугл таблицу, так же через api.

Может быть это и не самое оптимальное решение,

Настраиваем API VK

В этом блоке мы хотим собрать статистику постов из группы vk.

Для начала работы нам нужен user_token из vk. Мне понравилась видеоинструкция здесь, коротко и по делу.

Токен держим в секрете. Переходим в https://dev.vk.com изучаем документацию API.

Прямо на сайте документации можем попробовать дернуть запрос.

Для этого нам нужно access_token, domain, count, v, filter.

access_token – получили на прошлом шаге. domain – название группы вы увидите в url название группы например https://vk.com/adminsclub. count – количество постов которые можем дернуть. v – версия api. filter – хотим получить только посты от группы устанавливаем owner.

vk можно попробовать, как работает сам метод.

Прописываем логику сбора

Импортируем библиотеку requests. Дергаем тестовый запрос. Поcле анализа структуры решаю, что мне нужен раздел items

# переменные TOKEN_USER = #ваш токен VERSION = #версися api vk DOMAIN = #ваш domain # через api vk вызываем статистику постов response = requests.get('https://api.vk.com/method/wall.get', params=) data = response.json()['response']['items']

Отдельное поле в статистики количество фотографий для поста, я не нашел.

Через цикл перебираем каждый пост и считаем количество фото, если фотографии нет скрипт ловит ошибку. Обрабатываем ошибку и ставим 0. Собираем новый список с полями id поста и количество фото.

Пишем обработчик. Вызываем pandas

# считаем сколько фото у поста, заводи все в df id = [] photo = [] for post in data: id.append(post['id']) try: photo.append(len(post['attachments'])) except: photo.append(0) df_photo = pd.DataFrame( )

Переводим cловарь в df. Импортируем метод from pandas import json_normalize

Оставляем нужные атрибуты и переводим дату в другой формат.

В переменной post_id запихиваем id наших постов.

Я бы хотел обогатить свою статистику более расширенными измерениями

Из документации по api о которой рассказывал выше подобрал метод status.getPostReach

В методе обнаружил новый аргумент owner_id, его можно найти в настройках группы.

Делаем еще один запрос и новые данные сохраняем в датафрейм df_stat_post

# вытаскиваем нужные нам столбцы и переводим формат даты df = json_normalize(data) df = df[['id','date','comments.count','likes.count','reposts.count','reposts.wall_count','reposts.mail_count','views.count','text']] df['date']= [datetime.fromtimestamp(df['date'][i]) for i in range(len(df['date']))] # для каждого поста вытаскиваем дополнительную статистику post_id = ','.join(df['id'].astype("str")) response = requests.get('https://api.vk.com/method/stats.getPostReach', params=) data = response.json()['response'] df_stat_post = json_normalize(data)

Теперь приступим к сборке объединяем все наши датафреймы, накидываем дополнительные метрики.

Далее наши данные преобразовываем для загрузки в гугл таблицу.

# объединяем все df cо всеми статистиками и количествам фото df_final = df.merge(df_stat_post, how='left', left_on='id', right_on="post_id") df_final = df_final.merge(df_photo, how='left', left_on='id', right_on="id") df_final.drop(columns='post_id',inplace=True) # добавляем дополнительные столбцы с временем df_final['date_time_report'] = datetime.now() df_final['date_report'] = date.today() df_final['year'] = df_final['date_time_report'].dt.year df_final['month'] = df_final['date_time_report'].dt.month df_final['day'] = df_final['date_time_report'].dt.day df_final['hour'] = df_final['date_time_report'].dt.hour df_final['minute'] = df_final['date_time_report'].dt.minute df_final[['date','date_report','date_time_report']] = df_final[['date','date_report','date_time_report']].astype('str') # сохраняем все значения data_list = df_final.values.tolist()

Грузим в google sheet через api

Есть готовые библиотеки для работы с google sheet например pygsheets, но мне было важно поработать с API поэтому легких путей не искал.

Прежде чем загрузить надо настроить наш api прекрасная статья, в который пошагово написано и даст возможность поиграться с листами https://habr.com/ru/post/483302/

# подключаемся к гугл таблице CREDENTIALS_FILE = # Имя файла с закрытым ключом, вы должны подставить свое # Читаем ключи из файла credentials = ServiceAccountCredentials.from_json_keyfile_name(CREDENTIALS_FILE, ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive']) httpAuth = credentials.authorize(httplib2.Http()) # Авторизуемся в системе service = apiclient.discovery.build('sheets', 'v4', http = httpAuth) # Выбираем работу с таблицами и 4 версию API spreadsheetId = # ваш id лист

После подключения к листу. Находим последнюю заполненную строку.

В моем примере я заполняю последние 10 строк ровно по количеству постов которые я получил из get запроса. Подготавливаем шаблон для запроса, заполняем шаблон данными какие ячейки заполняем и заполняем. Далее выполняем запрос. Готово

# находим последнию строку заполненную response = service.spreadsheets().values().get(spreadsheetId = spreadsheetId,range="Лист номер один!A1:A").execute() # последние 10 строк заполняем number_sheet = "Лист номер один!A" + str(len(response['values'])+1) + ':AA' + str(len(response['values'])+10) # создаем запрос и вставляем туда данные data_vk = < "valueInputOption": "USER_ENTERED", # Данные воспринимаются, как вводимые пользователем (считается значение формул) "data": [ ] > data_vk['data'][0]['range'] = number_sheet data_vk['data'][0]['values'] = data_list # выполняем запрос results = service.spreadsheets().values().batchUpdate(spreadsheetId = spreadsheetId, body = data_vk).execute()

Заключение

После написания этого кода мне требовалось запускать его каждый час и принял решение арендовать сервер, установить туда docker и через crontab запускать.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *