Google Kalender Termine im WebFront anzeigen

Hallo zusammen,

ist es einem von Euch gelungen die Geburstage anzeigen zu lassen? Bei mir wird der Kalender von Google nur als HTML Link angeboten. Funktioniert das damit auch?

Einen wunderschönen guten Morgen!

Da dies mein erster Beitrag im Forum ist wollte ich anstatt mal mit Fragen zu „nerven“,
einfach mal meinen „Einstand“ leisten :rolleyes:

Ich nutze das Script für den Google-Kalender schon einige Zeit. Da ich momentan an
meiner Visualisierung arbeite, habe ich auch mal das Kalender-Script etwas modifiziert.
Die normale Standartausgabe als TextBox war mir etwas, nun ja, langweilig.

Es kann möglich sein, dass man die Variable erst löschen muss, weil diese erst bei einer
Neuerzeugung auf HTML umgestellt wird.

Die Anzeige klappt bei mir mit dem Firefox, IE sowie auf meinen sämtlichen Android-Geräten.

Die ShortCuts nutze ich hierbei für die farbige Darstellung der Einträge. Ebenso blinken die
heutigen Einträge als Erinnerung. Das kann man leicht über die CSS-Einträge ändern.

Viel Spaß damit!

Grüße Johannes

<?php
// Hier die GoogleKalender eintragen
// ReadCalendar(Userid, MagicCookie, Tage die abgerufen werden, ShortCut für farbige Sortierung)


//Hier die Farbe für die ShortCuts angeben
$SC_Farbe[1] = "gray";
$SC_Farbe[2] = "#00AD00";
$SC_Farbe[3] = "darkred";
$SC_Farbe[4] = "lightblue";

//Hier den Style wählen
$blinkToday = true; // (true/false) blinken des heutigen Kalendereintrages An/Aus

/******** Farbnamen, RGB-Formatierung, Hex-Zahlen möglich *********/
$StyleText[1] = "white"; // Textfarbe Datum
$StyleText[2] = "gray"; // Textfarbe Wochentag

/*** xx-small, x-small, small, normal, large, x-large, xx-large ***/
/************** oder Angabe in pt - z.B. "12pt" *******************/
$StyleText[3] = "large"; // Textgröße Datum
$StyleText[4] = "normal"; // Textgröße Wochentag
$StyleText[5] = "normal"; // Textgröße Eintrag



/****************** Ab hier wieder die Finger lassen **************/
// Wochentage auf Deutsch
$tag[0] = "Sonntag";
$tag[1] = "Montag";
$tag[2] = "Dienstag";
$tag[3] = "Mittwoch";
$tag[4] = "Donnerstag";
$tag[5] = "Freitag";
$tag[6] = "Samstag";
$deco = "";
if($blinkToday)$deco = "blink";

function DateCompare($a, $b) {
    if ( $a['Datum'] == $b['Datum'] ) return 0;
    if ( $a['Datum'] < $b['Datum'] )  return -1;
    return 1;
}

function ReadCalendar($userid, $magicCookie, $maxDays, $shortCut) {
    global $calcData;

    if ($magicCookie != '')
        {
		   $feedURL = "http://www.google.com/calendar/feeds/$userid/private-$magicCookie/full";
			//echo $feedURL; echo "/BR";
			}
else
        $feedURL = "http://www.google.com/calendar/feeds/$userid/public/full";

	 $feedParams = "?singleevents=true&max-results=20&orderby=starttime&start-min=".urlencode(date("c",strtotime("today")))."&start-max=".urlencode(date("c", strtotime("+".$maxDays." day")))."&sortorder=a";
    $sxml = simplexml_load_file($feedURL.$feedParams);

    $date = "";
    foreach ($sxml->entry as $entry) {
        $title = stripslashes(utf8_decode($entry->title));
        $gd = $entry->children('http://schemas.google.com/g/2005');

        $startTime = '';
			$endTime = '';
		  if ( $gd->when ) {
            $startTime = $gd->when->attributes()->startTime;
            $endTime = $gd->when->attributes()->endTime;
		  } elseif ( $gd->recurrence ) {
            $startTime = $gd->recurrence->when->attributes()->startTime;
            $endTime = $gd->recurrence->when->attributes()->endTime;
		  }
		  $startTime = strtotime( $startTime );
		  $endTime = strtotime( $endTime );
			$thisData['Datum'] = $startTime;

        $where = utf8_decode($gd->where->attributes()->valueString);
        if(strlen($where) > 0)
            $where = " (".$where.")";

         $thisData['DatumTxt'] = date("d.m.Y", $startTime);
         $thisData['EndDatumTxt'] = date("d.m.Y", $endTime);
			$thisData['ZeitTxt'] = date("H:i", $startTime);
			$thisData['EndZeitTxt'] = date("H:i", $endTime);
			$thisData['shortCut'] = $shortCut;
         $thisData['Bezeichnung'] = $title.$where;
			if($thisData['ZeitTxt'] == "00:00" && $thisData['EndZeitTxt'] == "00:00")
   		$thisData['EndDatumTxt'] = date("d.m.Y", strtotime($thisData['EndDatumTxt']."-1 day"));


			$calcData[] = $thisData;
			}
}

usort($calcData, 'DateCompare');
$calDataTxt = "<table style='border-spacing:0px; width:100%'>"; // Starte Tabellenansicht
$check_date = "";
foreach($calcData as $thisData)
{
	if($thisData['EndDatumTxt'] != date("d.m.Y", strtotime("yesterday")))
	{
		if($check_date != "" and $thisData['DatumTxt'] != $check_date)$calDataTxt .= "</table></th></tr>";
		if($thisData['DatumTxt'] != $check_date)
		{
			if($thisData['DatumTxt'] == date("d.m.Y"))$headerTxt = "Heute:";
			elseif($thisData['DatumTxt'] == date("d.m.Y", strtotime("+1 day")))$headerTxt = "Morgen:";
			else $headerTxt = $thisData['DatumTxt'];


			$calDataTxt .= "<tr><td style='  padding:4px;
														backgroun-color:#213245;
														background: -moz-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
														background: -webkit-gradient(linear, left top, right top, color-stop(4%,rgba(31,50,79,0)), color-stop(100%,#213245));
														background: -webkit-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
														background: -o-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
														background: -ms-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
														background: linear-gradient(to right, rgba(31,50,79,0) 40%), #213245 100%;'>
														<span style='color:".$StyleText[1].";font-weight:200;font-size:".$StyleText[3]."'>"
														.$headerTxt.
														"</span></td>
                                       	<td style='text-align:right; width:100px; padding:4px;background-color:#213245'>"
														."<span style='color:".$StyleText[2].";font-weight:normal;font-size:".$StyleText[4]."'>"
														.$tag[date("w", strtotime($thisData['DatumTxt']))].
														"<span>".
														"</td>
														</tr>
														<tr>
														<th colspan='2' style='text-align:left;padding-left:20px;padding-right:0px;padding-bottom:10px;padding-top:0px;'>
														<table style='border-spacing:0px; width:100%;padding:5px; border:1px solid #1f3247;'>";
			$check_date = $thisData['DatumTxt'];
			$calDataTxt .= SetEintrag($thisData);
		}
		else
		{
			$calDataTxt .= SetEintrag($thisData);
 		}
	}
}
$calDataTxt .= "</table></th></tr></table>"; // Tabelle schließen

SetValue(CreateVariableByName($IPS_SELF, "Kalender", 3, "~HTMLBox"), $calDataTxt);

/*********** Werte in eine Datei schreiben. Ich habe keine Verwendung dafür *******/

$calDataTxt = '';
foreach($calcData as $thisData)
    $calDataTxt .= $thisData['DatumTxt'].'>'.$thisData['shortCut'].$thisData['Bezeichnung']."
";
/*
$handle = fopen("C:/IP-Symcon/Termine.txt", "w");
fwrite($handle, $calDataTxt);
fclose($handle);
*/

if($IPS_SENDER == "Execute")
{
    
    echo $calDataTxt;
}

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}
function SetEintrag($thisData)
{
	global $tag, $SC_Farbe, $deco, $StyleText;
	if($thisData['ZeitTxt'] == "00:00")
		{
		if($thisData['DatumTxt'] == $thisData['EndDatumTxt'])$thisData['ZeitTxt']="Ganztägig";
		else $thisData['ZeitTxt']="bis ".substr($tag[date("w", strtotime($thisData['EndDatumTxt']))],0,2).", ".$thisData['EndDatumTxt'];
		}
	else $thisData['ZeitTxt'] .= " - ".$thisData['EndZeitTxt']." Uhr";
	if($thisData['DatumTxt'] == date("d.m.Y"))
	{
		return "<tr><td><span style='font-weight:normal;font-size:".$StyleText[5].";text-decoration:".$deco.";;color:".$SC_Farbe[$thisData['shortCut']]."'>".$thisData['Bezeichnung']."</span></td>
						<td style='text-align:right;'>
						<span style='font-weight:normal;font-size:".$StyleText[5].";text-decoration:".$deco.";color:".$SC_Farbe[$thisData['shortCut']]."'>".$thisData['ZeitTxt']."</span></td></tr>";
	}
	else
	{
		return "<tr><td><span style='font-weight:normal;font-size:".$StyleText[5].";color:".$SC_Farbe[$thisData['shortCut']]."'>".$thisData['Bezeichnung']."</span></td>
						<td style='text-align:right'><span style='font-weight:normal;font-size:".$StyleText[5].";color:".$SC_Farbe[$thisData['shortCut']]."'>".$thisData['ZeitTxt']."</span></td></tr>";
	}

}

?>

Screenshot:

Hallo Johannes !

Vielen Dank für den tollen Einstand und herzlich willkommen :slight_smile:

Ich hab das Skript getestet und sofort gegen das alte getauscht - das hier ist optisch einfach viel schöner :slight_smile:

Viele Grüße
Martin

Hi Johannes !!
Ich kann mich nur meinem Vorredner anschließen. Ein super Skript.
Auch ich habe das Skript von dir eingesetzt, alles ohne Probleme.

Gruß Stephan

Danke!

Nun ja, beim Script selbst hab ich nicht viel gemacht. Es war ja schon eine
tolle Vorlage da. Hab nur etwas am grafischem gefeilt.

Schön, dass es euch gefällt.

Grüße

So,

noch ein kleiner Nachschlag.
Jetzt wird auch die Endzeit mit angezeigt.

Edit:
Aktuelles Script hier:

zeitraum.PNG

Danke!
Sieht echt gut aus :slight_smile:

Hi Johannes,

ich hätte da auch noch eine keine Idee. Gut wäre es auch wenn das Enddatum bei Ganztägigenterminen die länger als ein Tag sind, wie z.B. Ferien oder Mehrtägigen Dienstreisen, angezeigt würden.
Vielleicht kannst du das auch noch mit einarbeiten?

Gruß Stephan

Probier mal dieses Script. Noch andauernde Termine werden oben über „Heute“ angezeigt.

Grüße Johannes

Edit:
Aktuelles Script hier:

Hallo Johannes
Dein Script gefällt mir, danke an dieser Stelle :wink:
Ich hätte da noch paar wünsche, wenn es keine große unschtände macht :

  1. Eine Möglichkeit das blinken abstellen (am Anfang des Scripts true, false)
  2. Die Wochentagen farblich gleich mit (heute, morgen) bzw die Möglichkeit zu konfigurieren.
    Vielen Dank

Gesendet von meinem GT-I9100 mit Tapatalk 2

Hi Wladimir.

Hab mich nochmal kurz hingesetzt. Jetzt kann man den Kalender
etwas leichter anpassen.

[ul]
[li]Blinken Ein/Aus[/li][li]Textgröße[/li][li]Textfarbe[/li][/ul]

Edit:
Aktuelles Script hier:

Viele Grüße

Johannes

Hi Johannes
hast du echt Super gemacht. Vielen vielen Dank dafür!

Ich binn kein programmierer, daher bin ich gezwungen mit blöden Fragen nerven, sorry :frowning:
Eine Frage noch: wenn ich unter „Tage die abgerufen werden“ einen wert mehr als 10 eingebe werden trotzdem maximal nur 10 Einträge angezeigt, ist das so gewollt? Ich hätte gern mehr Einträge.
Ist natürlich nicht dringend, also wenn Du zeit und lust dazu hast, was nochmal zu Ändern.

Hej,

ich glaube wenn du 365 Tage eingibst, dann hast du die Termine vom ganzen Jahr :slight_smile:

@milch
leider nicht , nur die Ersten 10 Termine werden angezeigt, nicht Tage!
ist bei mir aktuel Heute 4 Termine, Morgen 6 Termine. Eine Idee?

ps. sind eher Aufgaben nicht Termine;)

auch wenn ich weniger als 10 eingebe, werden 10 Termine angezeigt.

hi,
probier mal bei der Zeile

$feedParams = "?singleevents=true&max-results=10&orderby=starttime&start-min=".urlencode(date("c",strtotime("today")))."&start-max=".urlencode(date("c", strtotime("+".$maxDays." day")))."&sortorder=a";

bei „max-results“ ne andere Zahl eingeben.

Sollte dann funktionieren.

Grüße Johannes

Hi Johannes,
funktioniert bestens, nochmal vielen Dank.

Hi Johannes,

vielen Dank für die Änderung, nur leider wird mir der Endterminerst ein Tag Später angezeigt.
Das heist, wenn ich einen Termin generiere von Montag bis Mittwoch Ganztägig, wird mir ein Terminende Donnerstag angezeigt. Ich habe selber mal versuch das script zu änder aber meine PHP Kenntnisse reichen hier einfach nicht für aus.
Vielleicht kannst du dir das noch mal anschauen.
Vielen Dank für deine Unterstützung schon mal im Voraus.

Gruß Stephan

Hey Stephan,

der Bug ist mir noch gar nicht aufgefallen.
Langsam wird das Teil richtig unübersichtlich :rolleyes:
Hab eigentlich mehr mit Nahrungsmitteln als mit IT am Hut.

Das aktuelle und korrigierte Script findest du hier:

Grüße Johannes

Hi Johannes,

funktioniert jetzt einwandfrei. Vielen Dank dafür.

Stephan

Hallo,

ReadCalendar(Userid, MagicCookie, Tage die abgerufen werden, ShortCut für farbige Sortierung)

Was trage ich genau bei " ShortCut für farbige Sortierung" ein??? Welcher Code muß da stehen??? „Userid“ und „MagicCookie“ sind klar, bei „Tage die abgerufen werden“ eine Zahl???

Gruß Proxima