@codierknecht das hat schonmal geholfen. Danke dafür. Zum Laufen bekomme ich den Code aber leider noch nicht.
Ich will einmal wöchentlich die Bilder einer gesamten Woche bei Google Fotos von vor 1226 Tagen in ein Album taggen.
// Zugriff auf Google Fotos API const {google} = require('googleapis'); const Photos = require('googlephotos'); const CronJob = require('cron').CronJob; // Authentifizierung mit OAuth 2.0 const OAuth2 = google.auth.OAuth2; const oauth2Client = new OAuth2(); oauth2Client.setCredentials({ access_token: '', refresh_token: '', client_id: '', client_secret: '', }); // Funktion zum Prüfen der OAuth2-Autorisierung async function checkAuthorization() { try { // Access Token prüfen if (!oauth2Client.credentials || !oauth2Client.credentials.access_token) { console.error('Kein Access Token vorhanden. Autorisierung fehlgeschlagen.'); return false; } // Gültigkeit des Access Tokens prüfen const expiryDate = new Date(oauth2Client.credentials.expiry_date); if (expiryDate < new Date()) { console.error('Access Token abgelaufen. Autorisierung fehlgeschlagen.'); return false; } console.info('OAuth2-Autorisierung erfolgreich!'); return true; } catch (error) { console.error(`Autorisierungsfehler: ${error.message}`); return false; } } // Aktuelles Datum const today = new Date(); const todayStr = today.toLocaleDateString('de-DE'); // Albumname für die Bilder der Woche const albumName = `Woche vom ${todayStr}`; // Funktion zum Abrufen der Fotos von vor 1226 Tagen async function getPhotosFrom1226DaysAgo() { const startDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1226); const endDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + 7); try { const response = await Photos.mediaItems.list({ auth: oauth2Client, searchQuery: `date >= '${startDate.toISOString()}' AND date <= '${endDate.toISOString()}'`, pageSize: 100, // Anzahl der Fotos pro Seite }); // Extrahieren der Foto-IDs aus der Antwort const photoIds = response.data.mediaItems.map(item => item.id); return photoIds; } catch (error) { console.error(`Fehler beim Abrufen von Fotos: ${error.message}`); return []; // Leere Liste zurückgeben, falls Fehler auftreten } } // Funktion zum Erstellen eines neuen Albums async function createAlbum(albumName) { const createAlbumRequest = { album: { title: albumName, }, }; const response = await Photos.albums.create(createAlbumRequest); return response.data.id; } // Funktion zum Taggen der Fotos mit dem neuen Album async function tagPhotosWithAlbum(albumId, photoIds) { const tagPhotosRequest = { albumId: albumId, newMediaItemIds: photoIds, }; await Photos.mediaItems.batchAddMediaItemsToAlbum(tagPhotosRequest); } // Hauptfunktion async function main() { // Prüfung der OAuth2-Autorisierung const isAuthorized = await checkAuthorization // Fotos von vor 1226 Tagen abrufen const photos = await getPhotosFrom1226DaysAgo(); // Neues Album erstellen const albumId = await createAlbum(albumName); // Fotos mit dem neuen Album taggen await tagPhotosWithAlbum(albumId, photos.map((photo) => photo.id)); console.info('Die Bilder der Woche wurden erfolgreich in das neue Album ' + albumName + ' getaggt.'); } // Cron-Job-Zeitsteuerung const cronJob = new CronJob('05 21 * * *', async function() { await main(); }); // Starten des Cron-Jobs cronJob.start();Die Credentials sind dabei natürlich gepflegt.
Raus kommt dabei
21:28:00.018 error javascript.0 (831843) script.js.Dev.Google_Fotos: Fehler beim Abrufen von Fotos: Cannot read properties of undefined (reading 'list') 21:28:00.021 error javascript.0 (831843) script.js.Dev.Google_Fotos: TypeError: Cannot read properties of undefined (reading 'create') 21:28:00.021 error javascript.0 (831843) at createAlbum (script.js.Dev.Google_Fotos:54:40) 21:28:00.021 error javascript.0 (831843) at main (script.js.Dev.Google_Fotos:75:25) 21:28:00.023 error javascript.0 (831843) at CronJob.<anonymous> (script.js.Dev.Google_Fotos:86:3)Also ich glaube die Authentifizierung klappt nicht. Ich sehe auch keinen Traffic in der Google Cloud.
Vielleicht weil ich keine Authorisierte JS Quelle angegeben habe?
00c645db-5618-47f6-a017-e321dd74f9f2-image.png
Aber mein iobroker hängt nicht öffentlich im Netz und hat keine Portfreigabe (hoffe ich). Hab da keine URL