# 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)