Ergebnis 1 bis 3 von 3

Thema: Google Kalender Downloader

  1. #1
    Registriert seit
    06.06.2013
    Beiträge
    21

    Google Kalender Downloader

    Für alle, die es z.b. schon immer eine richtige, automatisierte Terminvorschau auf den AM zaubern wollten, hier ist die Lösung.

    Was kommt am Ende heraus?
    Es entsteht ein Textfile "Calendar.txt", das von der Ordner/Dateiüberwachung eingelesen werden kann. Darin stehen alle Einträge von frei wählbaren Google Kalendern in einem frei wählbaren Zeitrahmen.

    Was brauchen wir dazu?
    1) In dem kleinen Programm wird die Google Calendar API verwendet: https://developers.google.com/google-apps/calendar/
    Darüber kann man mit externen Programmen (z.b. auch mit einer Smartphone App) auf die Kalendereinträge zugreifen.
    2) Mein Programm. https://drive.google.com/file/d/0B8H...ew?usp=sharing
    3) evtl Visual Studio Community (kostenlos; https://www.visualstudio.com/de-de/d...loadFamilies_2 )

    Wo liegen die Probleme?
    Bisher ist es nicht möglich, den Speicherplatz und die Einstellungen (welcher Kalender was in welchem Zeitrahmen wie ausgibt) nachträglich zu verändern. Das heißt, man muss diese Einstellungen im Quellcode verändern und das Programm neu kompilieren. Dazu benötigt man Visual Studio (Community Version ist kostenlos)

    Also frisch ans Werk:
    Wenn man mit folgender Textausgabe zufrieden ist, reicht es, nur Schritt 1 hier (https://developers.google.com/google...ckstart/dotnet) zu machen. Die Ausgabedatei wird dabei in den Ordner des Programms gespeichert. Ebenfalls kommt in diesen Ordner die client_secret.json Datei, die ihr gerade von der Google API Seite heruntergeladen habt.


    Upcoming events:
    22.06.2015 19:00:00 - Übung Gruppe 2
    Upcoming Birthdays:
    Heute: Test User 3 hat Geburtstag (2015-06-21)


    Wer Veränderungen vornehmen will, muss auch noch die anderen Schritte des obigen Google-Links machen.
    Als Vorlage kann man dann meinen Quellcode, den ich im nächsten Beitrag poste, verwenden.

    Das Programm kann man dann über die Windows Aufgabenplanung z.b. täglich um 00:10 laufen lassen und und damit hat man täglich aktuelle Termine im AM.


    Jetzt noch ein Aufruf an alle, die sich mit dem Programmieren besser auskennen als ich:
    Bitte tut euch keinen Zwang an, es gibt noch viel zu verbessern:

    1) Ich weiß nicht, wie ich die API Secrets direkt im Quellcode unterbringe, damit man nicht immer die .json Datei braucht, die man nicht an Fremde weitergeben kann/darf. (So wie der es macht hab ich es nicht hin bekommen: http://blog.bigbasti.com/retrieving-...-calendar-api/ )
    Dann bräuchte auch nicht jeder einen eigenen API Zugang.
    2) Eine Bedienoberfläche täte dem Ganzen auch ganz gut, sodass man nicht über den Quellcode Veränderungen vornehmen muss.
    Geändert von CommanderWolf (21.06.2015 um 20:33 Uhr)

  2. #2
    Registriert seit
    06.06.2013
    Beiträge
    21
    Und hier der Quellcode. Einfach diesen anstatt dem von der google Seite in Visual Studio verwenden.
    EDIT: OK, das sieht grauenhaft aus. Hier ist der Link zu einer Textdatei, da wird das nicht alles komplett zerschossen. https://drive.google.com/file/d/0B8H...ew?usp=sharing
    Zitat Zitat von Quellcode
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Calendar.v3;
    using Google.Apis.Calendar.v3.Data;
    using Google.Apis.Services;
    using Google.Apis.Util.Store;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;

    namespace CalendarQuickstart
    {
    class Program
    {
    static string[] Scopes = { CalendarService.Scope.CalendarReadonly };
    static string ApplicationName = "Google Calendar API Quickstart";

    static void Main(string[] args)
    {
    UserCredential credential;

    using (var stream =
    new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
    {
    string credPath = System.Environment.GetFolderPath(
    System.Environment.SpecialFolder.Personal);
    credPath = Path.Combine(credPath, ".credentials");

    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
    GoogleClientSecrets.Load(stream).Secrets,
    Scopes,
    "user",
    CancellationToken.None,
    new FileDataStore(credPath, true)).Result;
    Console.WriteLine("Credential file saved to: " + credPath);
    }

    // Create Google Calendar API service.
    var service = new CalendarService(new BaseClientService.Initializer()
    {
    HttpClientInitializer = credential,
    ApplicationName = ApplicationName,
    });
    //Ab hier kann man den Download und die Ausgabe konfigurieren
    // Define parameters of request. HAUPTKALENDER
    EventsResource.ListRequest request = service.Events.List("primary"); //damit wird der Hauptkalender gewählt
    request.TimeMin = DateTime.Now;
    request.TimeMax = DateTime.Now.AddMonths(+1);
    request.ShowDeleted = false;
    request.SingleEvents = true;
    //request.MaxResults = 10; //Begrenzt die Ergebniszahl auf 10
    request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;
    // END REQUEST HAUPTKALENDER

    // Define parameters of request. GEBURTSTAGE
    EventsResource.ListRequest request1 = service.Events.List("#contacts@group.v.calendar.go ogle.com"); //damit wird der Geburtstags- bzw Kontakte Kalender gewählt
    request1.TimeMin = DateTime.Today;
    request1.TimeMax = DateTime.Now.AddDays(+1);
    request1.ShowDeleted = false;
    request1.SingleEvents = true;
    //request1.MaxResults = 10; //Begrenzt die Ergebniszahl auf 10
    request1.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;
    // END REQUEST GEBURTSTAGE


    // List events. CALENDAR
    Events events = request.Execute();
    Console.WriteLine("Upcoming events:");
    List<string> ListOfLines = new List<string>();
    ListOfLines.Add("Upcoming events:"); //Überschrift über die Termine dieses Kalenders. Kann Beliebig verändert werden.
    if (events.Items != null && events.Items.Count > 0)
    {
    foreach (var eventItem in events.Items)
    {
    string when = eventItem.Start.DateTime.ToString();
    if (String.IsNullOrEmpty(when))
    {
    when = eventItem.Start.Date;
    }
    string eintrag = String.Format("{0} - {1}", when, eventItem.Summary); //Welche Angaben werden in die Textdatei geschrieben?
    //eventItem.Summary = Terminüberschrift // when = Datum des Termins
    Console.WriteLine("({0}) - {1}", when, eventItem.Summary);
    ListOfLines.Add(eintrag);
    }
    } // END LISTE

    // List events. BIRTHDAY
    Events events1 = request1.Execute();
    Console.WriteLine("Upcoming Birthdays:");
    ListOfLines.Add("Upcoming Birthdays:"); //Überschrift über die Termine dieses Kalenders
    if (events1.Items != null && events1.Items.Count > 0)
    {
    foreach (var eventItem in events1.Items)
    {
    string when = eventItem.Start.DateTime.ToString();
    if (String.IsNullOrEmpty(when))
    {
    when = eventItem.Start.Date;
    }
    string eintrag = String.Format("Heute: {0} ({1})", eventItem.Summary, when); //Welche Angaben werden in die Textdatei geschrieben?
    //eventItem.Summary = Terminüberschrift // when = Datum des Termins
    Console.WriteLine("{0} ({1})", eventItem.Summary, when);
    ListOfLines.Add(eintrag);
    }
    File.WriteAllLines("Calendar.txt", ListOfLines); //Schreibt die ganzen Termine in die angegebene Datei
    } // END LISTE

    else
    {
    Console.WriteLine("No upcoming events found.");
    }

    Environment.Exit(0); //Beendet das Programm
    }
    }
    }


  3. #3
    feodor Gast
    Feine Sache, jedoch in Form von der Kalender Überwachung (Input Plugin) bereits integriert :-)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •