Sobre o projeto
CasCap.GooglePhotosCli
Uma interface de linha de comando não oficial para o Google Photos, distribuída como uma ferramenta global .NET chamada googlephotos, para fazer upload de mídia e organizar álbuns em uma conta do Google Photos.
Importante: O Google alterou as APIs do Photos em 31 de março de 2025
O Google reduziu fundamentalmente o que qualquer aplicativo de terceiros pode fazer com a biblioteca do Google Photos de um usuário. Esta ferramenta, e a biblioteca CasCap.Api.GooglePhotos subjacente, são limitadas por essa mudança:
- A API de Biblioteca só pode ver álbuns e itens de mídia criados pelo próprio cliente OAuth desta ferramenta. Tudo o que já está na sua conta é invisível para ela.
- Ler uma biblioteca inteira, e portanto a detecção de duplicatas e o backup de toda a biblioteca, não é mais possível.
- As operações de compartilhamento da API de Biblioteca e álbuns compartilhados foram totalmente removidas.
- A mídia existente do usuário só pode ser acessada através da API Picker, que exige que o usuário selecione itens interativamente, uma sessão de cada vez.
A versão 1.0 remove os comandos que dependiam do acesso à biblioteca completa em vez de deixá-los retornar resultados parciais enganosos. Veja a atualização da API do Google.
Removido na versão 1.0
Comando | Motivo
--- | ---
mediaitems duplicates | A detecção de duplicatas precisa ler a biblioteca inteira.
sync, albums sync | Não há metadados de toda a biblioteca para armazenar em cache.
Prompt de credencial interativo | As credenciais agora vêm da configuração; veja Configuração.
Instalação
A ferramenta é distribuída como uma ferramenta global .NET:
dotnet tool update --global googlephotos
Requer o runtime .NET 10.
Configuração do Google Cloud
1. Crie um projeto no console do Google Cloud.
2. Abra APIs e Serviços > Biblioteca e ative a API do Google Photos Library.
3. Configure a tela de consentimento OAuth e crie um ID de cliente OAuth do tipo Aplicativo de desktop.
4. Anote o ID do cliente e o segredo do cliente; eles são fornecidos através da configuração abaixo.
A orientação completa de configuração está na documentação da biblioteca.
Configuração
A ferramenta vincula a seção CasCap:GooglePhotosOptions a partir do appsettings.json fornecido, um appsettings.json no diretório de trabalho atual, User Secrets do .NET e variáveis de ambiente, em ordem crescente de precedência.
Como uma ferramenta global é instalada em um armazenamento somente leitura, User Secrets ou variáveis de ambiente são a escolha prática:
$env:CasCap__GooglePhotosOptions__User = "seu.email@exemplo.com"
$env:CasCap__GooglePhotosOptions__ClientId = "000000000000-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com"
$env:CasCap__GooglePhotosOptions__ClientSecret = "seu-segredo-de-cliente"
Ou um appsettings.json ao lado de onde você executa a ferramenta:
{
"CasCap": {
"GooglePhotosOptions": {
"User": "seu.email@exemplo.com",
"ClientId": "000000000000-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com",
"ClientSecret": "seu-segredo-de-cliente",
"Scopes": [
"AppendOnly",
"ReadOnlyAppCreatedData",
"EditAppCreatedData"
]
}
}
}
Escopo | Necessário para
--- | ---
AppendOnly | mediaitems upload, albums add
ReadOnlyAppCreatedData | albums list, albums download, mediaitems list
EditAppCreatedData | Adicionar itens de mídia carregados a álbuns
Nunca envie um segredo de cliente. A concessão OAuth em si é armazenada em cache pelo Google.Apis.Auth em %APPDATA%/googlephotos/auth (ou o equivalente da plataforma) e pode ser limpa com googlephotos logout.
Uso
Cada comando tem ajuda sensível ao contexto:
googlephotos --help
googlephotos albums --help
Álbuns
# listar os álbuns que esta ferramenta criou
googlephotos albums list
# mostrar apenas álbuns que compartilham um título com outro álbum
googlephotos albums list --duplicates
# criar um álbum vazio
googlephotos albums add -t "meu título de álbum"
# baixar itens de mídia de um álbum
googlephotos albums download -t "meu título de álbum" -o ./download
# baixar cópias redimensionadas, cortadas e que preservam EXIF
googlephotos albums download -t "meu título de álbum" -o ./download --maxheight 100 --crop --exif --overwrite
Itens de mídia
# listar os itens de mídia que esta ferramenta criou
googlephotos mediaitems list
# fazer upload de uma árvore de pastas
googlephotos mediaitems upload -s ./fotos
# fazer upload apenas de JPEGs, para um álbum nomeado, sem solicitar
googlephotos mediaitems upload -s ./fotos --pattern *.jpg -t "feriado 2026" -y
# fazer upload de uma árvore de pastas, criando um álbum por subpasta
googlephotos mediaitems upload -s ./fotos --hierarchy
Sair
googlephotos logout
Desenvolvimento
dotnet build CasCap.GooglePhotosCli.Debug.slnx
dotnet test src/CasCap.GooglePhotosCli.Tests/CasCap.GooglePhotosCli.Tests.csproj
A solução Debug resolve CasCap.Api.GooglePhotos através de uma referência de projeto local, portanto, espera que esse repositório seja clonado ao lado deste. A solução Release usa o pacote NuGet publicado.
Feedback e problemas
Por favor, relate qualquer coisa na página de problemas do GitHub.
Licença
CasCap.GooglePhotosCli é Copyright © 2020 @f2calv sob a licença MIT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.