94 lines
5.6 KiB
Markdown
94 lines
5.6 KiB
Markdown
# iCloud Drive Sync
|
||
|
||
Скрипт для синхронизации фалов из iCloud Drive в локальное хранилище. Скрипт также поддерживает конвертацию фалов `.numbers` в формат `.xlsx`
|
||
|
||
## Требования
|
||
|
||
- Python 3.9, 3.10, 3.11, 3.12 и 3.13
|
||
|
||
Протестировано на Python 3.12.3
|
||
|
||
## Установка
|
||
|
||
Для установки всех необходимых зависимостей для работы скрипта нужно выполнить следующею команду:
|
||
|
||
```sh
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## Настройка
|
||
|
||
Все настройки хранятся в файле `config.yaml`
|
||
|
||
```yaml
|
||
app:
|
||
logger:
|
||
level: "info" # Тип логирование в консоль доступно: DEBUG, INFO, WARNING, ERROR, CRITICAL
|
||
filename: "icloud.log" # Файл где, будут записываться логи
|
||
credentials:
|
||
username: "ki@atri-energo.ru" # Имя пользователя в ICloud
|
||
retry_login_interval: 900 # Интервал повторной попытки авторизации
|
||
root: "icloud" # Корневой каталог
|
||
region: global # Регион авторизации в ICloud, доступно global, china
|
||
drive:
|
||
destination: "drive" # Каталог в котором будут сохраняться синхронизированные фалы
|
||
destination_export: "drive_export" # Каталог в котором будут сохраняться конвертированные фалы
|
||
remove_obsolete: false # Удалять ли локальные файлы, которые больше не доступны в ICloud
|
||
sync_interval: 300 # Интервал синхронизации
|
||
filters:
|
||
file_name:
|
||
# Список файлов которые необходимо синхронизировать
|
||
- "Пустой"
|
||
- "Копия Тех_2022_осн директория"
|
||
folders:
|
||
# Список каталогов которые необходимо синхронизировать
|
||
- "folder1"
|
||
- "folder2"
|
||
- "folder3"
|
||
file_extensions:
|
||
#Список расширений файлов которые необходимо синхронизировать
|
||
- "pdf"
|
||
- "png"
|
||
- "jpg"
|
||
- "jpeg"
|
||
ignore:
|
||
# Список игнорируемых каталогов и файлов
|
||
# При указании путей к папкам добавляйте /*
|
||
- "node_modules/*"
|
||
- "*.md"
|
||
# Список конвертируемых файлов из формата numbers в формат xlsx
|
||
convert:
|
||
- name: "Пустой" # Имя файла
|
||
secret: "AzkiMDEYAetglYTt75QvN+hABQhpixoT3UWVxy3ELL8=:XQnMIaEj5Ov4oBqhpxAGIA==:DVRgHa1LjxlWnwYqdlN4VA==" # Секретный ключ файла, как его получить смотрите ниже
|
||
```
|
||
|
||
## Авторизация
|
||
|
||
Для того чтобы авторизоваться необходимо в первую очередь выполнить следующую команду
|
||
|
||
```sh
|
||
icloud --username=mail@example.com --session-directory="C:\icloud\session_data"
|
||
```
|
||
|
||
- `mail@example.com` это почта (имя пользователя) для авторизации в ICloud
|
||
- `C:\icloud\session_data` это полный путь до каталога session_data в корне каталога скрипта, где будет храниться сессия авторизации
|
||
|
||
Во время выполнения вам будет предложено ввести пароль от аккаунта ICloud и сохранить ключ авторизации в хранилище `keyring` нужно согласиться.
|
||
Затем, если включена двухфакторная авторизация, то попросит ввести код из SMS или устройства.
|
||
|
||
> Внимание: В последнее время SMS на Россииские номера приходя через раз или вообще могут не прийти, поэтому стоит повторить попытку. Как вариант можно дойти до этого шага и попробовать авторизоваться в ICloud через браузер, дойти до шага ввода кода и если он пришел то ввести его не в браузер в консоль скрипта.
|
||
|
||
> Внимание: Из-за политики Apple авторизация может слететь через пару месяцев, в этом случае необходимо выполнить команду авторизации заново.
|
||
|
||
## Запуск скрипта
|
||
|
||
Если авторизация прошла успешно и файл конфигурации заполнен, то можно выполнить команду запуска скрипта:
|
||
|
||
```sh
|
||
py main.py
|
||
```
|
||
|
||
Данная команда синхронизирует необходимы каталоги и файлы, и при необходимости производит конвертацию файлов конвертацию фалов `.numbers` в формат `.xlsx` результат можно увидеть в указанных в файле конфигурации каталогов по умолчанию в /icloud/drive и /icloud/drive_export соответственно.
|
||
|
||
## Получение секретного ключа для конвертации
|
||
![](https://git.ae-work.ru/darkeum/bars-icloud/raw/commit/6813ae02265db16e71724844acf2828925cbcacd/secret.gif) |