Tweets mit PHP einbinden
Du möchtest deine Tweets ganz einfach in deinem Blog oder auf deiner Webseite anzeigen? Hier meine simple Lösung mit einwenig PHP und XML.
Vorsicht: Dies ist keine komplette Lösung sondern nur ein funktionierender Ansatz dazu. Du kannst es natürlich auch so brauchen aber ich würde empfehlen noch einige Kontrollstrukturen einzuführen ;)
Die Sache mit der Sicherheit
Schon bei der 3 Zeile PHP Code habe ich bemerkt das mir mein Web-Host einen Strich durch die Rechnung macht. Ich wollte den Inhalt der Twitter Timeline mittels der Funktion simplexml_load_file(); einlesen, jedoch hat mein Web-Host aus Sicherheisgründen Dateizugriffe auf Dateien welche sich nicht auf dem selben Server befinden deaktiviert. Klar, ich hätte dies ganz einfach in der PHP Konfiguration ändern können aber kann das ein Leie auch? wohl kaum.. Die nächsten zwei Versuche mit file_get_contents() und fopen() haben aus dem selben Grund auch nicht funktioniert.
Als letzte mögliche Lösung habe ich es dann mit cURL versucht und das hat dann auch prima geklappt.
cURL eine von Daniel Stenberg entwickelte Bibliothek, die Verbindungen zu verschiedensten Servern unter Verwendung diverser Protokolle erlaubt.
Wem cUrl noch kein Begriff ist, kann sich hier einlesen.
Twitter bietet einige Schnittstellen an wie zB. oAuth oder REST um mit Twitter zu kommunizieren jedoch ist das alles gar nicht nötig wenn man nur die eigenen Tweets auslesen will.
Mit der Twitter API Methode “search” bietet Twitter eine simple Methode an um die eingenen Tweets im JSON oder Atom Format einzulesen. Beides sind sehr simple Formate um Daten zu speichern aber ich habe mich in meinem Beispiel für das Atom Format entschieden.
Die Lösung
Hier die fertige Funktionen welche du zu deinen PHP Funktionen oder, wenn du WordPress benutzt, in die function.php Datei in seinem Template Verzeichnis kopieren musst.
function show_latest_tweets($limit=5) { // Dein Twittername $user = "podlebar"; // cURL Session wird gestartet $ch = curl_init(); // // cURL Optionen werden gesetzt curl_setopt($ch, CURLOPT_URL, "http://search.twitter.com/search.atom?q=from:".$user."&rpp=".$limit); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // Aufruf ausführen und Session schliessen $res = curl_exec($ch); curl_close($ch); // Rückgabewert in Variable schreiben, in den XML Parser einlesen und ausgeben $xml = simplexml_load_string($res); echo " <ul class="\"tweets\"">"; foreach($xml->entry as $tweet) { echo " <li>".$tweet->content."<span class="\"tweettime">".time_since($tweet->updated)."</span></li> \n"; } echo "</ul> "; } // ATOM Zeitstempel umwandeln function time_since($your_timestamp) { $unix_timestamp = strtotime($your_timestamp); $seconds = time() - $unix_timestamp; $minutes = 0; $hours = 0; $days = 0; $weeks = 0; $months = 0; $years = 0; if ($seconds == 0) $seconds = 1; if ($seconds> 60) { $minutes = $seconds/60; } else { return germanize_time_since($seconds,'Sekunde'); } if ( $minutes >= 60 ) { $hours = $minutes/60; } else { return germanize_time_since($minutes,'Minute'); } if ( $hours >= 24) { $days = $hours/24; } else { return germanize_time_since($hours,'Stunde'); } if ( $days >= 7 ) { $weeks = $days/7; } else { return germanize_time_since($days,'Tag'); } if ( $weeks >= 4 ) { $months = $weeks/4; } else { return germanize_time_since($weeks,'Woche'); } if ( $months>= 12 ) { $years = $months/12; return germanize_time_since($years,'Jahr'); } else { return germanize_time_since($months,'Monat'); } } //Zeitangabe korrigieren function germanize_time_since($num,$word) { $num = floor($num); $addon = "n"; if($word=="Tag" || $word=="Monat") $addon = "en"; if ($num == 1) return "Vor ".$num." ".$word; else return "Vor ".$num." ".$word.$addon; } // Tweets anzeigen // Diese funktion kannst du in jeder beliebingen Datei anzeigen. // Nicht vergessen die Funktionen oben in deine Datei mit den Funktionen zu kopieren if(function_exists('show_latest_tweets')) { echo show_latest_tweets(10); }
Um sein Tweets anzeigen muss noch an der gewünschten Stelle folgender PHP-Code eingefügt werden:
if(function_exists('show_latest_tweets')) { echo show_latest_tweets(10); }
Die “10″ steht für die Anzahl Tweets die angezeigt werden. Du kannsst diese Zahl nach belieben erhöhen oder verkleinern.
Info: Damit das ganze auch sicher bei dir funktioniert, muss auf deinem Server die cUrl Bibliothek und Simple-XML Erweiterung installiert sein was aber mittlerweile bei den meisten Web-Hosting anbietern der Fall ist.
7 Kommentare
Thanks for such a informative post. This for sure will help many of us. Keep up the good work.
Hallo Leute
Vielen Dank für diese Seite! :-)
Irgendwie schein ich aber zu “doof” zu sein…
Ich habe das skript übernommen:
20: function show_latest_tweets($limit=5) {
21: // Dein Twittername
22: $user = “TVUster”;
23:
24: // cURL Session wird gestartet
25: $ch = curl_init();
26:
27: // cURL Optionen werden gesetzt
28: curl_setopt($ch,
Bekomme nun aber folgende Fehlermeldung:
Parse error: syntax error, unexpected T_VARIABLE in /home/httpd/vhosts/stehli………/tweet_all.php on line 25
Mir fehlt jede Ahnung, was hier schief gegangen ist.
Habt ihr evt eine Idee dazu?
Vielen Dank!!
Marc
Suuuper – jetzt kalpt es auch mit dem sch… Umlauten – in der Schweiz gibt es ja das Problem nicht :)
Deshalb Gruezi und vielen Dank!
… auch für die späte Arbeit!!!
Gruss Reinhard
ps: war gerade 2 Wochen in Beatenberg zum U
ps: habe auch bereits die neuen Klassen verwendet – tolles Skript – Kompliment
hi… ganz einfach.. den Output musst du mit utf8_decode(); filtern..
aber verwende doch diese PHP Klasse: http://blog.robocode.ch/210/php-twitter-klasse/ .. ist sicherer und hat mehrere Funktionen.
Lade dir die Klasse runter und ersetze die Zeile 60 mit dieser:
$output .= utf8_decode($tweet->content)."".$this->formatTimestamp($tweet->updated);So funktionerts dann auch bei dir.
Nabend und Gruezi,
habe mal das Skript ausprobiert – funktioniert auch super. Habe nur das Problem mit Umlauten -> im Tweet steht “für” – Website arbeitet mit iso-8859-1 – gibt es eine zusätzliche Möglichkeit dies zu umgehen – also ein “ü” zu bekommen? Hab schon Stunden gegoogelt, aber nichts gefunden, was das Problem löst – Idee?
Vielen lieben Dank!
hi Thomas.. ja ich werde wohl noch eine elegantere Version veröffentlichen :)
Ach mit Sicherheitsabfrage meine ich so Sachen wie “Was passiert wenn ein falscher Username angegeben wird?” oder so.. an der funktionalität werde ich nichts mehr grosses umstellen.
danke für dein tutorial! schön zu lesen, dass ich nicht der einzige bin, der nicht für alles ein plugin einsetzen möchte ;)
ich bin leider überhaupt kein php-crack und wenn du schreibst man müsste noch die eine oder andere sicherheitsabfrage einbauen müsste warte ich besser noch mit dem kopieren deines scripts ;) wirst du es noch weiter entwickeln?
btw. schönes simples design! gefällt mir!
gruss
thomas