Tellerrand Webdesign Friedrichshafen, Webentwicklung Bodensee. Auto-Post Facebook Posts on Wordpress without Plugin. Graph API PHP. Facebook Wordpress

Auto Post on Facebook in WordPress ohne Plugin

Web Development
In meinem vorherigen Beitrag habe ich über automatisches Posten auf Twitter mit WordPress erklärt wie dies ganz leicht von statten geht. Nun möchte ich euch zeigen, wie das auch für Facebook funktioniert. Was man dazu braucht, ist eine Facebook App und die PHP SDK zum kommunizieren mit der Facebook API.

Jedoch ist das automatische Posten auf Facebook weitaus komplizierter als das Vorgehen bei Twitter. Dass ist aber nicht so verwunderlich, das Facebook an und für sich weitaus komplizierter aufgebaut ist als Twitter, schaut man sich nur die Fan-Seiten oder Business-Seiten an.

Ein wichtiger unterschied zwischen dem Access Token von Twitter und dem Facebook Access Token ist, der von Twitter läuft nie ab, der von Facebook allerdings ist nur für 60 Tage gültig und muss dann erneuert werden.

Welche Dateien von Codebird werden benötigt?

Es werden lediglich drei Dateien benötigt die im Themeordner untergebracht werden müssen. Ich habe sie z.B. unter THEMENAME/api/facebook abgelegt.

  • facebook.php (the main class)
  • base_facebook.php (other classes)
  • fb_ca_chain_bundle.crt (SSL certificate)
Lade dir hierzu die Facebook PHP SDK von Github herunter: github.com/facebook/facebook-php-sdk.

Wie erstelle ich eine Facebook App?

1. Geh auf developers.facebook.com/apps melde Dich mit deinem Account an und drücke danach ‚+Create new app‘.

how-to-create-a-facebook-app-1

Und dann oben rechts auf ‚Skip Quickstart‘. Gib deiner App nun einen gültigen Namen.

how-to-create-a-facebook-app-2

2. Nachdem die Facebook die App erstellt hat, sind ‚App ID‘ und ‚App Secret‘ verfügbar.

how-to-create-a-facebook-app-3

Um die App nun benutzen zu können muss diese erst noch veröffentlicht werden. Bevor du die App veröffentlichen kannst musst du noch eine Kontakt E-Mail in den Einstellungen hinterlassen. Dazu gehe auf ‚Settings‘ und gib eine gültige Contact E-Mail Adresse ein.

how-to-create-a-facebook-app-4

Danach kann die App auch schon veröffentlicht werden. Hierzu gehst du auf ‚Status & Review‘ und legst den Schalter rechts einfach auf ‚YES‘.

how-to-create-a-facebook-app-5

3. Setze die Canvas URL und drücke ‚Save Changes‘.

Hierfür musst du zunächst auf ‚Settings‘ und dann auf ‚+ Add Platform‘ klicken. Dann öffnet sich ein Fenster in dem du ‚Facebook Canvas‘ auswählst. Damit erstellst eine einfache Canvas Seite für deine App. In der ‚Canvas URL‘ trägst du ‚http://localhost/fb-tokens/‘ und in ‚Secure Canvas URL‘ ‚https://localhost/fb-tokens/‘ ein.

how-to-create-a-facebook-app-6

Wie erhalte ich den Facebook Access Token?

1. Authorisiere Deine App und gib ihr die notwendigen Rechte

Damit nachfolgender Link auch richtig funktioniert und man an den Access Token kommt, müssen vorher einige Einstellungen in der Facebook App getätigt werden. So geben wir der App jetzt schon die notwendigen Berechtigungen um die Seiten zu verwalten (manage_pages) und auch in deren Namen Beiträge zu publizieren (publish_actions).

how-to-create-a-facebook-app-7

Damit diese Einstellung auch angewendet werden können, müssen der App noch ggf. einige Angaben wie z.B. eine Beschreibung oder ein Logo hinzugefügt werden.

how-to-create-a-facebook-app-8

how-to-create-a-facebook-app-9

Gib nun folgende URL in deinem Browser ein, ersetze die ‚APP_ID‘ durch Deine App ID und die ‚redirect_uri‘ ist die URL die wir in der Canvas URL definiert haben.

			

URL

https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=http://localhost/fb-tokens/&scope=manage_pages,publish_actions
Mit dem hintere Teil der URL  ‚&scope=manage_pages,publish_actions‘ , gibst du der App die nötigen Rechte um Seiten zu bearbeiten und auch Beiträge zu posten. Damit diese auch übernommen werden, müssen diese der App vorher schon zugewiesen worden sein (siehe vorheriges Bild).

Es sollte dann eine Meldung aufkommen in der gefragt wird, ob du der App Zugang zu Deiner Freundesliste gibst. Klicke hier auf OK.

how-to-create-a-facebook-app-10

Danach noch eine Meldung mit der Frage, in welchen Kreisen gepostet werden soll. Wähle den gewünschten Kreis (Öffentlich, Freunde, Nur ich) und klicke OK.

how-to-create-a-facebook-app-11

Dritte und letzte Meldung fragt, ob die App Deine Seiten verwalten soll. Klicke hier auch wieder auf OK.

how-to-create-a-facebook-app-12

Nachdem alle Anfragen bestätigt wurden, wird nun eine Seite angezeigt von der URL wir den ‚code‘ Wert benötigen.
Diesen Code, die App ID und die App Secret ersetzt du jeweils in der nachfolgenden URL und fügst diese in Deinem Browser ein.

			

URL

https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://localhost/fb-tokens/&client_secret=APP_SECRET&code=CODE_FROM_BEFORE
Und du bekommst den ersehnten Access Token geliefert!

2. Access Tokens für Facesbook Seiten (wenn notwendig)

Wenn du Beiträge auf einer Facebook Seite posten lassen möchtest dann benötigst du den Access Token Deiner Facebook Seite. Um diesen zu bekommen, ersetzt du durch den Platzhalter ACCESS_TOKEN der nachfolgenden URL.

			

URL

https://graph.facebook.com/me/accounts?access_token=ACCESS_TOKEN
Das Ergebnis wird ein JSON String sein, aus welchem man dann ganz leicht den Access Token einzelner Seiten herauslesen kann.

Wie finde ich meine Facebook ID?

Die Facebook ID eines persönlichen Profils, einer Fan-Seite oder Business-Seite sind öffentliche Informationen und über die Facebook Graph API verfüg- und abrufbar. Nutze hierfür folgende URL wie diese und ersetze ‚username‘ durch den Namen deines Profils oder Facebook-Seite.

http://graph.facebook.com/username

Umsetzung: Datenbank und Scripte

Bevor wir das eigentliche Script ausführen können, benötigen wir zunächst einmal eine Datenbanktabelle (in WordPress wird meist MySQL verwendet) mit folgenden Spalten:

			

SQL

— — Tabellenstruktur für Tabelle `tr_facebook_topics` — CREATE TABLE IF NOT EXISTS `tr_facebook_topics` ( `id` tinyint(4) NOT NULL AUTO_INCREMENT, `post_id` int(11) NOT NULL, `title` varchar(140) NOT NULL, `url` varchar(400) NOT NULL, `description` varchar(400) NOT NULL, `facebook_post` varchar(400) NOT NULL, `facebook_image` varchar(400) NOT NULL, `facebook_pubstatus` int(11) NOT NULL, `date_published` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
Das nachfolgende Script speichert deinen erstellten, als Entwurf gespeicherten oder veröffentlichen Beitrag in der zuvor erstellten MySQL Datenbanktabelle  ‚tr_facebook_topics‘  ab.

			

PHP

function save_facebook_topic( $post_id ) { global $wpdb; $post = get_post( $post_id ); setup_postdata( $post ); if( get_post_status( $post_id ) == ‚draft‘ && get_post_meta($post_id, „post_sharing_facebook“, true) == ‚1‘ || get_post_status( $post_id ) == ‚publish‘ && get_post_meta($post_id, „post_sharing_facebook“, true) == ‚1‘) { // get post data $post_title = get_the_title(); $post_url = get_permalink(); $post_excerpt = get_the_excerpt(); // image url $thumb = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), ‚full‘ ); $post_image_url = $thumb[‚0‘]; // assemble facebook post $facebook_post = $post_title . ‚ ‚ . $post_url; // update an existing post $result = $wpdb->get_var( „SELECT id FROM tr_facebook_topics WHERE post_id = “ . $post_id ); if (count($result) > 0) { // update row $wpdb->update( ‚tr_facebook_topics‘, array( ‚title‘ => $post_title, ‚url‘ => $post_url, ‚description‘ => $post_excerpt, ‚facebook_post‘ => $facebook_post, ‚facebook_image‘ => $post_image_url, ‚date_published’=> date(„YmdHis“) ), array( ‚post_id‘ => $post_id ) ); } else { // save post data as twitter topic in db $wpdb->insert( ‚tr_facebook_topics‘, array( ‚post_id‘ => $post_id, ‚title‘ => $post_title, ‚url‘ => $post_url, ‚description‘ => $post_excerpt, ‚facebook_post‘ => $facebook_post, ‚facebook_image‘ => $post_image_url, ‚facebook_pubstatus‘ => 0, ‚date_published‘ => date(„YmdHis“) ) ); } } wp_reset_postdata(); } add_action( ’save_post‘, ’save_facebook_topic‘ ); add_action( ‚publish_post‘, ’save_facebook_topic‘ );
Die If-Bedingung  ‚get_post_meta($post_id, „post_sharing_facebook“, true)‘  bezieht sich auf eine von mir erstellte Meta-Box im WordPress-Backend. Die Meta-Box gibt dem Benutzer lediglich die Möglichkeit für jeden Beitrag zu bestimmen, ob dieser Beitrag auf Facebook gepostet werden soll oder nicht (via Checkbox). Diese Zeile kann also problemlos entfernt werden, wenn man keine extra Meta-Box erstellen möchte. Hier ein kleiner Ausschnitt:

			

PHP

… array( „section“ => „Sharing“, „id“ => „post_sharing_facebook“, „type“ => „checkbox“, „title“ => „Twitter“ ), …
Dieses Main-Script könnte ggf. auch über einen Cronjob ausgeführt werden aber in unsererem Beispiel wird das Main-Script ausgeführt, wenn man auf ‚Veröffentlichen‘ klickt mit der WordPress-Action  ‚add_action( ‚publish_post‘, ‚facebookAutoPost‘, 10, 2 )‘ .

Diese Scripte können einfach in die function.php hinzugefügt werden und der Rest erledigt sich schon von alleine.

			

PHP

function facebookAutoPost( $ID, $post ) { if(get_post_meta($ID, „post_sharing_facebook“, true) == ‚1‘) { // determine script invocation (CLI or Web Server) if(php_sapi_name() == ‚cli‘) { $line_break = PHP_EOL; } else { $line_break = ‚<br>‘; } // initialize global $wpdb; $options = get_option(‚tr_share_options‘); // require Facebook PHP SDK require_once(TEMPLATEPATH . „/api/facebook/facebook.php“); // initialize Facebook class using your own Facebook App credentials $config = array(); $config[‚appId‘] = // your APP_ID – configure appropriately $config[’secret‘] = // your APP_SECRET – configure appropriately $config[‚fileUpload‘] = false; // optional $fb = new Facebook($config); // get current time – configure appropriately, depending to how you store dates in your database $now = date(„YmdHis“); // initialize share_topics $share_topics = array(); // create array with topics to be posted on Facebook $sql = ‚SELECT id as topic_id, title, url, description, facebook_post, facebook_image, facebook_pubstatus FROM tr_facebook_topics ‚ . ‚WHERE date_published IS NOT NULL AND date_published <= ' . "'" . $now . "' " . 'AND facebook_pubstatus = 0 ' . 'ORDER BY date_published ASC'; $result = $wpdb->get_results($sql); if($result === false) { $user_error = ‚Wrong SQL: ‚ . $sql . ‚
‚; trigger_error($user_error, E_USER_ERROR); } foreach($result as $row) { $a_topic = array( „topic_id“ => $row->topic_id, „topic_title“ => $row->title, „topic_url“ => $row->url, „topic_description“ => $row->description, „facebook_post“ => $row->facebook_post, „facebook_image“ => $row->facebook_image, „facebook_pubstatus“ => $row->facebook_pubstatus ); array_push($share_topics, $a_topic); } // AUTOMATIC POST EACH TOPIC TO FACEBOOK foreach($share_topics as $share_topic) { if($share_topic[‚facebook_pubstatus‘] == 0) { // define POST parameters $params = array( „access_token“ => $options[‚fb_access_token‘], // configure appropriately „message“ => $share_topic[‚facebook_post‘], „link“ => $share_topic[‚topic_url‘], „name“ => $share_topic[‚topic_title‘], „caption“ => str_replace(„http://“, „“, get_bloginfo(‚url‘)), // configure appropriately „description“ => $share_topic[‚topic_description‘] ); if($share_topic[‚facebook_image‘]) { $params[„picture“] = $share_topic[‚facebook_image‘]; } // check if topic successfully posted to Facebook try { $ret = $fb->api(‚/YOUR_FACEBOOK_ID/feed‘, ‚POST‘, $params); // FB_ID from profile or from page – configure appropriately // mark topic as posted (ensure that it will be posted only once) $sql = ‚UPDATE tr_facebook_topics SET facebook_pubstatus = 1 WHERE id = ‚ . $share_topic[‚topic_id‘]; if($wpdb->query($sql) === false) { trigger_error(‚Wrong SQL: ‚ . $sql . ‚ Error: ‚ . E_USER_ERROR); } $result .= $share_topic[‚topic_id‘] . ‚ ‚ . $share_topic[‚facebook_post‘] . ‚ successfully posted to Facebook!‘ . $line_break; } catch(Exception $e) { $result .= $share_topic[‚topic_id‘] . ‚ ‚ . $share_topic[‚facebook_post‘] . ‚ FAILED… (‚ . $e->getMessage() . ‚)‘ . $line_break; } sleep(3); } } if(php_sapi_name() == ‚cli‘) { // keep log file_put_contents(TEMPLATEPATH . „/api/logs/auto_share.log“, $result . str_repeat(‚=‘, 80) . PHP_EOL, FILE_APPEND); echo $result; } else { $html = ‚<html><head>‘; $html .= ‚<meta http-equiv=“Content-Type“ content=“text/html; charset=UTF-8″>‘; $html .= ‚</head>‘; $html .= ‚<body>‘; $html .= $result; $html .= ‚</body>‘; $html .= ‚</html>‘; echo $html; } } } add_action( ‚publish_post‘, ‚facebookAutoPost‘, 10, 2 );


Das wars auch schon. Jetzt seid ihr gefragt, was haltet ihr von diesem Beitrag? Ist er zu gebrauchen? Schreibt es in die Kommentare und teilt ihn.
Teilen: Share on Facebook0Share on Google+0Tweet about this on Twitter0Email this to someonePrint this page
Herausgeber:

Patrick Kleiner

Patrick Kleiner arbeitet als Webdesigner, Webentwickler und ist mitwirker bei der Agentur tellerrand | Mehr als Webdesign.

Keine Kommentare

Schreibe einen Kommentar