Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 08. Mai 2014 12:21

COR9
Server-Pate
Ort: Dresden
Registriert: 09. November 2010
Beiträge: 281

Feed mit XMLMadeSimple - Google Data Elemente einbinden

Moderator Edit: Fortsetzung von http://www.cmsmadesimple.de/forum/viewtopic.php?id=2357

Ich gehe hier nochmal ran, weil ich eine Idee habe, wie man zwei Probleme gleichzeitig lösen könnte, nämlich

  • das hier beschriebene, die Werte des Tags <content> aufspalten zu müssen

  • und weitere Weichen einbauen zu müssen, wenn man unterschiedliche Eintragstypen hat, als da wären single Events (1), wiederkehrende Events mit (2a) und ohne Einzeländerung (2b)

Generell besteht bei wiederkehrenden Terminen das Problem, dass keine Angaben zum Veranstaltungsdatum der einzelnen Einträge verfügbar sind, sondern nur, wann der erste Termin mal war.
Allerdings: Innerhalb von <entry> stehen in der full-Ausgabe des Feeds wohlgeordnet weitere Tags des Musters <gd:diesunddas>, siehe folgenden Ausschnitt:

[== XML (Kalenderfeed full, Ausschnitt) ==]
<entry>
		<id>http://www.google.com/calendar/feeds/palimpalimgroup.calendar.google.com/public/full/palimpalim</id>
		<published>2014-02-26T16:10:52.000Z</published>
		<updated>2014-04-02T12:57:22.000Z</updated>
		<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'/>
		<title type='text'>Posaunenchor</title>
		<content type='text'>Posaunenbeschreibung</content>
		<link rel='alternate' type='text/html' href='https://www.google.com/calendar/event?eid=palimpalim' title='alternate'/>
		<link rel='self' type='application/atom+xml' href='https://www.google.com/calendar/feeds/palimpalim40group.calendar.google.com/public/full/palimpalim'/>
		<author>
			<name>palimpalim@gmail.com</name>
			<email>palimpalim@gmail.com</email>
		</author>
		<gd:comments>
			<gd:feedLink href='https://www.google.com/calendar/feeds/palimpalim40group.calendar.google.com/public/full/palimpalim/comments'/>
		</gd:comments>
		<gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'/>
		<gd:where valueString='Pfarrhaus'/>
		<gd:who email='palimpalim@group.calendar.google.com' rel='http://schemas.google.com/g/2005#event.organizer' valueString='Kirchenmusik'/>
		<gd:when endTime='2014-04-30T21:00:00.000+02:00' startTime='2014-04-30T19:45:00.000+02:00'/>
		<gd:transparency value='http://schemas.google.com/g/2005#event.opaque'/>
		<gCal:anyoneCanAddSelf value='false'/>
		<gCal:guestsCanInviteOthers value='true'/>
		<gCal:guestsCanModify value='false'/>
		<gCal:guestsCanSeeGuests value='true'/>
		<gCal:sequence value='0'/>
		<gCal:uid value='palimpalim@google.com'/>
</entry>

Langer Rede kurze Frage: Wie komme ich an die Werte von <gd:where> <gd:when endTime startTime> ran? {$xml|print_r} gibt nix aus.

Beitrag geändert von Andynium (21. Mai 2014 04:27)

Offline

#2 08. Mai 2014 16:54

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

COR9 schrieb:

Langer Rede kurze Frage: Wie komme ich an die Werte von <gd:where> <gd:when endTime startTime> ran? {$xml|print_r} gibt nix aus.

Ähmm, wo kommt den plötzlich $xml her?

Hast du dir schon mal $feeds angeschaut (wenn ich mal von deinem obigen Template ausgehe)?

Offline

#3 08. Mai 2014 18:32

COR9
Server-Pate
Ort: Dresden
Registriert: 09. November 2010
Beiträge: 281

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

{$xml|print_r} gibt mehr aus als {$feeds|print_r}, die gd-Teile ignorieren beide.

Offline

#4 09. Mai 2014 22:04

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

Müsste man mal in die Sourcen schauen, ob es sich an dem ":" verschluckt ... nur fehlt mir momentan die Zeit sad

Offline

#5 09. Mai 2014 10:26

COR9
Server-Pate
Ort: Dresden
Registriert: 09. November 2010
Beiträge: 281

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

cyberman schrieb:

... ob es sich an dem ":" verschluckt ...

So ist es. Hab es mal andersherum getestet und eine geänderte statische XML-Datei ohne Doppelpunkte eingebunden. Und siehe da, die Tags werden ausgegeben und können verwendet werden.
Dieses einfache Template funktioniert mit meinem statischen Testfeed:

[== Smarty ==]
{foreach from=$feeds item='item'}
{assign var="titel" value=$item->title}
{assign var="beschreibung" value=$item->content}
{assign var="ort" value=$item->gdwhere.valueString}
{assign var="beginn" value=$item->gdwhen.startTime|date_format:"%d. %B %Y · %R Uhr"}
<p>Titel: {$titel}<br>
Beschreibung: {$beschreibung}<br>
Wo: {$ort}<br>
Wann: {$beginn}
</p>
{/foreach}

Im eingehenden Feed müsste also z.B. automatisch <gd:where> durch <gdwhere> ersetzt werden. Ich weiß aber leider nicht, in welche Datei man das einbaut oder ob das ein Plugin bewerkstelligen kann.

Offline

#6 09. Mai 2014 10:44

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

Da es ja nicht nur gd:where, sondern alle gd: Werte betrifft, würde ich eher "gd:" pauschal durch "gd" ersetzen. Dieses replace sollte im Normalfall in der action.default.php passieren.

Offline

#7 12. Mai 2014 16:37

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

cyberman schrieb:

Dieses replace sollte im Normalfall in der action.default.php passieren.

Probier mal dies (ungetestet) - Zeile 35 ändern von

in

    $xml = str_replace('gd: ','gd',$feed->getFeed());

Offline

#8 12. Mai 2014 19:15

COR9
Server-Pate
Ort: Dresden
Registriert: 09. November 2010
Beiträge: 281

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

Gibt leider nur eine 1 aus.

Kann man irgednwie herausfinden, ob die Doppelpunkt-Tags den Ruf überhaupt hören oder gar nicht erst ankommen?

Offline

#9 13. Mai 2014 17:03

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

Das Modul ist möglicherweise nicht optimal für die Ausgabe der gd Daten gerüstet.

Probier mal, ob du mit der folgenden Variablen im Template den gesuchten Wert erhältst:

{$entry->children('http://schemas.google.com/g/2005')->when->attributes()->startTime}

Offline

#10 14. Mai 2014 15:31

COR9
Server-Pate
Ort: Dresden
Registriert: 09. November 2010
Beiträge: 281

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

Daraufhin meckert die Smartybase und haut einen Fatal error raus:

Fatal error: Call to a member function children() on a non-object in /home/sagichnicht/public_html/lib/smarty/libs/sysplugins/smarty_internal_templatebase.php(151) : eval()'d code on line 50

Allerdings gibt es ein Add-on für den Feed-Parser SimplePie, das genauso agiert, ich habe auch gleich mit dem CMSMS-Modul RSSSimplePie experimentiert, kriege das Add-on dort wg. mangelhafter PHP-Kenntnisse nicht eingebaut.

Link zum Add-on (Scrollen bis zum Example): http://simplepie.org/wiki/reference/sim … item_class

Und der entscheidende Auszug:

[== PHP ==]
// Retrieve the <gd:when startTime="" /> value.
	function get_gcal_starttime($format = false)
	{
		// We want to grab the Google-namespaced <gd:when> tag.
		// http://simplepie.org/wiki/tutorial/grab_custom_tags_or_attributes
		$when = $this->get_item_tags('http://schemas.google.com/g/2005', 'when');
 
		// Once we grab the tag, let's grab the startTime attribute
		$date = $when[0]['attribs']['']['startTime'];
 
		if ($format)
		{
			// Let's pass it through strtotime() and then format it with date(). This will be the date we display.
			return date($format, strtotime($date));
		}
		else
		{
			// Otherwise we'll return it as-is with no modifications.
			return $date;
		}
	}

Und damit bin ich dann leider wieder off beat.

Beitrag geändert von COR9 (14. Mai 2014 15:33)

Offline

#11 15. Mai 2014 16:11

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

Hmm, zu blöd, dass Smarty dazwischen funkt - unter PHP funktioniert es bestens  hmm ...

Offline

#12 20. Mai 2014 14:51

COR9
Server-Pate
Ort: Dresden
Registriert: 09. November 2010
Beiträge: 281

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

Eine Bitte @cyberman:

Da für mich ein wesentlicher Teil eines Projektes daran hängt und so eine Kompletteinbindung eines Google-Kalenders auch von allgemeinem Interesse ist: Bitte trenne doch den Thread bei z.B. #19 ab und gib dem neuen einen Titel wie »Feed mit XMLMadeSimple - Google Data Elemente einbinden« o.ä.

Vielleicht nimmt dann noch jemand an der Diskussion teil.
Vielen Dank.

Offline

#13 21. Mai 2014 04:22

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

Schon geschehen!

Offline

#14 04. Juni 2014 11:04

COR9
Server-Pate
Ort: Dresden
Registriert: 09. November 2010
Beiträge: 281

Re: Feed mit XMLMadeSimple - Google Data Elemente einbinden

Ich mache jetzt mal hier weiter mit dem Versuch, das Modul GoogleCalendar zu reanimieren.

Vorarbeiten
Auf einem alten System nötige Module installiert mit folgenden Versionen:
Core 1.6.1
CGExtensions 1.15
GoogleCalendar 0.1.1
ZendFramework 1.0.4

GoogleCalendar will daraufhin den korrekten Pfad zum Zend-Framework. Deshalb ZendFramework installiert und dies auskommentiert:

[== GoogleCalendar.module.php(115) ==]
#require_once 'Zend/Loader.php';

Daraufhin wird vom Kalendermodul nur noch die Überschrift und der Hilfe-Link angezeigt. Der Aufruf des Feeds bringt im Frontend einen Fatal error:

Fatal error: Uncaught exception 'Zend_Gdata_App_HttpException' with message 'Expected response code 200, got 400' in /home/meineseite/public_html/modules/ZendFramework/library/Zend/Gdata/App.php:286 Stack trace: #0 /home/meineseite/public_html/modules/ZendFramework/library/Zend/Gdata/App.php(132): Zend_Gdata_App::import('http://www.goog...', Object(Zend_Http_Client), 'Zend_Gdata_Cale...') #1 /home/meineseite/public_html/modules/ZendFramework/library/Zend/Gdata.php(109): Zend_Gdata_App->getFeed('http://www.goog...', 'Zend_Gdata_Cale...') #2 /home/meineseite/public_html/modules/ZendFramework/library/Zend/Gdata/Calendar.php(98): Zend_Gdata->getFeed('http://www.goog...', 'Zend_Gdata_Cale...') #3 /home/meineseite/public_html/modules/GoogleCalendar/GoogleCalendar.module.php(130): Zend_Gdata_Calendar->getCalendarEventFeed(Object(Zend_Gdata_Calendar_EventQuery)) #4 /home/meineseite/public_html/modules/GoogleCalendar/action.default.php(22): GoogleCalendar->get_events(Array, '') #5 /home/meineseite/public_html/lib/classes/cl in /home/meineseite/public_html/modules/ZendFramework/library/Zend/Gdata/App.php on line 286


An allen Fehlerstellen steht $uri, also werden entweder meine Queries (z.B. full statt basic) nicht unterstützt oder eine anders strukturierte URL (alte Calendar-API?) wird erwartet oder die korrekte falsch verarbeitet.

Kann mir hier jemand weiterhelfen?

Offline