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.