Нужно скопировать файлы с одно аккаунта Яндекса. Диска на другой (должен быть своеобразный бэкап)

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 Яндекс. Кликер, или где об этом почитать? Результатом исполнения второго файла является - "Загрузка началась"


Ответы (0 шт):