kraft shdl

Bei einem Verein, für den ich das Social-Marketing betreibe, gibt es sowohl auf der Webseite als auch auf der Facebookseite einen Bereich mit Veranstaltungen. Es hat sich allerdings gezeigt, dass die Ereignisse eigentlich ausschließlich auf Facebook verwaltet werden.

Die Webseite wird mit joomla! Betrieben und als Erweiterung für die Veranstaltungen wird jevents genutzt. Jetzt sollten die Veranstaltungen auf Facebook auch im jevents Kalender angezeigt werden. Bei persönlichen Facebookseiten gibt es ja den Link zum exportieren aller Veranstaltungen. Dazu klickt man bei einer Veranstaltung auf die drei Punkte und wählt den Punkt „Veranstaltung exportieren aus“. Dann wird ein Link zum exportieren aller Veranstaltungen in einem webcal angezeigt. Bei einer Fanpage gestaltet sich das etwas schwieriger und ich habe mir ein php-Skript geschrieben, welches eine ical-Datei zurückgibt. Diese kann man dann als Kalender in jevents importieren.

Voraussetzungen für die korrekte Funktionsweise des Skripts sind:

  1. )Facebook-App muss vorhanden sein
    Für das Vorgehen gibt es zahlreiche Tutorials im Netz. Zum Beispiel ( https://www.codeofaninja.com/2011/07/display-facebook-events-to-your-website.html)
  2. )Jommla und Erweiterung jevents

Ich habe in meinem Webspace einen Ordner webcal erzeugt und dort die index.php und die benötigten SDKs (siehe skript) abgelegt. In jevents muss man dann nur noch einen neuen Kalender anlegen und bei diesem die url http://www.eurewebseite.de/webcal eintragen. Und schon werden die Events von der Facebookseite in den Kalender auf der Webseite importiert.

Und hier nun das php-Skript

<?php
ini_set('error_reporting', '-1');
ini_set('display_errors', '1');
 

// https://github.com/facebook/php-sdk/
require_once __DIR__ . '/Facebook/autoload.php';
// http://www.kigkonsult.se/iCalcreator/
require_once 'iCalcreator.php';

use Facebook\Facebook; 

$config = array(
	'appId' => 'FB-AppID',//change to your fb app id
	'secret' => 'FB-AppSecret',//change to your fb app secret
	'pageId' => 'FB PageID',//change to target fb page id
	'timezone' => 'Europe/Berlin',
	'timezoneDif' => 0,
);
$facebook = new Facebook(array('app_id'=>$config['appId'], 'app_secret'=>$config['secret']));
$page = $facebook->get('/'.$config['pageId'] . '?access_token=DEINACCESS_TOKEN')->getGraphObject();
$v = new vcalendar(array('unique_id'=>$config['pageId']));
$v->setProperty('method', 'PUBLISH' );
$v->setProperty('x-wr-calname', "FrielendorfAktivFB");
$v->setProperty('X-WR-CALDESC', "Duffle");
$v->setProperty('X-WR-TIMEZONE', $config['timezone']);
$cons = $facebook->get('/'.$config['pageId'] . '/events?access_token=DEINACCESS_TOKEN')->getGraphEdge();
foreach ($cons as $event){
	$e = & $v->newComponent('vevent');
	$e->setProperty('dtstart', $event['start_time']->format('YmdHis'));
	if (isset($event['end_time'])) {
		$e->setProperty('dtend', $event['end_time']->format('YmdHis'));
	}
	$e->setProperty('location', $event['place']['name']);
	$e->setProperty('summary', $event['name']);
	if (isset($event['description'])) {
		$e->setProperty('description', $event['description'] . '\nLink: http://www.facebook.com/event.php?eid='.$event['id']);
	}
	else
	{
		$e->setProperty('description', 'Link: http://www.facebook.com/event.php?eid='.$event['id']);
	}
	$e->setProperty('url', 'http://www.facebook.com/event.php?eid='.$event['id']);
}
print $v->returnCalendar();

?>

Die ID der Facebookseite findet ihr unter den Seiteninfos. Im Netz kursiert der Tipp, das Profilbild zu öffnen und dann die SeitenID aus der URL im Browseer auszuschneiden. Das geht auch, ihr müsst aber darauf achten, dass ihr nicht versehentlich die ID des Profilbildes nehmt. Die ID ist die Nummer nach dem letzten Punkt und vor dem letzten /