Sobre el proyecto
# CasCap.GooglePhotosCli
Una interfaz de línea de comandos no oficial de Google Photos, distribuida como una herramienta global de .NET con el nombre `googlephotos`, para subir archivos multimedia y organizar álbumes en una cuenta de Google Photos.
## Importante: Google modificó las APIs de Photos el 31 de marzo de 2025
Google redujo fundamentalmente lo que cualquier aplicación de terceros puede hacer con la biblioteca de Google Photos de un usuario. Esta herramienta, y la biblioteca [CasCap.Api.GooglePhotos](https://github.com/f2calv/CasCap.Api.GooglePhotos) que la sustenta, están limitadas por dicho cambio:
- La Library API solo puede ver **álbumes y elementos multimedia creados por el cliente OAuth de esta herramienta**. Todo lo que ya existe en tu cuenta resulta invisible para ella.
- Leer toda la biblioteca, y por ende la detección de duplicados en toda la biblioteca o una copia de seguridad completa, ya no es posible.
- Las operaciones de compartir de la Library API y los álbumes compartidos fueron retiradas por completo.
- Los medios existentes solo pueden alcanzarse a través de la Picker API, la cual requiere que el usuario seleccione elementos de forma interactiva, una sesión a la vez.
La versión 1.0 eliminó los comandos que dependían del acceso a toda la biblioteca en lugar de devolver resultados parciales engañosos. Consulta [la actualización de la API de Google](https://developers.google.com/photos/support/updates).
### Eliminado en la versión 1.0
| Comando | Motivo |
| --- | --- |
| `mediaitems duplicates` | La detección de duplicados requiere leer toda la biblioteca. |
| `sync`, `albums sync` | No queda metadato de toda la biblioteca que cachear. |
| Interfaz interactiva de credenciales | Las credenciales ahora provienen de la configuración; véase [Configuración](#configuración). |
## Instalación
La herramienta se distribuye como una [herramienta global de .NET](https://learn.microsoft.com/dotnet/core/tools/global-tools):
```powershell
dotnet tool update --global googlephotos
```
Requiere el [tiempo de ejecución de .NET 10](https://dotnet.microsoft.com/download/dotnet/10.0).
## Configuración de Google Cloud
1. Crea un proyecto en la [consola de Google Cloud](https://console.cloud.google.com/).
2. Abre **APIs & Services > Library** y habilita **Google Photos Library API**.
3. Configura la pantalla de consentimiento de OAuth y crea un **OAuth client ID** de tipo **Desktop app**.
4. Apunta el client ID y el client secret; se proporcionarán mediante la configuración que se detalla más abajo.
La guía completa de configuración está en la [documentación de la biblioteca](https://github.com/f2calv/CasCap.Api.GooglePhotos#google-cloud-setup).
## Configuración
La herramienta vincula la sección `CasCap:GooglePhotosOptions` procedente, en orden creciente de prioridad, de `appsettings.json` incluido, un `appsettings.json` en el directorio de trabajo actual, secretos de usuario de .NET y variables de entorno.
Como una herramienta global se instala en un repositorio de solo lectura, los Secretos de usuario o las variables de entorno son la opción práctica:
```powershell
$env:CasCap__GooglePhotosOptions__User = "tu.correo@example.com"
$env:CasCap__GooglePhotosOptions__ClientId = "000000000000-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com"
$env:CasCap__GooglePhotosOptions__ClientSecret = "tu-client-secret"
```
O bien un `appsettings.json` junto al ejecutable:
```json
{
"CasCap": {
"GooglePhotosOptions": {
"User": "tu.correo@example.com",
"ClientId": "000000000000-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com",
"ClientSecret": "tu-client-secret",
"Scopes": [
"AppendOnly",
"ReadOnlyAppCreatedData",
"EditAppCreatedData"
]
}
}
}
```
| Scope | Necesario para |
| --- | --- |
| `AppendOnly` | `mediaitems upload`, `albums add` |
| `ReadOnlyAppCreatedData` | `albums list`, `albums download`, `mediaitems list` |
| `EditAppCreatedData` | Añadir elementos multimedia subidos a álbumes |
Nunca commitees un client secret. La autorización OAuth se almacena en caché por `Google.Apis.Auth` bajo `%APPDATA%/googlephotos/auth` (o el equivalente en la plataforma) y puede limpiarse con `googlephotos logout`.
## Uso
Cada comando tiene ayuda sensible al contexto:
```powershell
googlephotos --help
googlephotos albums --help
```
### Álbumes
```powershell
# lista los álbumes creados por esta herramienta
googlephotos albums list
# muestra solo los álbumes cuyo título se repite
googlephotos albums list --duplicates
# crea un álbum vacío
googlephotos albums add -t "título de mi álbum"
# descarga los medios de un álbum
googlephotos albums download -t "título de mi álbum" -o ./download
# descarga copias redimensionadas, recortadas, preservando EXIF
googlephotos albums download -t "título de mi álbum" -o ./download --maxheight 100 --crop --exif --overwrite
```
### Elementos multimedia
```powershell
# lista los elementos multimedia creados por esta herramienta
googlephotos mediaitems list
# sube un árbol de carpetas
googlephotos mediaitems upload -s ./photos
# sube solo JPEGs a un álbum nombrado, sin preguntar
googlephotos mediaitems upload -s ./photos --pattern *.jpg -t "vacaciones 2026" -y
# sube un árbol de carpetas creando un álbum por subcarpeta
googlephotos mediaitems upload -s ./photos --hierarchy
```
### Cerrar sesión
```powershell
googlephotos logout
```
## Desarrollo
```powershell
dotnet build CasCap.GooglePhotosCli.Debug.slnx
dotnet test src/CasCap.GooglePhotosCli.Tests/CasCap.GooglePhotosCli.Tests.csproj
```
La solución Debug resuelve `CasCap.Api.GooglePhotos` mediante una referencia de proyecto local, por lo que espera que dicho repositorio se encuentre clonado junto a este. La solución Release usa el paquete NuGet publicado.
## Comentarios e incidencias
Por favor, reporta cualquier cosa en la [página de incidencias de GitHub](https://github.com/f2calv/CasCap.GooglePhotosCli/issues).
## Licencia
CasCap.GooglePhotosCli es Copyright © 2020 [@f2calv](https://github.com/f2calv) bajo la [licencia MIT](LICENSE).
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.