работа с api vk и яндекс диск
from lib2to3.pgen2 import token
import requests
from pprint import pprint
import os.path
import json
with open('access_token.txt', 'r') as file_object:
token = file_object.read().strip()
class VkUser:
url = 'https://api.vk.com/method/'
def __init__(self, token, version):
self.params = {
'access_token': token,
'v': version
}
def get_photos(self, vk_id):
# Получение фотографии с профиля с использованием метода photos.get
photos_get_url = self.url + 'photos.get'
params = {
'owner_id' : vk_id,
'album_id' : 'profile',
'rev' : 0,
'extended' : 1,
'photo_sizes' : 0,
'count' : 20
}
res = requests.get(photos_get_url, params={**self.params, **params}).json()
profile_list = res['response']['items']
for i in profile_list:
dict = (i['sizes'][-1])
photo_url = (dict['url'])
file_name = i['likes']['count']
download_photo = requests.get(photo_url)
with open(os.path.join('fotos', f'{file_name}.jpg'), 'wb') as file:
file.write(download_photo.content)
return "Фото скачены"
class YaUploader:
URL = 'https://cloud-api.yandex.net/v1/disk/resources'
def __init__(self, token):
self.token = token
def get_headers(self):
return {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': f'OAuth {self.token}'
}
def create_folder(self, path):
"""Создание папки. \n path: Путь к создаваемой папке."""
requests.put(f'{self.URL}?path={path}', headers=self.get_headers())
def upload_file(self, loadfile, savefile, replace=False):
"""Загрузка файла.
savefile: Путь к файлу на Диске
loadfile: Путь к загружаемому файлу
replace: true or false Замена файла на Диске"""
res = requests.get(f'{self.URL}/upload?path={savefile}&overwrite={replace}', headers=self.get_headers()).json()
with open(loadfile, 'rb') as f:
try:
requests.put(res['href'], files={'file':f})
except KeyError:
print(res)
def upload_photo(self, list_photo, path):
logs_list = []
for photo in list_photo:
params = {'path': f'{path}/{photo}'}
get_upload_url = requests.get(self.URL, headers=self.get_headers(), params=params).json()
file_upload = requests.put(get_upload_url['href'], data=open(f'{path}/{photo}', 'rb'), headers=self.get_headers())
status = file_upload.status_code
download_log = {'file_name': photo}
logs_list.append(download_log)
with open('log.json', 'a') as file:
json.dump(logs_list, file, indent=2)
if 500 > status != 400:
print('Фотографии успешно загружены!')
else:
print('Ошибка при загрузке фотографий')
def create_folder(folder):
if not os.path.isdir(folder):
os.mkdir(folder)
def get_photos_from_folder(folder) -> list:
file_list = os.listdir(folder)
return file_list
if __name__ == '__main__':
create_folder('fotos')
vk_client = VkUser(token, '5.131')
pprint(vk_client.get_photos('552934290'))
file_list = get_photos_from_folder('fotos')
token = ''
yadisk = YaUploader(token)
yadisk.create_folder('fotos')
#yadisk.upload_file(r'fotos\\10.jpg', 'fotos/10.jpg')
yadisk.upload_photo(file_list, 'fotos')
Получаю ошибку
File "main.py", line 81, in upload_photo
file_upload = requests.put(get_upload_url['href'], data=open(f'{path}/{photo}', 'rb'), headers=self.get_headers())
KeyError: 'href' вызывая yadisk.upload_photo
Мне необходимо загрузить папку файлов целиком. папка состоит из фото. Файлы предварительно я добавил в список.