Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Доступ к облаку mail.ru на языке python с помощью библиотеки webdav3
Лично я храню все свои данные в облаках. В основном на yandex.disk, но использую также и mail.ru. Но вот есть смысл поговорить и о программном доступе к облачным ресурсам. Обычно для доступа используется протокол WebDAV. Протокол работает поверх протокола HTTP 1.1.
Для доступа по протоколу WebDAV есть библиотека webdav3. В данной статье мы рассмотрим эту библиотеку для доступа к облачному сервису mail.ru. Кстати для доступа к облаку yandex есть специальные библиотеки, например yadisk. Может быть я напишу статью и об этой библиотеке.
На этот раз я не стал писать "большую" программу, где присутствуют основные функции работы с облаком. Я написал восемь маленьких программок, каждая из которых выполняет только одно действие. Параметры вводятся в командной строке. По вашему усмотрению можно просто посмотреть, как выполняются те или иные действия в облаках mail.ru или как-то объединить эти программы.
Прежде чем эти программы у вас заработают, однако, нужно
- Получить почтовый аккаунт на mail.ru и, соответственно, в придачу маленькое облако в 8 Гб.
- Установить у себя библиотеку webdav3, обычным образом (pip или pip3), а также библиотеку urllib3, если она у вас не установлена.
- Получить пароль для вашего приложения по ссылке. Пароль, который вы имеете для почты, здесь не подойдёт.
- В начале вашего приложения должна обязательно выполняться строка
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning),
которая отключает предупреждение InsecureRequestWarning, которое генерируется при выполнении непроверенного запроса HTTPS. - Также необходимо выполнять строку
webdav3.client.verify = False
для отключения проверки SSL-сертификатов.
Все основные действия можно реализовать, импортировав класс webdav3.client, хотя библиотека имеет и другие интересные классы. Далее все действия основываются на методах класса webdav3.client.
Замечание 1
Файловая система облака строится как это обычно бывает в Unix-подобных системах. Есть корневой каталог /, и от этого корня уже растут все остальные каталоги.
Замечание 2
Напомню, что если параметр командной строки содержит пробелы, то его следует брать в кавычки.
Действие 1. Получить список каталогов и файлов в указанном каталоге. Метод webdav3.client.list(). Также используется метод webdav3.client.free(), который возвращает свободный объем облака.
Например
./list.py /
Результат выполнения
Свободно около: 8192 мб
Папка: /
inf.py Новая папка/ 11.docx d_n1/
Или
./list.py /d_n1
Результат выполнения
Свободно около: 8192 мб
Папка: /d_n1
inff 1.docx
Действие 2. Узнать, является ли объект каталогом или файлом. Получаем в начале объект webdav3.client.resource(), а далее используем метод info(), который возвращает словарик. Если длина равна None, то это каталог, в противном случае это файл. Всё остальное нас не интересует.
Например
./inf.py /d_n11
Результат выполнения
Папка
Действие 3. Удаление объектов из облака в корзину. Для этого используется метод webdav3.client.clear(). Удалять можно и файл и папку с вложениями. Из, корзины, можно восстановить, в противном случае, корзина чиститься через некоторое время.
Например
./delfd.py /d_n1/inff
Действие 4. Закачка в облако файла или целого каталога. Используем метод webdav3.client.upload_sync().
Например
./upload.py "./new" "/new"
Каталог ./new на локальном диске копируется в каталог /new в облаке. Каталог может содержать подкаталоги. Аналогично копируется файл, команде всё равно.
Действие 5. Создание каталога в облаке. Используем метод webdav3.client.mkdir().
Например
./crdir.py /dir2
Создаётся каталог в корне.
./crdir.py /dir1/ty
Создаётся каталог ty в существующем каталоге dir1.
Действие 6. Скачать каталог или файл из облака на локальный диск. Используем метод webdav3.client.download().
Например
./download.py /dn_n1 ./dn_n1
Скачивает каталог вместе с подкаталогами из облака на локальный диск
Или
./download.py /txt ./txt2
Скачивает файл txt в файл txt2
Действие 7. Копирование файла или каталога в облаке. Используем метод webdav3.client.copy().
Например
./cp.py /txt "/dn_n1/Новая папка/txt2"
Действие 8. Перенос или переименование файла или каталога. Используем метод webdav3.client.move().
Например
Переименование файла txt в text.txt
./move.py /txt /text.txt
Перемещение папки new в папку dir1
./move.py /new /dir1/new
Мне показалось, что указанных действий вполне достаточно, чтобы строить приложение для работы с облаком mail.ru по протоколу WebDAV. А корзина? - спросите вы. Да бросьте, какие пошлости, это вас Microsoft испортил.
Ну, пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.