Yandex disk sdk python

Введение¶

YaDisk — это библиотека-клиент REST API Яндекс.Диска.

Установка¶

Примеры¶

import yadisk y = yadisk.YaDisk(token="") # or # y = yadisk.YaDisk("", "", "") # Check if the token is valid print(y.check_token()) # Get disk information print(y.get_disk_info()) # Print files and directories at "/some/path" print(list(y.listdir("/some/path"))) # Upload "file_to_upload.txt" to "/destination.txt" y.upload("file_to_upload.txt", "/destination.txt") # Same thing with open("file_to_upload.txt", "rb") as f: y.upload(f, "/destination.txt") # Download "/some-file-to-download.txt" to "downloaded.txt" y.download("/some-file-to-download.txt", "downloaded.txt") # Permanently remove "/file-to-remove" y.remove("/file-to-remove", permanently=True) # Create a new directory at "/test-dir" print(y.mkdir("/test-dir")) 

Получение токена через код подтверждения¶

import sys import yadisk y = yadisk.YaDisk("application-id>", "") url = y.get_code_url() print("Go to the following url: %s" % url) code = input("Enter the confirmation code: ") try: response = y.get_token(code) except yadisk.exceptions.BadRequestError: print("Bad code") sys.exit(1) y.token = response.access_token if y.check_token(): print("Sucessfully received token!") else: print("Something went wrong. Not sure how though. ") 

Рекурсивная загрузка файлов¶

import posixpath import os import yadisk def recursive_upload(y, from_dir, to_dir): for root, dirs, files in os.walk(from_dir): p = root.split(from_dir)[1].strip(os.path.sep) dir_path = posixpath.join(to_dir, p) try: y.mkdir(dir_path) except yadisk.exceptions.PathExistsError: pass for file in files: file_path = posixpath.join(dir_path, file) p_sys = p.replace("/", os.path.sep) in_path = os.path.join(from_dir, p_sys, file) try: y.upload(in_path, file_path) except yadisk.exceptions.PathExistsError: pass y = yadisk.YaDisk(token="") to_dir = "/test" from_dir = "/home/ubuntu" recursive_upload(y, from_dir, to_dir) 

Задание пользовательских свойств файлов¶

import yadisk y = yadisk.YaDisk(token="") path = input("Enter a path to patch: ") properties = "speed_of_light": 299792458, "speed_of_light_units": "meters per second", "message_for_owner": "MWAHAHA! Your file has been patched by an evil script!"> meta = y.patch(path, properties) print("\nNew properties: ") for k, v in meta.custom_properties.items(): print("%s: %r" % (k, v)) answer = input("\nWant to get rid of them? (y/[n]) ") if answer.lower() in ("y", "yes"): properties = k: None for k in properties> y.patch(path, properties) print("Everything's back as usual") 

Очищение корзины¶

import sys import time import yadisk y = yadisk.YaDisk(token="") answer = input("Are you sure about this? (y/[n]) ") if answer.lower() in ("y", "yes"): print("Emptying the trash bin. ") operation = y.remove_trash("/") print("It might take a while. ") if operation is None: print("Nevermind. The deed is done.") sys.exit(0) while True: status = y.get_operation_status(operation.href) if status == "in-progress": time.sleep(5) print("Still waiting. ") elif status == "success": print("Success!") break else: print("Got some weird status: %r" % (status,)) print("That's not normal") break else: print("Not going to do anything") 

© Copyright 2023, Ivan Konovalov Revision f053f008 .

Versions latest stable Downloads On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.

Источник

Как загрузить файлы на Яндекс Диск, с помощью Python

Как загрузить файлы на Яндекс Диск, с помощью Python

Приветствую всех, в этом уроке речь пойдет о Яндекс.Диске, а именно о работе с ней через Python. Данный урок будет полезен для новичков, в качестве примера напишем небольшую программу, и научим ее загружать не только файлы, но и папки с содержимым.

Яндекс.Диск REST API

Для начала получим токен, который необходим для работы с API Диском. Для этого перейдем по ссылке (новая, актуальная на 2023г. ссылка, спасибо пользователю govermsk) и зарегистрируем наше приложение, назовём его к примеру, backup, и дадим ему полное разрешение для работы с Я.Диском.

API Яндекс Диск

API Яндекс Диск

Теперь нужно просто перейти по этой ниже ссылке, заменив ID приложения на свой (ID вы получили после регистрации приложения), и токен готов.

https://oauth.yandex.ru/authorize?response_type=token&client_id=

Python

Для работы с Я.Диск REST API будем использовать уже готовую библиотеку, установим ее командой.

Попробуем подключиться к нашему Я.Диску используя ранее полученный токен.

import yadisk y = yadisk.YaDisk(token="токен") print(y.check_token()) # Проверим токен 

Если результат True, значит вы все сделали правильно 🙂

Добавим еще небольшой код, который отправит несколько файлом, и создаст папку на Я.Диске.

y.mkdir("/test/Hello Word") # Создать папку y.upload("file1.txt", "/test/file1.txt") # Загружает первый файл y.upload("file2.txt", "/test/file2.txt") # Загружает второй файл 

загрузить файлы на Яндекс

Всё работает отлично, мы смогли загрузить наши файлы и создать папку.

Усложним задачу, и попробует не создать, а отправить всю папку с содержимым, так скажем, сделать backup данных.

import yadisk import os from datetime import datetime y = yadisk.YaDisk(token="токен") def run(path): date = datetime.strftime(datetime.now(), "%d.%m.%Y-%H.%M.%S") y.mkdir(f'/test/') for address, dirs, files in os.walk(path): for dir in dirs: y.mkdir(f'/test//') print(f'Папка создана') for file in files: print(f'Файл загружен') y.upload(f'/', f'/test//') if __name__ == '__main__': run(r'C:\folder\путь к папке для загрузки') 

API Яндекс Диск

Теперь при каждом запуске скрипта, наши данные будут загружаться в папку с уникальным именем «дата и время загрузки».

По всем вопросом можете обратиться ко мне через обратную связь, буду рад помочь.

Источник

Работа с REST API Яндекс.Диска через Python Requests

Работа с REST API Яндекс.Диска через Python Requests

Из этой статьи вы узнаете как работать с REST API Яндекс.Диском через Python используя HTTP запросы (ранее мы делали с помощью готовой библиотеки yadisk). Создадим небольшую программу для быстрой загрузки файлов прямо с проводника Windows.

Яндекс не ободряет когда его сервис используют только как хранилище для резервных копий.

Создать приложение и получить токен

Зарегистрируем приложение на oauth.yandex.ru и назовем его к примеру Backup1 , укажем платформу «Веб-сервисы» (воспользуемся URL для разработки), и разрешим API полный доступ к Диску.

Создать приложение Yandex API Создать приложение Yandex APIСоздать приложение Yandex API

В ответ мы должны получить информацию о новом приложение, сейчас нас интересует его ID

Создать приложение Yandex API

Что бы получить отладочный токен перейдем по ссылке ниже, заменив ID приложения на свой

https://oauth.yandex.ru/authorize?response_type=token&client_id=

REST API Яндекс.Диск

Теперь можно потренироваться на полигоне.

Вы можете оценить, как работает API Яндекс.Диска, отправляя запросы из удобного интерфейса.

API Яндекс.Диск

Для примера создадим папку, укажем ее имя и нажмем кнопку попробовать

API Яндекс.Диск

Заходим на Яндекс Диск, и видим что папка появилась.

API Яндекс.Диск

Так же попробуем удалить нашу ранее созданную папку, укажем ее имя и нажмем кнопку попробовать

API Яндекс.Диск

Таким способом вы можете проверить работу всех функций.

HTTP Python

Воспользуемся параметрами запроса из полигона, и с помощью библиотеки requests повторить все на Python.

Импортирует библиотеку, укажем заголовок запроса, url, и token

import requests URL = 'https://cloud-api.yandex.net/v1/disk/resources' TOKEN = 'AQAAAAAz55vbAAc-fohhPDQSvU5kroy21-HguNA' headers = '> 

Напишем две функции для нашей будущей программы

Создать папку

def create_folder(path): """Создание папки. \n path: Путь к создаваемой папке.""" requests.put(f'?path=', headers=headers) 

Создаст папку hello world и API

create_folder('hello world') create_folder('hello world/api') 

Загрузить файл

def upload_file(loadfile, savefile, replace=False): """Загрузка файла. savefile: Путь к файлу на Диске loadfile: Путь к загружаемому файлу replace: true or false Замена файла на Диске""" res = requests.get(f'/upload?path=&overwrite=', headers=headers).json() with open(loadfile, 'rb') as f: try: requests.put(res['href'], files=) except KeyError: print(res) 

Загрузит файл images.rar в папку hello world

upload_file(r'C:\myFiles\images.rar', 'hello world/images.rar') 

Программа для загрузки файлов

Сейчас можно приступить к разработке самой программы, назовем ее backup.py

import os import requests from datetime import datetime from progress.bar import Bar URL = 'https://cloud-api.yandex.net/v1/disk/resources' TOKEN = 'AQAAAAAz55vbAAc-fohhPDQSvU5kroy21-HguNA' headers = '> def create_folder(path): """Создание папки. \n path: Путь к создаваемой папке.""" requests.put(f'?path=', headers=headers) def upload_file(loadfile, savefile, replace=False): """Загрузка файла. savefile: Путь к файлу на Диске loadfile: Путь к загружаемому файлу replace: true or false Замена файла на Диске""" res = requests.get(f'/upload?path=&overwrite=', headers=headers).json() with open(loadfile, 'rb') as f: try: requests.put(res['href'], files=) except KeyError: print(res) def backup(savepath, loadpath): """Загрузка папки на Диск. \n savepath: Путь к папке на Диске для сохранения \n loadpath: Путь к загружаемой папке""" date_folder = '_'.format(loadpath.split('\\')[-1], datetime.now().strftime("%Y.%m.%d-%H.%M.%S")) create_folder(savepath) for address, _, files in os.walk(loadpath): create_folder('//'.format(savepath, date_folder, address.replace(loadpath, "")[1:].replace("\\", "/"))) bar = Bar('Loading', fill='X', max=len(files)) for file in files: bar.next() upload_file('\'.format(address, file),\ '//'.format(savepath, date_folder, address.replace(loadpath, "").replace("\\", "/"), file)) bar.finish() if __name__ == '__main__': #backup('Backup', r'C:\Files\backup') backup('Backup', os.getcwd()) 

Программа готова, добавим новую системную переменную

системная переменная

Теперь мы может загружать наши файлы из проводника используя переменную %backup%

Комментарии

pro100bro

Вами было представлено не совсем корректное использование блока try/except. Если при GET запросе по каким-то причинам возникла ошибка, то уже до попадания в try/except, в переменной ‘res’ будет отсутствовать ключ ‘href’, то есть ссылка на загрузку. В этом случае мы можем использовать простой ‘if’, для проверки ответа от Яндекс диска: if ‘href’ not in response.keys(): print(f»Got an error: «) else: with open(loadfile, ‘rb’) as f: requests.put(response[‘href’], files=)

Рамис

@pro100bro, честно, я не помню почему я решил обернуть этот запрос в конструкцию try/except . Вы правы, правильнее было бы использовать условия if :

Источник

Читайте также:  Html form method patch
Оцените статью