<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Projekt Schwarz &#187; PHP</title>
	<atom:link href="http://projekt-schwarz.de/kategorie/programmierung/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://projekt-schwarz.de</link>
	<description>Webdesign, Web 2.0 und sonstige gestalterische Dinge</description>
	<lastBuildDate>Wed, 01 Dec 2010 14:31:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Twitter Integration und Interaktion</title>
		<link>http://projekt-schwarz.de/89/twitter-integration-und-interaktion/</link>
		<comments>http://projekt-schwarz.de/89/twitter-integration-und-interaktion/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 23:38:48 +0000</pubDate>
		<dc:creator>Thomas Probach</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[twitterlibphp]]></category>

		<guid isPermaLink="false">http://projekt-schwarz.de/?p=89</guid>
		<description><![CDATA[Für mein Projekt theHunter HQ bot es sich an auf ein komplett eigenständiges System für Neuigkeiten zu verzichten und dafür eher Twitter zu nutzen. Das Konzept war recht schnell klar: Alles was bei Twitter zu lesen ist sollte auch auf der Startseite des Projekts zu sehen sein. Soweit nicht unbedingt schwierig, die größere Problematik war, [...]]]></description>
			<content:encoded><![CDATA[<p>Für mein Projekt <a href="http://www.thehunter-hq.com">theHunter HQ</a> bot es sich an auf ein komplett eigenständiges System für Neuigkeiten zu verzichten und dafür eher Twitter zu nutzen. Das Konzept war recht schnell klar: Alles was bei Twitter zu lesen ist sollte auch auf der Startseite des Projekts zu sehen sein. Soweit nicht unbedingt schwierig, die größere Problematik war, dass das System das ich für das Projekt geschrieben habe zu bestimmten Anlässen vollautomatisch, also auch während ich nicht am Rechner bin, Tweets erzeugt.</p>
<p>Wie gerufen kam mir die <a href="http://jdp.github.com/twitterlibphp/">twitterlibphp</a> die die Kommunikation mit der Twitter API erheblich erleichtert. Doch bevor man mit der API arbeiten kann benötigt man eine Datenbank um die abgerufenen Daten zu speichern. Ich habe mir eine recht einfache Struktur gebastelt in die ich nur die ID des Tweets, das Datum und den Text speichere. Zusätzlich noch eine Spalte für meine eigenen IDs.<br />
<span id="more-89"></span></p>
<pre>
<code>CREATE TABLE IF NOT EXISTS `dtm_twitter_status` (
  `twitt_id` int(11) NOT NULL auto_increment,
  `twitt_unique` varchar(30) collate utf8_bin NOT NULL,
  `twitt_text` varchar(14) collate utf8_bin NOT NULL,
  `twitt_date` varchar(50) collate utf8_bin NOT NULL,
  PRIMARY KEY  (`twitt_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;</code>
</pre>
<p>Natürlich könnte man das Datum auch in einem Datumsformat speichern oder als UNIX Timestamp, für mich war es in diesem Fall aber recht angenehm das Datum so zu speichern wie es von der API geliefert wird. Nun geht es daran die eigene Seite mit Twitter kommunizieren zu lassen. Zunächst wird die twitterlibphp eingebunden, Benutzername und Passwort festgelegt und die Verbindung zu Twitter hergestellt.</p>
<pre>
<code>&lt;?php
/*
 * Twitter Library einbinden
 */
require "./inc/twitter.lib.php";
/*
 * Benutzername und Passwort für Twitter
 */
$username = "";
$password = "";

/*
 * Twitter Klasse initiieren
 */
$twitter = new Twitter($username, $password);
?&gt;</code>
</pre>
<p>Somit wäre die Verbindung zu Twitter hergestellt, nun geht es darum zuerst einmal die letzten eigenen Tweets abzuholen.</p>
<pre>
<code>&lt;?php
/*
 * Tweets as JSON abrufen
 */
$status = $twitter-&gt;getUserTimeline(array(), 'json');

/*
 * JSON dekodieren
 */
$status_info = (json_decode($status));
?&gt;</code>
</pre>
<p>So weit, so gut. Nun haben wir also unsere ganzen Tweets, nur wissen wir nicht, welche wir schon in der Datenbank haben und welche nicht. Daher müssen wir nun die Datenbank abfragen um zu überprüfen welches die letzte Twitter ID ist wir abgeholt haben. Vorher muss natürlich eine Verbindung mit der MySQL-Datenbank hergestellt werden.</p>
<pre>
<code lang="php">&lt;?php
/*
 * Überprüfe die Datenbank
 */
$get_latest_twitter = mysql_query("SELECT twitt_unique
	FROM dtm_twitter_status
	ORDER BY twitt_unique DESC
	LIMIT 1");
$latest_twitter = mysql_fetch_assoc($get_latest_twitter);
?&gt;</code>
</pre>
<p>Nun der letzte Schritt für das Abrufen: Das Speichern der neu hinzugekommenen Tweets. Dazu muss aber zuerst einmal vergleichen werden, ob die gefundenen Tweets bereits in der Datenbank sind oder nicht. </p>
<pre>
<code>&lt;?php
/*
 * Verarbeite Tweets und vergleiche die Twitter ID
 */
if(is_array($status_info)) {
	foreach($status_info as $tweet) {
		if($latest_twitter['twitt_unique'] &gt;= $tweet-&gt;id) { continue; }

		mysql_query("INSERT INTO dtm_twitter_status
		VALUES (
		'',
		'" . $tweet-&gt;id . "',
		'" . addslashes(tweet-&gt;text) . "',
		'" . $tweet-&gt;created_at . "')");
	}
}
?&gt;</code>
</pre>
<p>Soweit zum abrufen der Tweets. Nun wollen wir anschließend noch etwas an Twitter senden. Da es zu weit gehen würde das Projekt und den Sinn der Status-Updates hier zu erläutern wollen wir Twitter in diesem Beispiel dazu missbrauchen regelmäßig darüber zu informieren, dass der Server noch läuft. Das Senden eines neuen Tweets ist mehr als simpel:</p>
<pre>
<code>&lt;?php
/*
 * Sende Lebenszeichen an Twitter
 */
$message = 'Es ist ' . date("r") . ' und der Server läuft!';
$twitter-&gt;updateStatus($message, '', 'json');
?&gt;</code>
</pre>
<p>Das würde nun dazu führen, dass Twitter immer wenn das Script ausgeführt wird einen Text wie &#8220;Es ist Thu, 21 Dec 2000 16:01:07 +0200 und der Server läuft!&#8221; bekommt, natürlich mit aktuellem Datum. Natürlich kann man den Status auch vor dem Abrufen der Tweets senden damit der Status gleich mit abgerufen wird, mir erscheint es aber sicherer dies erst mit dem nächsten Aufruf der Scripts durchzuführen. Bleibt die Frage, wie das nun vollautomatisch durchgeführt werden soll. Ich verwende Cronjobs die alle fünf Minuten die Datei ausführen. Wer keine Cronjobs zur Verfügung hat muss sich ein Workaround suchen, etwa das Script in Intervallen in öffentlich zugängliche Seiten einzubauen, was allerdings nur bei ausrechend frequentierten Seiten zum Erfolg führt. Besser und sicherer ist es immer das mit einem Cronjob zu regeln.</p>
<p><a href="/wp-content/uploads/2010/07/twitter-status.zip" class="externallink">Komplettes Script herunterladen</a> <a href="http://jdp.github.com/twitterlibphp/" class="externallink">twitterlibphp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://projekt-schwarz.de/89/twitter-integration-und-interaktion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

