160 lines
5 KiB
Markdown
160 lines
5 KiB
Markdown
# Sincronizzazione Google Photos → Immich (TypeScript)
|
|
|
|
Questo progetto permette di sincronizzare automaticamente gli album condivisi di Google Photos con il tuo server Immich locale, scritto in TypeScript per una migliore manutenibilità e type safety.
|
|
|
|
## Caratteristiche
|
|
|
|
- Sincronizza foto da album specifici di Google Photos verso Immich
|
|
- Forte tipizzazione con TypeScript per evitare errori comuni
|
|
- Memorizza le foto già sincronizzate per evitare duplicati
|
|
- Crea automaticamente gli album in Immich se non esistono
|
|
- Supporta l'aggiornamento del token di autenticazione Google
|
|
|
|
## Prerequisiti
|
|
|
|
- Node.js (v14 o superiore)
|
|
- TypeScript installato globalmente o localmente
|
|
- Un server Immich funzionante
|
|
- Un account Google con accesso agli album condivisi
|
|
- Credenziali OAuth2 di Google Cloud Platform
|
|
|
|
## Installazione
|
|
|
|
1. Clona o scarica questo repository
|
|
2. Installa le dipendenze:
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
## Configurazione
|
|
|
|
### 1. Ottenere le credenziali OAuth2 di Google
|
|
|
|
1. Vai alla [Console Google Cloud](https://console.cloud.google.com/)
|
|
2. Crea un nuovo progetto o seleziona uno esistente
|
|
3. Vai a "API e servizi" > "Credenziali"
|
|
4. Clicca su "Crea credenziali" e seleziona "ID client OAuth"
|
|
5. Configura l'applicazione come "App web"
|
|
6. Aggiungi `http://localhost:3000/oauth2callback` come URI di reindirizzamento
|
|
7. Salva il Client ID e il Client Secret
|
|
|
|
### 2. Abilitare l'API di Google Photos
|
|
|
|
1. Nella Console Google Cloud, vai a "API e servizi" > "Libreria"
|
|
2. Cerca "Photos Library API" e abilitala
|
|
|
|
### 3. Ottenere l'API key di Immich
|
|
|
|
1. Accedi alla tua interfaccia web di Immich
|
|
2. Vai alle impostazioni del profilo
|
|
3. Nella sezione "API Keys", genera una nuova chiave
|
|
|
|
### 4. Configurare lo script
|
|
|
|
Modifica il file `google-photos-to-immich-sync.ts` e aggiorna la sezione `CONFIG`:
|
|
|
|
```typescript
|
|
const CONFIG: Config = {
|
|
// Configurazione Google Photos
|
|
googlePhotos: {
|
|
clientId: 'TUO_CLIENT_ID', // Inserisci il tuo Client ID
|
|
clientSecret: 'TUO_CLIENT_SECRET', // Inserisci il tuo Client Secret
|
|
redirectUri: 'http://localhost:3000/oauth2callback',
|
|
scopes: ['https://www.googleapis.com/auth/photoslibrary.readonly'],
|
|
tokenPath: path.join(__dirname, 'google_token.json'),
|
|
// IDs degli album da sincronizzare
|
|
albumIds: [
|
|
'ID_ALBUM_1', // Puoi trovare questi ID nell'URL quando apri un album su Google Photos
|
|
'ID_ALBUM_2'
|
|
]
|
|
},
|
|
// Configurazione Immich
|
|
immich: {
|
|
apiKey: 'TUA_API_KEY_IMMICH', // Inserisci la tua API key di Immich
|
|
serverUrl: 'http://localhost:3001/api', // Modifica con l'URL del tuo server Immich
|
|
albumNames: {
|
|
'ID_ALBUM_1': 'Nome Album 1 in Immich',
|
|
'ID_ALBUM_2': 'Nome Album 2 in Immich'
|
|
}
|
|
},
|
|
tempDir: path.join(__dirname, 'temp'),
|
|
syncedPhotosFile: path.join(__dirname, 'synced_photos.json')
|
|
};
|
|
```
|
|
|
|
## Come trovare gli ID degli album di Google Photos
|
|
|
|
1. Apri Google Photos nel browser
|
|
2. Vai all'album di cui desideri l'ID
|
|
3. L'URL avrà un formato simile a: `https://photos.google.com/album/ABC123XYZ`
|
|
4. L'ID dell'album è la parte dopo `/album/` (in questo esempio, `ABC123XYZ`)
|
|
|
|
## Utilizzo
|
|
|
|
### Compilazione del codice TypeScript
|
|
|
|
Prima di eseguire lo script, compila il codice TypeScript:
|
|
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
### Esecuzione
|
|
|
|
Per eseguire lo script compilato:
|
|
|
|
```bash
|
|
npm start
|
|
```
|
|
|
|
Oppure, per sviluppo e test, puoi eseguirlo direttamente con ts-node:
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
### Prima esecuzione
|
|
|
|
La prima volta che esegui lo script, ti verrà chiesto di autorizzare l'accesso a Google Photos:
|
|
|
|
1. Ti verrà mostrato un URL da visitare
|
|
2. Accedi con il tuo account Google e autorizza l'applicazione
|
|
3. Copia il codice fornito e incollalo nella console
|
|
4. Lo script inizierà la sincronizzazione
|
|
|
|
### Esecuzioni successive
|
|
|
|
Nelle esecuzioni successive, lo script utilizzerà il token salvato in `google_token.json` e sincronizzerà solo le nuove foto.
|
|
|
|
## Automatizzazione
|
|
|
|
Per automatizzare la sincronizzazione, puoi configurare un cron job:
|
|
|
|
```bash
|
|
# Esempio: esegui la sincronizzazione ogni giorno alle 3:00
|
|
0 3 * * * cd /percorso/al/progetto && npm start >> sync.log 2>&1
|
|
```
|
|
|
|
## Estensione del codice
|
|
|
|
Il codice TypeScript è strutturato con interfacce ben definite, rendendo facile l'estensione per aggiungere nuove funzionalità. Puoi facilmente:
|
|
|
|
- Aggiungere supporto per filtri basati su metadata delle foto
|
|
- Implementare la sincronizzazione bidirectionale
|
|
- Creare una versione con interfaccia grafica
|
|
|
|
## Risoluzione dei problemi
|
|
|
|
- **Errore di compilazione TypeScript**: Verifica che tutte le dipendenze siano installate con `npm install` e che TypeScript sia installato
|
|
- **Errore di autenticazione**: Elimina il file `google_token.json` e riavvia lo script
|
|
- **Errore nel caricamento delle foto**: Verifica che l'API key di Immich sia corretta e che il server sia raggiungibile
|
|
- **Errore nel recupero delle foto da Google**: Verifica che gli ID degli album siano corretti
|
|
|
|
## Contributi
|
|
|
|
Contributi e miglioramenti sono benvenuti! Sentiti libero di inviare pull request o segnalare problemi.
|
|
|
|
## Licenza
|
|
|
|
MIT
|