• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Доступ к Яндекс.Диску с помощью Python

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

000.jpg


Получение токена

Для начала нужно получить токен. Именно с помощью токена приложение и будет осуществлять доступ к копированию, вставке и прочим функциям. А чтобы получить токен, нужно зарегистрировать приложение, которое будет работать в питоне.

Идем в поиск и вбиваем «Доступ внешних приложений Яндекс», ну или можно перейти вот по этой . Здесь нас интересует одна большая желтая кнопка «Зарегистрировать новое приложение». Жмем ее и переходим на страницу создания приложения.

screenshot1.png

На следующей странице заполняем поле «Название приложения». Название может быть любым. Главное, чтобы оно было вам понятно. Ведь в будущем вы можете создать еще одно приложение, доступ к которому тоже надо будет открыть. И вот, чтобы их не путать, да и чтобы токены у них были разные, это и делается.

Спускаемся ниже и открываем список «Яндекс.Диск REST API». Здесь нужно проставить галочки во все пункты.

screenshot2.png

После этого открываем следующий пункт «Яндекс.Диск WebDAV API», где также надо поставить галочку.

screenshot3.png

Для чего это, собственно, нужно? Это для того, чтобы в будущем ваше приложение могло иметь доступ ко всем функциям Яндекс.Диска, будь то удаление, копирование, вставка и прочие функции.

После того, как галочки проставлены, спускаемся еще ниже и жмем кнопку «Создать приложение».

Откроется окно с данными, в которых указан ID приложения и пароль доступа.

screenshot4.png

Теперь нужно получить токен. Идем вот по этой ссылке: . Тут вместо фразы «ваш_id» нужно вставить тот ID, что получили ранее. Ну, а дальше появиться окно с токеном, который нужно скопировать и сохранить в надежном месте. Он еще понадобиться. Конечно же, токен выдается не один раз. И его можно перевыпустить.

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


Что понадобиться?

Для работы с Яндекс.Диском устанавливаем библиотеку yadisk. Для этого пишем в терминале:

pip install yadisk

После этого импортируем библиотеку в скрипт.

import yadisk

Теперь создадим отдельный от основного скрипта файл, в который сохраним токен, чтобы он не находился в скрипте, в открытом виде, а после импортируем параметр в скрипт:

from config import token


Создание директории, проверка на валидность токена

Давайте продолжим. Для того, чтобы получить доступ к диску, нужно создать его объект, в котором будет передаваться токен для авторизации. Поэтому пишем следующий код:

y = yadisk.YaDisk(token=token)

Токен, перед тем как совершать с диском какие-то действия можно проверить на валидность. В случае, если токен не пройдет проверку, будет возвращено значение False, а иначе True.

Python:
if y.check_token():
    if not y.is_dir("/test-dir"):
        y.mkdir("/test-dir")
        print('Папка "test-dir" создана')

В коде выше проверяется токен на валидность. Если проверка прошла успешно, проверяется на Яндекс.Диске наличие папки «test-dir». Если ее нет, она создается. Так же, примерно, как и работа с модулем os. И выводиться принт об успешном ее создании.


Просмотр содержимого директории и вывод информации о файлах и папках

Теперь давайте посмотрим функцию, с помощью которой можно просмотреть содержимое директории на диске. Это функция y.listdir('/test-dir/'), где в качестве параметра указывается сканируемая директория. В ответ функция получает файл JSON, из которого и добываем в цикле нужную информацию.

Python:
print('Содержимое папки "test-dir":\n')
    for item in y.listdir('/test-dir/'):
        print(f"Название: {item['name']}")
        print(f'Размер: {item["size"]} байт')
        print(f"Тип файла: {item['type']}")
        print(f"Тип документа: {item['media_type']}")
        print(f"Дата создания: {item['created']}\n")

Вот содержимое моей папки, в которую я предварительно скопировал документы.

screenshot5.png

Если же папка будет пуста, то объект будет пуст. И никакого вывода не будет.


Загрузка, удаление и скачивание файла

Теперь давайте посмотрим, как с помощью Python удалить, загрузить и скачать файл на диск. Делается это довольно просто:

Python:
if y.is_file("/test-dir/Новый текстовый документ.txt"):
        y.remove("/test-dir/Новый текстовый документ.txt", permanently=False)
    else:
        y.upload("Новый текстовый документ.txt", "/test-dir/Новый текстовый документ.txt")
    if y.is_file('/test-dir/link_list.txt'):
        y.download('/test-dir/link_list.txt', 'link_list.txt')

Проверяю наличие файла. Так как, если файл существует, будет вызвана ошибка. И если файл есть, удаляю его. Если файла нет, загружаю его на диск. А потом скачиваю содержащийся уже на диске текстовый документ. Помимо удаления файла можно удалить целую директорию со всем ее содержимым. Для этого нужно указать, какую директорию удалить и параметр permanently поставить в значение True. Проверено. Работает.

y.remove('/test-dir/', permanently=True)

На этом, думаю, можно закончить рассмотрение этой полезной библиотеки. Возможно, что ее использование в резервном копировании данных, хотя бы на простом, бытовом уровне, поможет кому-то сохранить важные документы.

Спасибо за внимание. Надеюсь, что данная статья была вам полезна
 

its5Q

One Level
03.10.2020
1
1
BIT
0
Хорошая статья, но по моему опыту, WebDAV яндекс диска работает не быстрее 100 КБ/С) И, судя по поиску в гугле, не я один такой.
 
  • Нравится
Реакции: Johan Van

Johan Van

Green Team
13.06.2020
355
663
BIT
190
Хорошая статья, но по моему опыту, WebDAV яндекс диска работает не быстрее 100 КБ/С) И, судя по поиску в гугле, не я один такой.

Согласен. Реализовать что-то крупное в бесплатной версии вряд ли получиться. Но, для хранения мелочи можно попробовать использовать. У Майловского Облака, насколько я знаю, не было WebDAV, кроме их кривой программы, но была возможность с помощью бубна подключить его в операционную систему. Не знаю, работает ли данный способ сейчас. Там вроде скорость побольше. Но, это надо поискать и попробовать настроить. Раньше делал. Работало. Сейчас требует проверки. )
 

wsi

New member
13.03.2022
1
0
BIT
10
Дата центр Яндекса в Финляндии уже 10 дней работает от дгу т.к. электроэнергию им отключили, поэтому актуальность темы под вопросом
 

s3m3chka

One Level
06.04.2022
5
4
BIT
0
Огонь! Я так понимаю, прикрутить можно и какой нибудь OneDrive
 

Caca Dada

One Level
07.05.2022
2
1
BIT
0
Можно ли с помощью питона написать скрипт для других облачных хранилищ? И, если можно, то у какого хранилища скорость записи будет выше?
 

Johan Van

Green Team
13.06.2020
355
663
BIT
190
Можно ли с помощью питона написать скрипт для других облачных хранилищ? И, если можно, то у какого хранилища скорость записи будет выше?

Можно. По крайней мере к OneDerive и GoogleDrive точно. В случае с OneDrive нужно использовать библиотеку onedrivesdk, а в случае с GoogleDrive: Google API Client. Есть еще неофициальная библиотека для доступа к Облаку Майл: PyMailCloud, но она уже давно не обновлялась, а потому нужно проверять, работает или нет. По поводу скорости не скажу. Не тестировал. С Яндекс.Диском есть проблема по скорости. То есть хранить там что-то небольшое - это можно. А вот большие бэкапы, такое себе удовольствие.
 
  • Нравится
Реакции: Caca Dada

Caca Dada

One Level
07.05.2022
2
1
BIT
0
Можно. По крайней мере к OneDerive и GoogleDrive точно. В случае с OneDrive нужно использовать библиотеку onedrivesdk, а в случае с GoogleDrive: Google API Client. Есть еще неофициальная библиотека для доступа к Облаку Майл: PyMailCloud, но она уже давно не обновлялась, а потому нужно проверять, работает или нет. По поводу скорости не скажу. Не тестировал. С Яндекс.Диском есть проблема по скорости. То есть хранить там что-то небольшое - это можно. А вот большие бэкапы, такое себе удовольствие.
спасибо за ответ
 
  • Нравится
Реакции: Johan Van

ooolledj

One Level
26.03.2021
6
1
BIT
0
Пришлось немного повозиться с созданием токена, но в целом тема рабочая, спасибо за статью.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!