PHP: Twitter als XML auslesen und parsen

Wer es sich bei der Erstellung von News einfach machen möchte, kann z.B. die Tweets seines Accounts bei Twitter anzeigen lassen. Diese stellt der Kurznachrichtendienst Twitter auch als XML zu Verfügung, was einem die Einbindung erheblich vereinfacht.
Hier zwei Beispiele:

Schenk2000/News

Neduras/News

Und hier ein simples Beispiel in PHP:

<?
$tweets = simplexml_load_file('http://www.twitter.com/status/user_timeline/CrankSchenk.xml');
$i = 0;
while($i <= 9)
{
$tmp = $tweets->status{$i}->created_at;
echo "<strong>".trim(substr($tmp,8,2)).". ".substr($tmp,4,3)." ".
substr($tmp,26,4)."</strong><br />".$tweets->status{$i}->text.'<br /><br />';
$i++;
}
?>

Was aber, wenn man die im Text vorkommenden Links, User und Keywords mit richtigen A-Tags versehen möchte? In diesem Fall kommt man um ein Parsen des Textes kaum herum. Hierzu hatte ich – noch vor der aktuellen Twitter-API – eine Funktion erstellt, die den Text komplett durchparst und inkl. aller Ankers zurückgibt.

<?
function parseTwitterText($tweet_str)
{
####################################################
# Links ersetzen
####################################################
$tmp_str = $tweet_str.' ';
$arr_tmp = array();
$look4 = 'http';
$prefix = '';

while (strpos($tmp_str, $look4) > 0)
{
$tmp_str_pos = strpos($tmp_str, $look4);
$tmp_str_start = substr($tmp_str, 0, $tmp_str_pos);
$tmp_str_middle = substr($tmp_str, $tmp_str_pos);
$tmp_str_pos2 = strpos($tmp_str_middle, ' ');
$tmp_str_middle = substr($tmp_str, $tmp_str_pos, $tmp_str_pos2);
$tmp_str_end = substr($tmp_str, ($tmp_str_pos + $tmp_str_pos2));

array_push($arr_tmp, $tmp_str_middle);

$tmp_str = $tmp_str_end;
}

for($i=0; $i<count($arr_tmp); $i++)
{
$tweet_str = str_replace($arr_tmp[$i],
'<a href="'.$prefix.$arr_tmp[$i].'" target="_blank">
'.$arr_tmp[$i].'</a>', $tweet_str);
}
unset($arr_tmp);

####################################################
# Account ersetzen
####################################################
$tmp_str = $tweet_str.' ';
$arr_tmp = array();
$look4 = '@';
$prefix = 'http://twitter.com/';

while (strpos($tmp_str, $look4) > 0)
{
$tmp_str_pos = strpos($tmp_str, $look4);
$tmp_str_start = substr($tmp_str, 0, $tmp_str_pos);
$tmp_str_middle = substr($tmp_str, $tmp_str_pos);
$tmp_str_pos2 = strpos($tmp_str_middle, ' ');
$tmp_str_middle = substr($tmp_str, $tmp_str_pos, $tmp_str_pos2);
$tmp_str_end = substr($tmp_str, ($tmp_str_pos + $tmp_str_pos2));

array_push($arr_tmp, $tmp_str_middle);

$tmp_str = $tmp_str_end;
}

for($i=0; $i<count($arr_tmp); $i++)
{
$tweet_str = str_replace($arr_tmp[$i],
'<a href="'.$prefix.str_replace($look4,'',$arr_tmp[$i]).'" target="_blank">
'.$arr_tmp[$i].'</a>', $tweet_str);
}
unset($arr_tmp);

####################################################
# Keyword ersetzen
####################################################
$tmp_str = $tweet_str.' ';
$arr_tmp = array();
$look4 = '#';
$prefix = 'http://search.twitter.com/search?q=%23';

while (strpos($tmp_str, $look4) > 0)
{
$tmp_str_pos = strpos($tmp_str, $look4);
$tmp_str_start = substr($tmp_str, 0, $tmp_str_pos);
$tmp_str_middle = substr($tmp_str, $tmp_str_pos);
$tmp_str_pos2 = strpos($tmp_str_middle, ' ');
$tmp_str_middle = substr($tmp_str, $tmp_str_pos, $tmp_str_pos2);
$tmp_str_end = substr($tmp_str, ($tmp_str_pos + $tmp_str_pos2));

array_push($arr_tmp, $tmp_str_middle);

$tmp_str = $tmp_str_end;
}

for($i=0; $i<count($arr_tmp); $i++)
{
$tweet_str = str_replace($arr_tmp[$i], '
<a href="'.$prefix.str_replace($look4,'',$arr_tmp[$i]).'" target="_blank">
'.$arr_tmp[$i].'</a>', $tweet_str);
}
unset($arr_tmp);

return $tweet_str;
}

$tweets = simplexml_load_file('http://www.twitter.com/status/user_timeline/CrankSchenk.xml');
$i = 0;
while($i <= 9)
{
$tmp = $tweets->status{$i}->created_at;
echo "<strong>".trim(substr($tmp,8,2)).". ".substr($tmp,4,3)." ".substr($tmp,26,4)."
</strong><br />".parseTwitterText($tweets->status{$i}->text).'<br /><br />';
$i++;
}
?>

Wer eine bessere oder einfachere Lösung auf seiner Festplatte hat, darf diese gerne posten.

Autorenseite auf YAML 4 umgestellt

Letzte Woche habe ich an der Umstellung meiner Autorenseite auf die neue Version des CSS-Frameworks YAML gearbeitet und die Seite auch online gestellt. Nach einigen Textanpassungen am Wochenende ist die Seite fertig. Wer möchte, kann sich das Ergebnis hier ansehen:

http://www.manuelschenk.de

Das neue CSS-Framework YAML in der Version 4 kann man auf dieser Seite näher kennenlernen:

http://www.yaml.de

HTML5-Artikel in der Internet Intern (Ausgabe 1/12)

In der neuen Internet Intern (Ausgabe 1/12) ist ein Artikel über HTML5-Tipps erschienen. Zu diesem Beitrag habe ich auch ein paar Tipps beigesteuert. Aber nicht nur deswegen möchte ich euch diesen Artikel ans Herz legen. Für Webentwickler stehen dort ein paar sehr interessante Kniffe, die den einen oder anderen sicherlich weiterbringen.

Der komplette Artikel: 25 Tipps zu HTML5 (PDF)

 

JavaScript Kurztipp: Fehlerhafte Darstellung der Jahreszahl korrigieren

In JavaScript kann es aufgrund eines Bugs leider noch zu falschen Darstellung bei Jahreszahlen kommen. Dies wird zumindest in älteren Internet Explorern der Fall sein und gibt anstelle von z.B. 2001 das Jahr 201 zurück. Um die falsche Darstellung (vor allem bei der Funktion getYear) zu umgehen, empfehle ich eine kleine Hilsfunktion. Dieser Einzeiler sollte das Problem schnell beheben.

function y2k(n) { return (n < 1000) ? n + 1900 : n; }

JavaScript Kurztipp: Events NICHT an den Browser weiterleiten

Hier ein kurzes Beispiel für das Stoppen der Weitergabe von Browserevents mit JavaScript und ganz ohne jQuery:

// Event nicht weiterleiten
function prevDefault(e)
{
	if(e.preventDefault)
	{
		e.preventDefault();
	}
	else
	{
		e.returnValue = false;
	}
}

Einfach an der entsprechenden Stelle die Funktion aufrufen und das entsprechende Event-Objekt (click, scroll, …) übergeben. Sollte auch mit IE-Browsern funktionieren, weshalb erstmal auf preventDefault geprüft wird.

JavaScript Kurztipp: Events erzeugen

Hier ein kurzes Beispiel für die Erzeugung von Browserevents mit JavaScript und ganz ohne jQuery:

// Event erzeugen
function attach(element, type, fn)
{
	if(element.addEventListener)
	{
		element.addEventListener(type, fn, false);
	}
	else if(element.attachEvent)
	{
		element.attachEvent('on' + type, fn);
	}
}

Einfach an der entsprechenden Stelle die Funktion aufrufen und das entsprechende Objekt, den Namen des Events (z.B. ‘click’) und die Funktion übergeben. Sollte auch mit IE-Browsern funktionieren, weshalb erstmal auf addEventListener geprüft wird.

Die komprimierte Neuauflage des HTML5/JavaScript-Buchs ist da

Das Buch “HTML5 und 3D Browsergame Frameworks mit JavaScript” ist in einer komprimierten Neuauflage erschienen. Die Neuauflage wurde im Text an einigen Stellen verbessert und von der Seitenzahl komprimiert. Dies ist nicht durch weglassen von Inhalt geschehen, sondern durch Verkleinerung der Screenshots und Weglassen von diversen Platzhaltern. Ich habe mir schließlich die Kritiken zu Herzen genommen und diese neue Version herausgebracht. Das hat außerdem den Vorteil, dass die Druckkosten und somit der Endpreis um satte 5 Euro gesenkt werden konnten.

Das Praxisbuch für JavaScript-Entwickler kann über folgenden Link bestellt werden:
http://www.manuelschenk.de/shop.php

Wer möchte, kann das Buch auch über den Buchhändler seiner Wahl oder über andere Onlineshops (Amazon, Libri, BOL, …) bestellen. Nähere Infos gibt es auf der speziellen Buchseite in diesem Blog oder auf meiner Autorenseite.

HTML5 und 3D Browsergame Frameworks mit JavaScript

HTML5 und 3D Browsergame Frameworks mit JavaScript

Das Buch zum Blog ist da

Mein neues Buch mit dem Titel “HTML5 und 3D Browsergame Frameworks mit JavaScript” ist jetzt erschienen. Es ist ein Praxisbuch für JavaScript-Entwickler und kann über folgenden Link bestellt werden:

http://www.manuelschenk.de/shop.php

Wer möchte, kann das Buch auch über den Buchhändler seiner Wahl oder über andere Onlineshops (Amazon, Libri, BOL, …) bestellen. Nähere Infos gibt es auf der speziellen Buchseite in diesem Blog oder auf meiner Autorenseite.

Ich würde mich auch sehr über Rezensionen bei Amazon oder anderen Shops freuen.

Das Praxisbuch für JavaScript-Entwickler

HTML5 und 3D Browsergame Frameworks mit JavaScript