@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