Twitter: Search-API mit PHP und json_decode ansprechen

Um diese Funktion zu nutzen, sollte man sich zunächst die notwendigen Informationen bezüglich Limitierungen und anderen Sachinhalten im API-Wiki von twitter.com durchgelesen haben.

Die Funktion gibt das Suchergebnis über die Variable $query als JSON-Objekt zurück. Mittels der PHP-internen Funktion json_decode() wird das JSON-Objekt in ein gebräuchliches Array umgewandelt und in der Variable $output gespeichert. Über print_r($output) kann man nun den Inhalt des Array ausgeben um alle Werte einzusehen. Mit echo $output->results[$i]->feld_name; werden die einzelnen Felder des Array ausgegeben.

Der Code

<?php
function search_twitter_json($query, $pages) {
 
/*	Beispielausgabe für Array $output
 
    [text] => Das Wetter ist mal wieder super hier in #Duisburg
    [to_user_id] =>
    [from_user] => gfriesde
    [id] => 4357215930
    [from_user_id] => 14796934
    [iso_language_code] => de
    [source] => &lt;a href=&quot;http://example.net/&quot;&gt;ExampleTool&lt;/a&gt;
    [profile_image_url] => http://example.net/pfad/zum/bild.jpg
    [created_at] => Sat, 06 Jun 2009 20:30:29 +0000
 
    // pro $pages werden 15 ergebnisse geliefert.
*/
 
	for ( $z=0; $z<$pages; ++$z ) {
		if ( $z == 0) { $url = "http://search.twitter.com/search.json?q=$query"; }
		else { $url    = "http://search.twitter.com/search.json?q=$query&page=$z"; }
    	$search = file_get_contents( $url );
    	if ( $search === false ) { die( 'Error.' );}
 
    	$output = json_decode($search);
    	$out_len = sizeof($output->results);
 
    	for ( $i=0; $i<$out_len; ++$i ) {
    		$tweet[$i] = $output->results[$i]->text;
    		$pic[$i] = $output->results[$i]->profile_image_url;
    		$date[$i] = $output->results[$i]->created_at;
    		$user[$i] = $output->results[$i]->from_user;
    		$user_id[$i] = $output->results[$i]->from_user_id;
 
    		echo $tweet[$i]."<br/>";
    	       }
	}
}
 
search_twitter_json("%23duisburg", 1);
 
?>
Als Textdatei öffnen | since1985de_151949a9.txt | 1.33 Kilobyte

6. Dezember 2009

Twitter: Reguläre Ausdrücke in PHP für die volle Integration von Tweets

Da ich nun schon von mehreren Leuten nach den Regulären Ausdrücken (RegEx auf de.wikipedia.org) zum ersetzen von #hashtag und @username in Twitter-Statusnachrichten gefragt wurde, veröffentliche ich sie hier. Zusätzlich gibt es noch die Regulären Ausdrücke um normale Hyperlinks klickbar zu machen.

Wer mehr zum Thema wissen will

Bei Fragen oder Problemen könnt ihr gerne einen Kommentar schreiben - weitere Erklärungen zu den Regulären Ausdrücken erspar ich mir an dieser Stelle und verweise auf die Webseite devmag.net auf der es eine ausführliche Dokumentation zum Thema RegEx gibt.

Der Code

<?php
// Hyperlinks klickbar machen
$pattern = "/(^|\s)(([a-zA-Z]+:\/\/)([a-z][a-z0-9_\..-]*[a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))/i";
$replace = "$1<a href=\"$2\" class=\"twitter-link\" rel=\"external\">$2</a>";
$str = preg_replace($pattern, $replace, $str);
$pattern = "/(^|\s)(www\.([a-z][a-z0-9_\..-]*[a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))/i";
$replace = "$1<a href=\"http://$2\" class=\"twitter-link\" rel=\"external\">$2</a>";
$str = preg_replace($pattern, $replace, $str);
 
// #hashtags klickbar machen und auf Twitter-Suche verweisen
$pattern = "/(^|\s)&#35;(\w*)/i";
$replace = "$1<a href=\"http://twitter.com/search?q=$2\" class=\"twitter-hashtag\" rel=\"external\">#$2</a>";
$str = preg_replace($pattern, $replace, $str);
 
// @username klickbar machen und auf Twitter-Profil verweisen
$pattern = "/(^|\s)@(\w*)/i";
$replace = "$1<a href=\"http://twitter.com/$2\" class=\"twitter-user\" rel=\"external\">@$2</a>";
$str = preg_replace($pattern, $replace, $str);
?>
Als Textdatei öffnen | since1985de_87f5f37a.txt | 1011 Byte

6. Dezember 2009