这个项目能做什么

# CasCap.GooglePhotosCli 一个非官方的 Google Photos 命令行界面,以名为 `googlephotos` 的 .NET 全局工具分发,用于向 Google Photos 账户上传媒体和组织相册。 ## 重要:Google 于 2025 年 3 月 31 日更改了 Photos API Google 从根本上减少了任何第三方应用程序可以对用户的 Google Photos 媒体库执行的操作。此工具及其底层的 [CasCap.Api.GooglePhotos](https://github.com/f2calv/CasCap.Api.GooglePhotos) 库都受到此变更的限制: - 媒体库 API 只能看到**由此工具自己的 OAuth 客户端创建的相册和媒体项**。您账户中已有的所有内容对它都不可见。 - 读取整个媒体库,以及因此进行的全库重复检测和全库备份,不再可能。 - 媒体库 API 的共享和共享相册操作已完全撤销。 - 现有用户媒体只能通过 Picker API 访问,这要求用户以交互方式选择项目,一次一个会话。 版本 1.0 移除了依赖全库访问的命令,而不是让它们返回误导性的部分结果。请参阅 [Google 的 API 更新](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. 打开 **API 和服务 > 库**,启用 **Google Photos Library API**。 3. 配置 OAuth 同意屏幕,并创建类型为 **桌面应用** 的 **OAuth 客户端 ID**。 4. 记下客户端 ID 和客户端密钥;它们通过下面的配置提供。 完整的设置指南位于[库文档](https://github.com/f2calv/CasCap.Api.GooglePhotos#google-cloud-setup)中。 ## 配置 该工具按优先级升序从随附的 `appsettings.json`、当前工作目录中的 `appsettings.json`、.NET 用户机密和环境变量绑定 `CasCap:GooglePhotosOptions` 节。 由于全局工具安装到只读存储中,用户机密或环境变量是实际的选择: ```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" ] } } } ``` | 范围 | 用途 | | --- | --- | | `AppendOnly` | `mediaitems upload`、`albums add` | | `ReadOnlyAppCreatedData` | `albums list`、`albums download`、`mediaitems list` | | `EditAppCreatedData` | 将上传的媒体项添加到相册 | 切勿提交客户端密钥。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 "my album title" # 下载相册中的媒体项 googlephotos albums download -t "my album title" -o ./download # 下载调整大小、裁剪、保留 EXIF 的副本 googlephotos albums download -t "my album title" -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 "holiday 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)。