Об этом проекте

# CasCap.GooglePhotosCli Неофициальный интерфейс командной строки Google Photos, распространяемый как глобальный инструмент .NET под названием `googlephotos`, предназначенный для загрузки медиафайлов и организации альбомов в аккаунте Google Photos. ## Важно: Google изменил API Photos 31 марта 2025 года Google существенно сократил возможности сторонних приложений по работе с библиотекой Google Photos пользователя. Этот инструмент и библиотека [CasCap.Api.GooglePhotos](https://github.com/f2calv/CasCap.Api.GooglePhotos), на которой он основан, ограничены этими изменениями: - Library API видит только **альбомы и медиафайлы, созданные собственным OAuth-клиентом этого инструмента**. Все, что уже было в вашем аккаунте, для него невидимо. - Чтение всей библиотеки, а следовательно, обнаружение дубликатов и резервное копирование всей библиотеки больше невозможны. - Функции общего доступа Library API и операции с общими альбомами были полностью удалены. - Доступ к существующим медиафайлам пользователя возможен только через Picker API, который требует интерактивного выбора элементов пользователем за один сеанс. Версия 1.0 удаляет команды, зависящие от доступа ко всей библиотеке, чтобы не возвращать вводящие в заблуждение частичные результаты. См. [обновление API Google](https://developers.google.com/photos/support/updates). ### Удалено в версии 1.0 | Команда | Причина | | --- | --- | | `mediaitems duplicates` | Для обнаружения дубликатов требуется чтение всей библиотеки. | | `sync`, `albums sync` | Больше нет метаданных всей библиотеки для кэширования. | | Интерактивный запрос учетных данных | Учетные данные теперь берутся из конфигурации; см. [Конфигурация](#configuration). | ## Установка Инструмент распространяется как [глобальный инструмент .NET](https://learn.microsoft.com/dotnet/core/tools/global-tools): ```powershell dotnet tool update --global googlephotos ``` Требуется [среда выполнения .NET 10](https://dotnet.microsoft.com/download/dotnet/10.0). ## Настройка Google Cloud 1. Создайте проект в [консоли Google Cloud](https://console.cloud.google.com/). 2. Откройте **APIs & Services > Library** и включите **Google Photos Library API**. 3. Настройте экран согласия OAuth и создайте **OAuth client ID** типа **Desktop app**. 4. Запишите client ID и client secret; они указываются в конфигурации ниже. Полное руководство по настройке находится в [документации библиотеки](https://github.com/f2calv/CasCap.Api.GooglePhotos#google-cloud-setup). ## Конфигурация Инструмент привязывает раздел `CasCap:GooglePhotosOptions` из следующих источников (в порядке возрастания приоритета): поставляемый `appsettings.json`, `appsettings.json` в текущем рабочем каталоге, .NET User Secrets и переменные окружения. Поскольку глобальный инструмент устанавливается в хранилище только для чтения, практичным выбором являются User Secrets или переменные окружения: ```powershell $env:CasCap__GooglePhotosOptions__User = "your.email@example.com" $env:CasCap__GooglePhotosOptions__ClientId = "000000000000-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com" $env:CasCap__GooglePhotosOptions__ClientSecret = "your-client-secret" ``` Или `appsettings.json` рядом с местом запуска инструмента: ```json { "CasCap": { "GooglePhotosOptions": { "User": "your.email@example.com", "ClientId": "000000000000-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com", "ClientSecret": "your-client-secret", "Scopes": [ "AppendOnly", "ReadOnlyAppCreatedData", "EditAppCreatedData" ] } } } ``` | Scope | Требуется для | | --- | --- | | `AppendOnly` | `mediaitems upload`, `albums add` | | `ReadOnlyAppCreatedData` | `albums list`, `albums download`, `mediaitems list` | | `EditAppCreatedData` | Добавление загруженных медиафайлов в альбомы | Никогда не фиксируйте client secret в системе контроля версий. Сам токен OAuth кэшируется `Google.Apis.Auth` в папке `%APPDATA%/googlephotos/auth` (или эквиваленте для вашей платформы) и может быть удален с помощью `googlephotos logout`. ## Использование Каждая команда имеет контекстную справку: ```powershell googlephotos --help googlephotos albums --help ``` ### Альбомы ```powershell # список альбомов, созданных этим инструментом googlephotos albums list # показать только альбомы с повторяющимися названиями googlephotos albums list --duplicates # создать пустой альбом googlephotos albums add -t "название моего альбома" # скачать медиафайлы альбома googlephotos albums download -t "название моего альбома" -o ./download # скачать копии с измененным размером, обрезкой и сохранением EXIF googlephotos albums download -t "название моего альбома" -o ./download --maxheight 100 --crop --exif --overwrite ``` ### Медиафайлы ```powershell # список медиафайлов, созданных этим инструментом googlephotos mediaitems list # загрузить дерево папок googlephotos mediaitems upload -s ./photos # загрузить только JPEG в указанный альбом без подтверждения googlephotos mediaitems upload -s ./photos --pattern *.jpg -t "отпуск 2026" -y # загрузить дерево папок, создавая по одному альбому на каждую подпапку googlephotos mediaitems upload -s ./photos --hierarchy ``` ### Выход ```powershell googlephotos logout ``` ## Разработка ```powershell dotnet build CasCap.GooglePhotosCli.Debug.slnx dotnet test src/CasCap.GooglePhotosCli.Tests/CasCap.GooglePhotosCli.Tests.csproj ``` Решение Debug разрешает `CasCap.Api.GooglePhotos` через ссылку на локальный проект, поэтому оно ожидает, что этот репозиторий будет клонирован рядом с текущим. Решение Release использует опубликованный пакет NuGet. ## Обратная связь и проблемы Пожалуйста, сообщайте о любых проблемах на [странице GitHub issues](https://github.com/f2calv/CasCap.GooglePhotosCli/issues). ## Лицензия CasCap.GooglePhotosCli защищен авторским правом © 2020 [@f2calv](https://github.com/f2calv) в соответствии с [лицензией MIT](LICENSE).