Трансформируем ваши данные в прибыль

Пн — Пт: с 10:00 до 19:00

ГлавнаяБлогЗагрузка файлов в группу Вконтакте при помощи Python

Загрузка файлов в группу Вконтакте при помощи Python

4 минут(ы)

ВВЕДЕНИЕ

В настоящее время социальные сети стали неотъемлемой частью нашей повседневной жизни, и одной из самых популярных сетей является Вконтакте. Вконтакте предоставляет широкие возможности для взаимодействия и обмена информацией между пользователями. Одним из важных аспектов использования Вконтакте является возможность загрузки и обмена файлами.

В этой статье мы рассмотрим, как загружать файлы в группу Вконтакте при помощи языка программирования Python. Рассмотрим различные методы и функции, предоставляемые Вконтакте API, для выполнения задачи загрузки файлов в группу Вконтакте. Возможность загрузки файлов может быть полезна во многих сценариях, например, для автоматической публикации новостей, обновлений или других типов контента в группе.

1. Получения токена доступа для работы с API Вконтакте

В предыдущей статье мы рассмотрели процесс загрузки видео в группу в Вконтакте. Для взаимодействия с API Вконтакте необходимо было создать приложение. В этой же статье, для работы с файлами в группе в Вконтакте необходимо создать отдельный ключ доступа с определенными правами.
Переходим в настройки группы в раздел Работа с API и жмем Создать ключ.

Настройки группы в раздел Работа с API и жмем Создать ключ
В появившемся окне выбираем права на управление сообществом и на доступ к документам сообщества и жмем Создать

Права на управление сообществом

Полученный ключ необходимо сохранить для дальнейшего написания кода. Также дополнительно необходимо включить сообщения, если они не включены

Включить сообщения, если они не включены

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

блок с файлами в настройках

2. Программная реализация загрузки файлов в группу в Вконтакте при помощи Python

2.1 Устанавливаем необходимые библиотеки

!pip install requests
!pip install tqdm

2.2 Импортируем необходимые библиотеки

import requests
import os
from tqdm.notebook import tqdm
import time

Библиотека requests необходима для создания GET и POST запросов, библиотека os для работы с файлами системы, библиотека tqdm для отслеживания процесса загрузки файлов в группу Вконтакте и библиотека time для работы со временем.
2.3 Объявляем необходимые переменные

# Указывается токен доступа полученный в настройках группы в разделе Работа с API
access_token = ''
# Указывается ID группы в которую необходимо загрузить видео
group_id = 
# Указывается путь к папке с файлами которые необходимо загрузить
files_folder_path = 'my_files'

2.4 Создаем функцию, предназначенную для автоматической загрузки файлов с компьютера в группу в Вконтакте
Как и в случае с видео, сперва необходимо получить ссылку на адрес загрузки файла в группу в Вконтакте при помощи метода docs.getWallUploadServer. Полный код реализованной функции представлен ниже:

def import_files_from_folder(access_token: str, group_id: int, files_folder_path: str):
    """
    Функция предназначена для загрузки всех видео из конкретной папки в ВК.

    Параметры:
        access_token: str
            Токен доступа полученный в настройках группы.
        group_id: int
            Идентификатор сообщества, куда необходимо загрузить файл.
        files_folder_path: str
            Путь к папке с файлами которые нужно загрузить в ВК.
    Возвращает:
        None. Функция вывыодит сообщение об успехе или возникшей ошибке.
    """
    if not os.path.exists(files_folder_path):
        print('Указанный путь к папке не найден.')
        return None
    
    files = os.listdir(files_folder_path)
    allowed_extensions = ['.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.rtf', '.pdf', '.png', '.jpg', '.gif', '.psd', '.djvu', '.fb2', '.ps']
    params = {'access_token': access_token, 'group_id': group_id, 'v': 5.131}

    try:
        # Получаем адрес для загрузки файла
        get_server_req = requests.get('https://api.vk.com/method/docs.getWallUploadServer', params=params)
        upload_url = get_server_req.json()['response']['upload_url']
    except Exception as e:
        print(f'Произошла ошибка при получении адреса для загрузки файла: {e}')
        return None
    
    for file in tqdm(files):
        params = {'access_token': access_token, 'group_id': group_id, 'v': 5.131}
        delimiter_idx = file.rfind('.')
        file_name, file_extension = file[:delimiter_idx], file[delimiter_idx:]

        # Проверяем расширение видео
        if file_extension not in allowed_extensions:
            print(f'Использование {file_extension} расширения не поддерживается')
            continue
        
        try:
            import_file_req = requests.post(upload_url, params=params, files = {'file': open(f'{files_folder_path}/{file}' , 'rb')})
        except Exception as e:
            print(f'Произошла ошибка при импорте файла в группу в ВК: {e}')
            continue
            
        params['file'] = import_file_req.json()['file']

        save_doc_req = requests.post('https://api.vk.com/method/docs.save', params=params)
            
        while not save_doc_req.json().get('response'):
            print('Anti-flood break. Waits 3 seconds.')
            time.sleep(3)
            save_doc_req = requests.post('https://api.vk.com/method/docs.save', params=params)
        
        try:
            doc_title = save_doc_req.json()['response']['doc']['title']
            doc_id = save_doc_req.json()['response']['doc']['id']
        except Exception as e:
            print(f'Произошла ошибка при извлечении данных файла: {e}')
            continue
        
        print(f'{doc_title} был успешно загружен! ID документа: {doc_id}')

Разберем принцип работы функции. Функция принимает 3 параметра:

  • access_token: токен доступа полученный в настройках группы
  • group_id: идентификатор сообщества, куда необходимо загрузить файл
  • files_folder_path: путь к папке с файлами которые нужно загрузить в ВК

В самом начале функция проверяет указанный путь к папке с файлами на корректность. После чего все файлы из указанной папки помещаются в переменную files. Для загрузки файла в группу в ВК сначала необходимо получить адрес загрузки файла при помощи метода docs.getWallUploadServer. Далее скрипт в цикле проходит по каждому файлу из указанной папки и загружает его в группу в Вконтакте по полученному ранее адресу загрузки. В случае возникновения ошибки, обработчик ошибок выведет подробную информацию о возникших проблемах. В случае успешной загрузки файла в группу, выводится имя файла и его ID с сообщением об успехе.
Ниже представлен пример того, какие файлы лежат в папке и как вызывается функция для загрузки файлов в группу.

загрузки файлов в группу
После выполнения скрипта, файлы появятся в группе в Вконтакте:

файлы появятся в группе в Вконтакте

Полная версия ноутбука с кодом доступна для скачивания ниже

https://drive.google.com/file/d/15_TXLbDbABm5gLAIkAVzuer5KMdccpBw/view?usp=share_link

ВЫВОД

Таким образом, мы разобрали и автоматизировали процесс загрузки файлов в группу в Вконтакте при помощи Python.

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

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

Коллтрекинг и сквозная аналитика для вашего бизнеса. Как импортировать данные из CoMagic при помощи StreamMyData

Друзья! Рады пригласить вас на наш новый вебинар, который будет посвящен демонстрации работы с коннектором для сервиса CoMagic. Сервис…

Иван Барченков

Генеральный директор/Партнер