Was ist die Meta Graph API?
Die Graph API ist die HTTP-Schnittstelle, über die Anwendungen Daten der Meta-Plattform lesen und schreiben. Ihr Datenmodell besteht laut Dokumentation aus drei Bausteinen: Nodes sind einzelne Objekte mit eigener ID — eine Seite, ein Beitrag, ein Foto, ein Kommentar. Edges sind die Verbindungen zwischen ihnen, etwa von einer Seite zu ihren Beiträgen. Fields sind die Eigenschaften eines Objekts, die man gezielt anfordert. Für eine Website ist davon fast nur ein Ausschnitt interessant, nämlich der Page-Node und seine Verbindungen. Alles, was auf einer Facebook-Seite öffentlich sichtbar ist, ist damit im Prinzip auch maschinenlesbar abrufbar — vorausgesetzt, der Zugang ist eingerichtet und freigegeben.
Wie bekomme ich die Beiträge meiner Facebook-Seite auf die Website?
Nicht über ein eingebettetes Widget, sondern über einen Umweg, der sich lohnt: Ein Dienst auf dem Server ruft die Graph API in festen Abständen auf, holt die Beiträge der Seite ab und legt sie im CMS ab — Text, Datum, Link zum Original, dazu das Bild als lokale Datei in der Medienverwaltung. Das Frontend liest danach nur noch aus dem eigenen Datenbestand und gibt eigenes HTML aus. Für den Besucher sieht das aus wie ein Feed, technisch ist es eine ganz normale Liste aus dem CMS. Das hat drei Folgen: Es lädt kein fremder Code im Browser, die Ausgabe fügt sich ins Design der Website ein statt in eine fremde Box, und die Beiträge stehen auch dann auf der Seite, wenn die Schnittstelle gerade nicht antwortet.
Was brauche ich für den Zugang — App, Token, Berechtigungen?
Alle drei, und das ist echter Projektaufwand, den man vorher einplanen sollte. Zuerst wird im Meta-Entwicklerbereich eine App angelegt, die den Zugriff überhaupt erst identifiziert. Dann wird ein Seiten-Zugriffstoken erzeugt: Es entsteht laut Dokumentation aus dem Tausch eines Nutzer-Tokens und ist jeweils an die Kombination aus Seite, Administrator und App gebunden. Dazu kommen die Berechtigungen, die genau beschreiben, was die App lesen darf — für das Auslesen einer Seite werden in der Referenz unter anderem pages_read_engagement und pages_read_user_content genannt, für öffentliche Seiteninhalte zusätzlich die Features Page Public Content Access und Page Public Metadata Access. Für den produktiven Einsatz führt der Weg über die App-Prüfung: Meta verlangt dafür eine Beschreibung des Anwendungsfalls samt Nachweisen. Das ist kein Nachmittag, sondern ein Vorgang mit Wartezeit — deshalb steht er bei uns am Anfang des Zeitplans und nicht am Ende.
Ist ein Facebook-Feed auf der Website datenschutzfreundlich möglich?
Ja, aber nicht in der bequemen Variante. Ein eingebettetes Meta-Widget lädt Fremdcode nach und überträgt dabei Daten des Besuchers — mindestens seine IP-Adresse, weil ohne sie keine Auslieferung funktioniert — und zwar bevor er irgendetwas getan hat. Bei einer Website, die wir trackingfrei bauen, wäre das der einzige Fremdaufruf im Dokument. Deshalb ist der Standardweg: serverseitig abholen, selbst rendern. Dann verlässt beim Seitenaufruf kein Byte des Besuchers die eigene Infrastruktur, weil überhaupt nichts von Meta geladen wird. Soll aus einem konkreten Grund doch eingebettet werden, gilt dieselbe Regel wie bei jedem anderen Fremdinhalt: erst nach aktiver Einwilligung, davor ein beschrifteter Platzhalter. Die rechtliche Bewertung des Einzelfalls gehört in die Hand von Juristinnen und Juristen — wir liefern die technische Umsetzung und die Dokumentation, aus der hervorgeht, wann welche Daten fließen.
Lassen sich auch Veranstaltungen einer Facebook-Seite einbinden?
Technisch gibt es dafür den passenden Baustein: Der Event-Node führt in der Referenz Felder wie Name, Startzeit, Endzeit, Ort, Beschreibung und Titelbild — genau das, was eine Terminliste auf einer Website braucht. Der Zugriff ist allerdings der am engsten geregelte Teil dieser Schnittstelle; die Referenz weist ausdrücklich darauf hin, dass der Zugriff auf Events bei Nutzern und Seiten den Facebook-Marketing-Partnern vorbehalten ist. Wir prüfen deshalb vor dem Konzept, ob dieser Weg für ein Projekt offensteht, und benennen früh die Alternative: Die Termine werden im CMS gepflegt und stehen dort als eigener Inhalt mit strukturierten Daten — was für die Auffindbarkeit ohnehin der bessere Ort ist, weil Suchmaschinen den Termin dann direkt auf der Website finden.
Was passiert, wenn die Schnittstelle nicht antwortet?
Nichts, was der Besucher merkt. Weil das Frontend aus dem zwischengespeicherten Bestand im CMS rendert und nicht live abfragt, ist ein ausgefallener oder langsamer Abruf ein Betriebsvorfall und keine kaputte Seite: Der Bereich zeigt weiterhin den letzten erfolgreich geholten Stand. Der geplante Lauf protokolliert stattdessen den Fehler, versucht es beim nächsten Durchgang erneut und meldet sich, wenn mehrere Durchgänge hintereinander scheitern. Genau das ist der Grund, warum wir gar nicht erst live abfragen. Ein Feed, der bei jedem Seitenaufruf eine fremde Schnittstelle fragt, übernimmt deren Verfügbarkeit und deren Antwortzeit als eigene.
Muss eine Meta-Anbindung gepflegt werden?
Ja — eine Anbindung ist kein Möbelstück, das man einmal hinstellt. Zwei Dinge altern planbar. Erstens die Zugriffstoken: Meta unterscheidet kurzlebige und langlebige Token, nennt in der Dokumentation Größenordnungen von wenigen Stunden beziehungsweise etwa zwei Monaten und weist zugleich darauf hin, dass man sich auf diese Laufzeiten nicht verlassen soll, weil sie sich ändern oder früher enden können. Ein Token braucht also einen definierten Erneuerungsweg, und der Ausfall braucht eine Benachrichtigung an einen Menschen. Zweitens die Schnittstelle selbst: Sie erscheint in Versionen mit Ablaufdatum. Laut Versionsrichtlinie ist jede Version mindestens zwei Jahre nutzbar und läuft zwei Jahre nach dem Erscheinen der Nachfolgeversion aus; Aufrufe an eine abgelaufene Version werden danach auf die nächstältere verfügbare weitergeleitet. Beides gehört in den laufenden Betrieb, nicht in die Projektphase.
Lässt sich Meta in TYPO3, WordPress oder Statamic einbinden?
Ja, in allen drei Systemen — und wir bauen die Anbindung jeweils selbst, mit den Bordmitteln des Systems. In TYPO3 entsteht eine eigene Extension: Der Abruf läuft als Scheduler-Task, die Beiträge werden Records mit eigenem TCA, Bilder landen in der Dateiverwaltung, das Zugriffstoken steht in der Extension-Konfiguration, im Frontend rendert ein Fluid-Template. In WordPress entsteht ein eigenes Plugin statt Theme-Code, damit die Anbindung den Theme-Wechsel überlebt: ein Custom Post Type für die Beiträge, ein geplanter Lauf für den Abruf, Bilder in der Mediathek, das Token in der wp-config.php oder in einer Umgebungsvariablen. In Statamic liegt Laravel darunter: ein Artisan-Command im Scheduler holt die Beiträge, sie werden Entries in einer eigenen Collection, Bilder gehen in einen Assets-Container, das Token steht in der .env. Die Mechanik ist überall dieselbe, nur die Bordmittel heißen anders.