这个项目能做什么
# 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)。
评论
0 评分人数达到10人后显示
登录后参与讨论。