/** * Google Kalender för Reseplaneraren (reseplaneraren.pages.dev). * * Lämnar ut dina händelser med en plats (i dag och sju dagar framåt) som JSON, så att appen kan räkna resan * dit och veta var du troligen är. Bara tid, titel, plats och kalenderns namn lämnar Google, och bara till den * som har webbappens länk. Heldagshändelser, händelser utan plats, digitala möten och sådant du tackat nej till hoppas över. * * Så här (en gång): * 1. script.google.com → öppna ditt projekt för kalendern (eller Nytt projekt) → ersätt allt med den här filen. * 2. Välj funktionen "testa" och tryck Kör. Godkänn att skriptet får läsa din kalender. Loggen visar vad som hittas. * 3. Distribuera → Hantera distributioner → pennan → Version: Ny version → Distribuera. * Första gången: Distribuera → Ny distribution → Webbapp, Kör som: Jag, Åtkomst: Alla. * 4. Kopiera webbappens länk (slutar på /exec) och klistra in den i appen: Mer → Kalender → Google Kalender. * Länken är lång och går inte att gissa, precis som Google Kalenders egen "hemliga adress i iCal-format". * Sprid den inte. Skulle den ändå spridas: Distribuera → Hantera distributioner → arkivera, och gör en ny. */ const DAGAR_FRAMÅT = 7; // kalendrar som aldrig är resor const HOPPA_ÖVER = ["Helgdagar", "Holidays", "Födelsedagar", "Birthdays", "Veckonummer", "Week Numbers"]; // platser som inte är platser const DIGITALT = /zoom\.us|teams\.microsoft|teams\.live|meet\.google|webex|^https?:\/\/|^(digitalt|online|distans|zoom|teams)$/i; function doGet(e) { const nu = new Date(); const från = new Date(nu); från.setHours(0, 0, 0, 0); // dagens tidigare händelser: där är du troligen nu const till = new Date(nu.getTime() + DAGAR_FRAMÅT * 24 * 3600 * 1000); const ut = []; CalendarApp.getAllCalendars().forEach(kal => { const namn = kal.getName(); if (kal.isHidden() || HOPPA_ÖVER.some(n => namn.toLowerCase().includes(n.toLowerCase()))) return; kal.getEvents(från, till).forEach(ev => { if (ev.isAllDayEvent()) return; const plats = (ev.getLocation() || "").trim(); if (!plats || DIGITALT.test(plats)) return; try { if (ev.getMyStatus() === CalendarApp.GuestStatus.NO) return; } catch (x) {} ut.push({ title: ev.getTitle() || "Händelse", start: ev.getStartTime().toISOString(), end: ev.getEndTime().toISOString(), location: plats, calendar: namn }); }); }); ut.sort((a, b) => a.start.localeCompare(b.start)); return svar({ events: ut.slice(0, 80) }); } function svar(data) { return ContentService.createTextOutput(JSON.stringify(data)).setMimeType(ContentService.MimeType.JSON); } // Kör den här en gång i editorn för att ge skriptet läsrätt till kalendern och se vad det hittar. function testa() { Logger.log(doGet({ parameter: {} }).getContent()); }