Tellerrand Webdesign Friedrichshafen, Webentwicklung Bodensee. Auto-Post Twitter on Wordpress without Plugin. Codebird PHP. Twitter Wordpress.

Auto Post on Twitter in WordPress ohne Plugin

Web Development
Wenn man ständig neue Beiträge auf Sozialen Netzwerken veröffentlicht und zudem noch seinen Blog aktuell halten will, ist die beste Lösung für beides, eine Auto Publish / Auto Post Funktion in seinem WordPress Blog.

Twitter, wie auch fast jedes Soziale Netzwerk, stellt hier eine Programmierschnittstelle (API), die Twitter API zur Verfügung um über diese mit Twitter zu kommunizieren.

Alles was dazu notwendig ist, ist das Erstellen einer Twitter App erstellen. Nachdem die App erstellt wurde hast du Zugriff auf folgende Schlüssel, welche man braucht um eine Verbindung zu seiner Twitter App herzustellen: ConsumerKey, ConsumerSecret, AccessToken und AccessTokenSecret.

Um die Twitter API schlussendlich in WordPress nutzen zu können muss nun lediglich eine PHP-Library zum WordPress Themeordner hinzugefügt werden. Es gibt einige weitere Bibliothecken aber in unserem Fall verwenden wir nur Codebird-php.

Wie erstelle ich eine Twitter App?

1. Melde dich auf apps.twitter.com mit deinem Twitter Account.

2. Drücke jetzt (oben rechts) auf ‚Create New App‘ und folge den Anweisungen und bestätige deine Eingaben mit ‚Create your Twitter application‘.



3. Gehe nun auf den Reiter ‚Permissions‘, setze den Access deiner App auf ‚Read and Write‘ und bestätige mit ‚Update settings‘.



4. Gehe als nächstes auf den Reiter ‚API Keys‘ und erstelle einen Access Token mit dem Button ‚Create my access token‘.

5. Und letzter Schritt. Drücke oben rechts auf ‚Text OAuth‘ um dort alle notwendigen Schlüssel rauszuschreiben. (Wichtig! Diese Schlüssel sollten nicht weitergegeben werden!)

Welche Dateien von Codebird werden benötigt?

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

  • codebird.php (the main class)
  • cacert.pem (Validate Twitter SSL certificate)

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_twitter_topics` — CREATE TABLE IF NOT EXISTS `tr_twitter_topics` ( `id` tinyint(4) NOT NULL AUTO_INCREMENT, `post_id` int(11) NOT NULL, `twitter_post` varchar(140) NOT NULL, `twitter_image` varchar(400) NOT NULL, `twitter_pubstatus` int(11) NOT NULL, `date_published` date NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `post_id` (`post_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
Dieses SQL-Script kann einfach in dem Datenbanktool (z.B. PHPMyAdmin) ausgeführt werden und es erstellt die Tabelle, inklusive der notwendigen Spalten.

Das nachfolgende Script speichert deinen erstellten, als Entwurf gespeicherten oder veröffentlichen Beitrag in der zuvor erstellten MySQL Datenbanktabelle  ‚tr_twitter_topics‘  ab.

			

PHP

function save_twitter_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_twitter“, true) == ‚1‘ || get_post_status( $post_id ) == ‚publish‘ && get_post_meta($post_id, „post_sharing_twitter“, true) == ‚1‘) { // get post data $post_title = get_the_title(); $post_url = get_permalink(); // image url $thumb = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), ‚full‘ ); $post_image_url = $thumb[‚0‘]; // assemble twitter post $twitter_post = $post_title . ‚ // ‚ . $post_url; // update an existing post $result = $wpdb->get_var( „SELECT id FROM tr_twitter_topics WHERE post_id = “ . $post_id ); if (count($result) > 0) { // update row $wpdb->update( ‚tr_twitter_topics‘, array( ‚twitter_post‘ => $twitter_post, ‚twitter_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_twitter_topics‘, array( ‚post_id‘ => $post_id, ‚twitter_post‘ => $twitter_post, ‚twitter_image‘ => $post_image_url, ‚twitter_pubstatus‘ => 0, ‚date_published‘ => date(„YmdHis“) ) ); } } wp_reset_postdata(); } add_action( ’save_post‘, ’save_twitter_topic‘ ); add_action( ‚publish_post‘, ’save_twitter_topic‘ );
Die If-Bedingung  ‚get_post_meta($post_id, „post_sharing_twitter“, true)‘  bezieht sich auf eine von mir erstellte Meta-Box im WordPress-Backend. Die Meta-Box gibt dem Benutzer nur die Möglichkeit für jeden Beitrag zu sagen, ob dieser Beitrag auf Twitter 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_twitter“, „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‘, ‚twitterAutoPost‘, 10, 2 )‘ .

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

			

PHP

function twitterAutoPost( $ID, $post ) { if(get_post_meta($ID, „post_sharing_twitter“, 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 codebird require_once(TEMPLATEPATH . „/api/twitter/codebird.php“); // 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 Twitter $sql = „SELECT id as topic_id, twitter_post, twitter_image, twitter_pubstatus FROM tr_twitter_topics “ . „WHERE date_published IS NOT NULL AND date_published <= " . '"' . $now . '" ' . "AND twitter_pubstatus = 0 " . "ORDER BY date_published ASC"; $result = $wpdb->get_results($sql); if($result === false) { $user_error = ‚Wrong SQL: ‚ . $sql . ‚<br>‘; trigger_error($user_error, E_USER_ERROR); } foreach($result as $row) { $a_topic = array( „topic_id“ => $row->topic_id, „twitter_post“ => $row->twitter_post, „twitter_image“ => $row->twitter_image, „twitter_pubstatus“ => $row->twitter_pubstatus ); array_push($share_topics, $a_topic); } // initialize Codebird (using your access tokens) – establish connection with Twitter $consumer_key = // your Consumer Key $consumer_secret = // your Consumer Secret $access_token = // your Access Token $access_token_secret = // your Access Token Secret \Codebird\Codebird::setConsumerKey($consumer_key, $consumer_secret); $cb = \Codebird\Codebird::getInstance(); $cb->setToken($access_token, $access_token_secret); // AUTOMATIC TWEET EACH TOPIC foreach($share_topics as $share_topic) { if($share_topic[‚twitter_status‘] == 0) { if($share_topic[‚twitter_image‘]) { $params = array( ’status‘ => $share_topic[‚twitter_post‘], ‚media[]‘ => $share_topic[‚twitter_image‘] ); $reply = $cb->statuses_updateWithMedia($params); } else { $params = array( ’status‘ => $share_topic[‚twitter_post‘] ); $reply = $cb->statuses_update($params); } // check if tweet successfully posted $status = $reply->httpstatus; if($status == 200) { // mark topic as tweeted (ensure that it will be tweeted only once) $sql = ‚UPDATE tr_twitter_topics SET twitter_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[‚twitter_post‘] . ‚ success (‚ . $status . ‚)‘ . $line_break; } else { $result .= $share_topic[‚topic_id‘] . ‚ ‚ . $share_topic[‚twitter_post‘] . ‚ FAILED… (‚ . $status . ‚)‘ . $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‘, ‚twitterAutoPost‘, 10, 2 );

Twitter kürzt auf 140 Zeichen

Obwohl die Gesamtlänge von über 140 Zeichen bei Twitter direkt zulässig ist, werden die Tweets, welche über Codebird generiert werden auf 140 Zeichen gekürzt. So ist empfehlenswert weniger Wörter und eine gekürzte URL (shorten URL) zu verwenden.
Ein sauberer Tweet (von Twitter gekürzt) könnte in etwa so aussehen:

Auto Post on Twitter in WordPress ohne Plugin // http://t.co/37w1ofw2D0k



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