beerds/vk_api/photo.py

79 lines
2.6 KiB
Python

import os
import time
import requests # type: ignore
# Получить токен чтобы:
# https://oauth.vk.com/oauth/authorize?client_id=51534014&display=page&scope=photos,offline&response_type=token&v=5.131&slogin_h=4984535b54c59e09ca.f1e0b6dce0d0cc82e7&__q_hash=618f24fbac4bc34edbf09b8bc503e923
TOKEN = ""
VK_URL = "https://api.vk.com/method/"
headers = {"Authorization": f"Bearer {TOKEN}"}
postfix = "?v=5.131&state=123456"
group_id = 220240483
dir = "../assets/dog"
list_labels = [fname for fname in os.listdir(dir)]
r = requests.get(
f"{VK_URL}photos.getAll{postfix}&access_token={TOKEN}&owner_id=-{group_id}&count=200"
)
if "error" in r.json():
print("error", r.json())
exit()
items = r.json().get("response").get("items")
names = {}
for item in items:
if item.get("text") in names:
print("Doubles: ", item.get("text"))
names[item.get("text")] = True
for name in list_labels:
if name.replace("_", " ") in names:
print(f"Continue: {name}")
continue
if name in names:
print(f"Continue: {name}")
continue
max_size = 0
max_index = 0
list_data = os.listdir(os.path.join(dir, name))
for i, f in enumerate(list_data):
file_stats = os.stat(os.path.join(dir, name, f))
if file_stats.st_size > max_size:
max_size = file_stats.st_size
max_index = i
image_name = list_data[max_index]
file_stats = os.stat(os.path.join(dir, name, image_name))
r = requests.post(
f"{VK_URL}photos.createAlbum{postfix}",
data={"title": name.replace("_", " "), "group_id": group_id},
headers=headers,
)
if "error" in r.json():
print("error", r.json())
break
album_id = r.json().get("response").get("id")
r = requests.get(
f"{VK_URL}photos.getUploadServer{postfix}&album_id={album_id}&access_token={TOKEN}&group_id={group_id}"
)
url = r.json().get("response").get("upload_url")
files = {"file1": open(os.path.join(dir, name, image_name), "rb")}
r = requests.post(url, files=files)
server = r.json().get("server")
photos_list = r.json().get("photos_list")
hash_data = r.json().get("hash")
aid = r.json().get("aid")
r = requests.post(
f"{VK_URL}photos.save{postfix}&hash={hash_data}",
data={
"album_id": aid,
"server": server,
"photos_list": photos_list,
"caption": name.replace("_", " "),
"group_id": group_id,
},
headers=headers,
)
if "error" in r.json():
print("error", r.json())
break
print(f"Created: {name}")
time.sleep(1)