Нужно скопировать файлы с одно аккаунта Яндекса. Диска на другой (должен быть своеобразный бэкап)
1 Вариант) Прямое копирование папки/файла
import requests
# Токены доступа для обоих аккаунтов
source_token = 'токен_исходного_диска'
target_token = 'токен_целевого_диска'
# Функция для копирования папки
def copy_folder(source_path, target_path):
url = f"https://cloud-api.yandex.net/v1/disk/resources/copy?from={source_path}&path={target_path}&overwrite=true"
headers = {
"Authorization": f"OAuth {source_token}"
}
response = requests.post(url, headers=headers)
if response.status_code == 202:
print("Копирование началось")
elif response.status_code == 201:
print("Копирование успешно завершено")
else:
print(f"Ошибка: {response.status_code} - {response.text}")
source_folder = "/Тест"
target_folder = "/Загрузки"
# Выполните копирование
copy_folder(source_folder, target_folder)
В этом варианте проблема заключается в том что не происходит копирование на целевой диск, возможно ошибка в ссылке, а возможно у Яндекс. Диска отсутствует функционал прямого копирования папки/файла с диска на диск ? Результатом выполнения кода является - "Копирование началось"
2 Вариант)Получаем ссылку на загрузку папки/файла с исходного диска
import requests
token = 'токен_исходного_диска'
# Функция для получения ссылки на скачивание файла
def get_download_link(file_path):
url = f"https://cloud-api.yandex.net/v1/disk/resources/download?path={file_path}"
headers = {
"Authorization": f"OAuth {token}"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.json()["href"]
else:
print(f"Ошибка: {response.status_code} - {response.text}")
return None
file_path = "/Зима.jpg"
# Получение ссылки на скачивание файла
download_link = get_download_link(file_path)
if download_link:
print("Ссылка на скачивание файла:", download_link)
else:
print("Не удалось получить ссылку на скачивание файла.")
введите сюда код
загружаем папку/файл на целевой диск с помощью ссылки
import requests
# Токен доступа к Яндекс.Диску
token = 'токен_целевого_диска'
# Функция для загрузки файла по URL на Яндекс.Диск
def upload_file(target_path, file_url):
upload_url = f"https://cloud-api.yandex.net/v1/disk/resources/upload?path={target_path}&url={file_url}"
headers = {
"Authorization": f"OAuth {token}"
}
response = requests.post(upload_url, headers=headers)
if response.status_code == 202:
print("Загрузка началась")
elif response.status_code == 201:
print("Загрузка успешно завершена")
else:
print(f"Ошибка: {response.status_code} - {response.text}")
target_path = "/Новая папка" # Вставьте путь для загрузки на Яндекс.Диск
file_url = "https://clck.ru/3Ajpvt" # Вставьте ссылку на файл для загрузки
# Выполнение загрузки файла на Яндекс.Диск
upload_file(target_path, file_url)
Во втором варианте представлены куски кода (делал для теста, по этому находятся в разных исполняемых файлах), здесь проблема заключается в том что получаемая ссылка из первого файла слишком длинная и при подстановке её во второй файл - не происходит загрузка, но при этом если ссылку сократить через Яндекс. Кликер, то всё работает как надо, может кто то знает как работать с API Яндекс. Кликер, или где об этом почитать? Результатом исполнения второго файла является - "Загрузка началась"