отправляет с использованием группового токена

This commit is contained in:
2025-12-17 01:55:36 +03:00
parent ebe88f147d
commit 0af1c1422d
5 changed files with 206 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
import os
import sys
import requests
from dotenv import load_dotenv
# ---------------------------
# ENV
# ---------------------------
load_dotenv()
ACCESS_TOKEN = os.getenv("VK_ACCESS_TOKEN")
GROUP_ID = int(os.getenv("VK_GROUP_ID", "0"))
API_VERSION = os.getenv("VK_API_VERSION", "5.199")
PHOTO_ATTACHMENT = os.getenv("VK_PHOTO_ATTACHMENT")
POST_TEXT = """Привет от Питона 🐍
Запись на услугу доступна по ссылке:
https://vk.com/uslugi-27937673
https://sekretydolgoletiya.ru
"""
# ---------------------------
# VALIDATION
# ---------------------------
def validate_env():
missing = []
if not ACCESS_TOKEN:
missing.append("VK_GROUP_ACCESS_TOKEN")
if not GROUP_ID:
missing.append("VK_GROUP_ID")
if not PHOTO_ATTACHMENT:
missing.append("VK_PHOTO_ATTACHMENT")
if missing:
print(f"❌ Не заданы переменные окружения: {', '.join(missing)}")
sys.exit(1)
# ---------------------------
# VK API
# ---------------------------
def vk_api(method: str, params: dict):
response = requests.post(
f"https://api.vk.com/method/{method}",
data={
**params,
"access_token": ACCESS_TOKEN,
"v": API_VERSION,
},
timeout=15,
).json()
if "error" in response:
error = response["error"]
raise RuntimeError(f"VK API error {error['error_code']}: {error['error_msg']}")
return response["response"]
# ---------------------------
# MAIN
# ---------------------------
def post_to_wall():
vk_api(
"wall.post",
{
"owner_id": GROUP_ID,
"from_group": 1,
"message": POST_TEXT.strip(),
"attachments": PHOTO_ATTACHMENT,
},
)
if __name__ == "__main__":
validate_env()
post_to_wall()
print("✅ Пост успешно опубликован")