Facebook Posts auf der Webseite einbinden

Einen einzelnen Post von Facebook auf der Webseite einzubinden ist recht einfach,

Geht über folgenden Schnipsel:
<fb:post href=“URL“> </fb:post> bzw folgende Funktion.
Bildschirmfoto 2015-03-03 um 12.22.32

Will man aber alle aktuellen Posts anzeigen lassen, ist das etwas aufwändiger. #SEO technisch gesehen, ist das nicht unbedingt sinnvoll, aber manchmal brauch man es halt. Dazu habe ich folgende Gute Anleitung gefunden:
http://advitum.de/2013/05/einfache-einbindung-des-facebook-feeds-mit-php/

Es wird das Facebook SDK benötigt:
https://github.com/facebookarchive/facebook-php-sdk

Hab das Script noch etwas angepasst, damit die Beschreibung mit aufgenommen wird und der Titel und die Beschreibung nach einer bestimmten Anzahl an Zeichen gekürzt wird. Und eine maximale Anzahl an Beiträgen.

Bildschirmfoto 2015-03-03 um 12.31.15<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<style>
body {
 background-image: none;
}
figure img {
 float: left;
 margin-right: 10px;
 width: 80px;
}

figure a {
 display: block;
}

.clear {
 clear: both;
 display: block;
 overflow: hidden;
 visibility: hidden;
 width: 0;
 height: 0;
}

</style>
</head>
<body>
<?php
//URL zum Facebook Feed
$url = '/marexx.net/feed';
$cacheName = 'cache/' . md5($url);
$cacheTime = 3600;
//Maximale Anzahl der Beiträge
$limit = 5;
//Anzahl der Zeichen für die Beschreibung
$len = 100;
//Anzahl der Zeichen für den Titel
$titlelen = 80;
if(!is_file($cacheName) || filemtime($cacheName) + $cacheTime < time()) {
 require_once('src/facebook.php');
 $fb = new Facebook(array(
 'appId' => '#######',
 'secret' => '########'
 ));
 
 $rawFeed = $fb->api($url);
 $feed = array();
 $i = 1;
 
 foreach($rawFeed['data'] as $item) {
 $title = false;

//hier könnt ihr euch ausgeben lassen, welche Daten alle von FB übergeben werden.
 //print_r($item);

 if($title === false && isset($item['story']) && !empty($item['story'])) {
 $title = $item['story'];
 $titleret = explode("||||",wordwrap($title,$titlelen,"||||"));
 $title = $titleret[0]." ...";
 }
 if($title === false && isset($item['message']) && !empty($item['message'])) {
 $title = $item['message'];
 $titleret = explode("||||",wordwrap($title,$titlelen,"||||"));
 $title = $titleret[0]." ...";
 }

 $description = false;
 if($description === false && isset($item['description']) && !empty($item['description'])) {
 $description = $item['description'];
 $ret = explode("||||",wordwrap($description,$len,"||||"));
 $description = $ret[0]." ...";
 }
 
  
 $image = false;
 if($image === false && isset($item['picture']) && !empty($item['picture'])) {
 $image = $item['picture'];
 }
 
 $link = false;
 if($link === false && isset($item['link']) && !empty($item['link'])) {
 $link = $item['link'];
 }

 $created_time = false;
 if($created_time === false && isset($item['created_time']) && !empty($item['created_time'])) {
 $created_time = $item['created_time'];
 }
 
 $feed[] = array(
 'title' => $title,
 'link' => $link,
 'description' => $description,
 'image' => $image,
 'created_time' => $created_time
 );

 if ($i++ == $limit) break;
 }
 
 file_put_contents($cacheName, json_encode($feed));
} else {
 $feed = json_decode(file_get_contents($cacheName), true);
}
foreach($feed as $item) {
?>
<figure>

 <?php if($item['link'] !== false) { ?><a href="<?php echo htmlspecialchars($item['link']); ?>"><?php } ?>
 <?php if($item['image'] !== false) { ?><img src="<?php echo htmlspecialchars($item['image']); ?>" alt="" /><?php } ?>
 <?php if($item['title'] !== false) { ?><figcaption><b><?php echo htmlspecialchars($item['title']); ?></b><br><?php } ?>
 <?php if($item['created_time'] !== false) { ?><?php echo htmlspecialchars($item['created_time']); ?><br><?php } ?>
 <?php if($item['description'] !== false) { ?><?php echo htmlspecialchars($item['description']); ?></figcaption><?php } ?>
 <?php if($item['link'] !== false) { ?> <div class="clear"></div></a><?php } ?>

</figure>
<?php
}

?>
</body>

Kleiner Nachtrag, es werden scheinbar keine Beiträge gezogen die zB über ein WordPress Plugin gepostet wurden, sondern nur die, die direkt auf Facebook gepostet wurden.

Mark ist jetzt drauf gekommen, warum mein Beispiel nicht mehr funktioniert, da meine Daten auf einer alten Facebook API basieren. Schade.
Wenn ich wieder bisschen Zeit finde, versuche ich mich an einer aktualisierten version.

 

Share the love

16 thoughts on “Facebook Posts auf der Webseite einbinden”

  1. Lars Ebert says:

    Danke erstmal für die Erwähnung und Verlinkung!
    Ich habe aber eine Frage: Was spricht aus SEO-Sicht dagegen, die Facebook-Posts auf der eigenen Webseite einzubinden?

    1. marexx says:

      Ich denke, das Ziel sollte sein, User von Facebook auf meine Seite zu bekommen, also dort etwas zu posten, damit mehr Leute meine Seite besuchen, und eben nicht von meiner Seite die Leute zu Facebook zu schicken. Betrifft aber hauptsächlich den Fall, wenn ich meinen persönlichen Feed auf meiner Seite veröffentliche. Oder siehst du das anders?

      1. Lars Ebert says:

        Da hast Du schon recht. Ich mache es aber meistens so, dass ich einfach die „News“ von Facebook auf der eigenen Webseite liste, dort aber keinen Link zum Facebook-Post setze.

        So können die Nutzer direkt auf der Webseite die Neuigkeiten sehen, werden aber eben nicht auf Facebook verwiesen.

        Wenn Du übrigens alle Posts auslesen willst, könntest Du über /posts statt /feed mehr Glück haben.

  2. Dave says:

    Hi,

    ich habe dein Script mal getestet und funktioniert soweit auch gut, nur werden mir die Bilder aus Posts nicht angezeigt.
    Sprich ich bekomme immer nur den Text des Posts aber die Bilder werden mir nicht angzeigt.

    Kannst du mir hier weiterhelfen?

    Danke.

  3. marexx says:

    Kannst du mir einen Link schicken, oder dein Skript mal posten?
    Hier funktioniert es: http://www.marexx.net/test/fb/index.php

  4. manfred says:

    Tolles Skript!! Bei mir werden aber leider auch keine Bilder angezeigt, und der „MORE“ Link zum Text klappt leider auch nicht.
    Woran könnte das liegen?

    1. marexx says:

      Könntest du mir einen link schicken? Wo ich das mal sehen kann?

      1. Manfred says:

        der Text funktioniert jetzt, aber leider werden keine Bilder angezeigt?
        Im Quelltext gibts auch keine img Tags…

        1. marexx says:

          Kann es sein, dass es an den Sichtbarkeitseinstellungen von FB liegt, also das die Posts nicht öffentlich, sondern nur für einen bestimmten Kreis sichtbar sind?

  5. Mark says:

    Danke für das script!

    Funktioniert, ausser das keine Bilder angezeigt werden und keine links funktionieren.
    Ausserdem dürfte alles als ‚title‘ eingelesen werden, weil alles fettgedruckt ist.
    @marexx: Warum das in deinem Beispiel funktioniert wie es soll ist mir ein rätsel…
    Hast du in deinem Beispiel irgendwas geändert was im Tut nicht drin steht?

    Wäre es eigentlich auch möglich das Datum und die Uhrzeit des Facebook-Posts auszulesen und anzuzeigen?

    1. marexx says:

      Kann es sein, dass es an den Sichtbarkeitseinstellungen von FB liegt, also das die Posts nicht öffentlich, sondern nur für einen bestimmten Kreis sichtbar sind?

      1. Mark says:

        Danke für deine Antwort! 🙂
        Ich habs mit der Facebook Seite vom Flughafen Wien getestet, da die in zukunft gewünschte Facebook Seite noch keinen Inhalt hat. Und ich kann die Facebook Seite vom Flughafen Wien ohne Facebook Login ansehen. Wenn du lust hast kannst du ja einen test machen. http://www.facebook.com/flughafenwien

        Ich hab aber gestern noch bisschen geforscht und rausgefunden das das verlinkte SDK veraltet ist und bereits ein neueres verfügbar ist. Leider dürfte das neue SDK nicht mit dem alten kompatibel sein da beim einbinden des neuen SDKs überhaupt nichts mehr angezeigt wird.
        Vielleicht liegt es auch daran das keine Bilder angezeit werden.

        1. marexx says:

          Mhh 🙂
          http://www.marexx.net/test/fb/index.php
          hier tut es. wichtig ist glaub, das man den Pfad richtig angibt:
          $url = ‚flughafenwien/feed‘;

          Danke für den Hinweis mit dem SDK

          1. Mark says:

            Ok ich hab jetzt deinen Beispielcode 1:1 (bis auf die app id und secret, da hab ich meine daten verwendet) in eine neue leere php datei kopiert und auf meinem webspace geladen und aufgerufen.
            Das ergebniss ist das gleiche was ich bereits hatte. Keine Bilder, keine Links und der ganze beitrag wird als Titel geladen.

            So sieht dein Beispiel auf deinem Webspace aus:
            http://www.marexx.net/test/fb/index.php

            und so sieht dein Beispielcode von oben in einer neuen leeren php datei auf meinem webspace aus:
            http://www.myhappykids.at/TEST/test.php

            Ich vermute, dein Beispielcode von oben ist nicht der gleiche wie in deinem Beispiellink 😀

    2. marexx says:

      Ich hab das Script oben etwas erweitert, dann wird auch das Datum ausgegeben: $created_time
      Gibt auch ein updated_time
      http://www.marexx.net/test/fb/index.php

      1. Mark says:

        Cool danke, werd mir das zuhause mal ansehen 🙂

Comments are closed.