w1llis01
One Level
- 23.10.2025
- 2
- 1
Добрый день всем. Занялся на днях скриптом для автоматизации загрузки видео в VK\VKvideo. Вроде бы работает, а вроде и руки кривые, да знаний не хватает. Площадка для меня новая и не все тонкости её знакомы.
Собственно говоря какова была задумка:
1. Берутся видео из папки и грузятся на Vkvideo (оно же VK, в принципе) - в нужно канал или группу, но не на свою страницу.
2. Оттуда же подгружается превью к нужным видео.
3. Берется название и описание к видео и вставляется в рандомном порядке.
4. Всё это действо после загрузки, автоматически публикуется, соотсветсвенно.
Но по итогу:
Видео загружается, всё вроде бы четко, но превью не ставится. Так же, название и описание - остаются пустыми (думал как-то привязать генерацию этого всего дела, но увы не вышло, из файла данные вроде берутся по логам, но на платформе - пустота). Пробовал по разному, но никак. И главное - видео грузятся на личный профиль (канал), но никак не выходит, чтобы оно грузилось в канал (группу), который нужен.
Код:
Сам скрипт - прикрепил. Может у кого-то был опыт и знает, как чего там нужно сделать? Буду крайне признателен за помощь!
Собственно говоря какова была задумка:
1. Берутся видео из папки и грузятся на Vkvideo (оно же VK, в принципе) - в нужно канал или группу, но не на свою страницу.
2. Оттуда же подгружается превью к нужным видео.
3. Берется название и описание к видео и вставляется в рандомном порядке.
4. Всё это действо после загрузки, автоматически публикуется, соотсветсвенно.
Но по итогу:
Видео загружается, всё вроде бы четко, но превью не ставится. Так же, название и описание - остаются пустыми (думал как-то привязать генерацию этого всего дела, но увы не вышло, из файла данные вроде берутся по логам, но на платформе - пустота). Пробовал по разному, но никак. И главное - видео грузятся на личный профиль (канал), но никак не выходит, чтобы оно грузилось в канал (группу), который нужен.
Код:
Python:
import os
import random
import pandas as pd
import requests
# Вставь свой токен доступа VK
access_token = '12345'
group_id = '12345' # ID канала или группы, куда нужно загружать видео
video_folder = r'C:\Users\админ\Desktop\vk\DN' # Путь к папке с видео и превью
# Загрузка данных из Excel или CSV
def load_video_data(file_path):
# Загружаем данные из Excel или CSV
if file_path.endswith('.xlsx'):
df = pd.read_excel(file_path)
elif file_path.endswith('.csv'):
df = pd.read_csv(file_path)
else:
raise ValueError("Неподдерживаемый формат файла. Поддерживаются только .xlsx и .csv")
return df
# Получаем случайное название и описание
def get_random_title_and_description(df):
# Случайным образом выбираем строку
random_row = df.sample(n=1).iloc[0]
video_title = random_row['Название']
video_description = random_row['Описание']
return video_title, video_description
def get_upload_url():
# Получаем URL для загрузки видео
url = f'https://api.vk.com/method/video.save?access_token={access_token}&v=5.131'
response = requests.get(url)
data = response.json()
if 'response' in data:
upload_url = data['response']['upload_url']
return upload_url
else:
print("Ошибка при получении URL для загрузки:", data)
return None
def save_video_from_direct_link(direct_link, video_title, video_description):
# Сохранение видео с использованием прямой ссылки и параметров для названия и описания
url = f'https://api.vk.com/method/video.save?access_token={access_token}&v=5.131'
params = {
'direct_link': direct_link,
'owner_id': group_id, # Используем отрицательное значение для ID группы/канала
'name': video_title, # Название видео
'description': video_description # Описание видео
}
response = requests.post(url, params=params)
data = response.json()
if 'response' in data:
print("Видео успешно сохранено!")
return data['response']
else:
print("Ошибка при сохранении видео:", data)
return None
def upload_video_to_vk(upload_url, video_file_path, preview_file_path):
# Загружаем видео на сервер VK
video_data = {'file': open(video_file_path, 'rb')}
upload_response = requests.post(upload_url, files=video_data)
# Для диагностики выводим весь ответ, который возвращает сервер
print(f"Ответ сервера на загрузку видео: {upload_response.text}")
try:
upload_result = upload_response.json()
except ValueError as e:
print(f"Ошибка при декодировании JSON: {e}")
return None
if 'video' in upload_result:
video_id = upload_result['video']['id']
owner_id = upload_result['video']['owner_id']
print(f"Видео успешно загружено: {video_id}")
# Проверка существования файла превью (обложки)
if not os.path.exists(preview_file_path):
print(f"Ошибка: Превью {preview_file_path} не найдено!")
return video_id, owner_id, None, None
# Загружаем превью (обложку)
preview_url = f'https://api.vk.com/method/photos.save?access_token={access_token}&v=5.131&album_id=profile'
preview_data = {'file': open(preview_file_path, 'rb')}
preview_response = requests.post(preview_url, files=preview_data)
preview_result = preview_response.json()
if 'response' in preview_result:
preview_id = preview_result['response'][0]['id']
preview_owner_id = preview_result['response'][0]['owner_id']
return video_id, owner_id, preview_id, preview_owner_id
else:
print(f"Ошибка при загрузке превью: {preview_result}")
return video_id, owner_id, None, None
else:
print("Ошибка при загрузке видео:", upload_result)
return None
def post_video_on_channel(video_id, owner_id, preview_id, preview_owner_id, video_title, video_description):
# Публикуем видео на канале с названием и описанием
post_url = f'https://api.vk.com/method/video.save?access_token={access_token}&v=5.131'
# Логирование параметров
print(f"Публикуем видео с названием: {video_title} и описанием: {video_description}")
post_data = {
'video_id': video_id,
'owner_id': owner_id, # ID группы или канала
'name': video_title, # Название видео
'description': video_description, # Описание видео
'preview_id': preview_id, # ID превью
'preview_owner_id': preview_owner_id # Owner ID превью
}
post_response = requests.post(post_url, data=post_data)
post_result = post_response.json()
if 'response' in post_result:
print(f"Видео успешно опубликовано на канале с ID: {video_id}")
else:
print(f"Ошибка при публикации видео: {post_result}")
def process_video_folder(df):
upload_url = get_upload_url()
if not upload_url:
print("Не удалось получить URL для загрузки видео.")
return
for filename in os.listdir(video_folder):
if filename.endswith('.mp4'):
video_file = os.path.join(video_folder, filename)
preview_file = os.path.splitext(video_file)[0] + '.jpg'
if os.path.exists(preview_file):
print(f"Загружаем видео: {filename} с превью {os.path.basename(preview_file)}")
# Получаем случайное название и описание из Excel/CSV
video_title, video_description = get_random_title_and_description(df)
# Логирование
print(f"Генерация названия: {video_title}, описание: {video_description}")
# Получаем ссылку для загрузки видео
upload_url = get_upload_url()
if not upload_url:
print("Не удалось получить URL для загрузки видео.")
return
video_data = {'file': open(video_file, 'rb')}
upload_response = requests.post(upload_url, files=video_data)
# Проверяем, что сервер вернул корректный ответ
print(f"Ответ сервера на загрузку видео: {upload_response.text}")
try:
upload_result = upload_response.json()
if 'direct_link' in upload_result:
# Если ссылка на загрузку получена, сохраняем видео с этой ссылкой
result = save_video_from_direct_link(upload_result['direct_link'], video_title, video_description)
if result:
video_id = result['video_id']
print(f"Видео с ID {video_id} успешно загружено!")
# После загрузки, публикуем видео на канале с названием и описанием
post_video_on_channel(video_id, group_id, result['preview_id'], result['preview_owner_id'], video_title, video_description)
except Exception as e:
print(f"Ошибка при обработке ответа: {e}")
# Загрузка данных из Excel или CSV
file_path = r'C:\Users\админ\Desktop\video_data.xlsx' # Укажи путь к своему файлу Excel или CSV
df = load_video_data(file_path)
# Запуск обработки всех видео в папке
process_video_folder(df)
Сам скрипт - прикрепил. Может у кого-то был опыт и знает, как чего там нужно сделать? Буду крайне признателен за помощь!