Nachdem ich vor kurzem in diesem Blog mich zu dem Thema Twitter & Co geäußert habe, denke ich, dass klar ist, dass wir uns hier intern auch schon damit beschäftigen, wie man diese Dinge in Zukunft auch in den Randshop integrieren kann. Es genießt zwar im Moment nicht die höchste Priorität – ein Shop ist dann doch noch mehr als ein Twitter Client – aber man probiert ja immer mal wieder ein bisschen was aus.
Ich war auf jeden Fall sehr positiv überrascht, wie einfach zumindest das Auslesen der Daten von Twitter ist. Auch die Dokumentation der Twitter API ist wirklich gut geschrieben.
Hier nun also die Anforderung: Im Randshop unter www.tt-traum.de soll auf der Startseite in einer Box die letzten Tweets einer Person oder einer Suche angezeigt werden. Da TT Traum keinen eigenen Twitter Account hat, würde ich in diesem konkreten Fall die Meldung von modellbahn hier anzeigen. Dies hat sich nach einer Recherche als ein recht aktiver Account gezeigt, hinter dem das größere unabhängige Online-Magazin Modellbahntechnik aktuell steht.
Da wir im ersten Schritt eine schlichte Suche einbinden wollen reicht die API Dokumentation zu der einfachen Suchmethode.
Um wenig Overhead im Shop zu haben, lege ich einfach eine Funktion GetTwitterSearchResult()
in die neue Datei /includes/functions.twitter.inc.php
ab. Die Funktion liefert dann ein Objekt mit den entsprechenden Daten zurück, die dann im Template angezeigt werden können – dazu dann später. Was genau die Funktion bei Twitter abfrägt, kann über die Parameter gesteuert werden. Hier die Beschreibung:
User | Frägt die Daten eines Benutzers ab. Optional, Standardwert ist hier „randshop“ |
Searchstring | Suchbegriff der abgefragt werden soll. Optional. |
TweedNumber | Anzahl der Tweeds, die abgerufen werden sollen. Optional, Standardwert ist hier 5 |
Im Kern der Funktion wird die Twitter API über cURL einfach aufgerufen und liefert in unserem Fall ein JSON Zeichenkette zurück, das wir dann auswerten können.
Dann schauen wir, welche der beiden Parameter übergeben wurden und setzen in Abhängigkeit davon einen Suchstring für Twitter zusammen und gleichzeitig eine URL, auf die wir dann die Einträge verlinken. Bei einer Abfrage der Tweeds einer Person, muss ein „from:“ vor dem Namen stehen. Ein Suchbegriff kann einfach so angegeben werden. Kombiniert werden kann das ganze mit den üblichen Operatoren.
// Suchstring in Abhaengigkeit der
// Paremeteter fuer Twitter zusammensetzen
if (($User !== '') && ($SearchString !== '')) {
$TwitterSearchString = 'from:' . $User . '+AND+';
$TwitterSearchString .= $SearchString;
$TwitterMoreURL = "http://search.twitter.com/search?";
$TwitterMoreURL .= "q=" . $SearchString . "+from:" . $User;
} elseif ($User !== '') {
$TwitterSearchString = 'from:' . $User;
$TwitterMoreURL = "http://twitter.com/";
$TwitterMoreURL .= $User;
} elseif ($SearchString !== '') {
$TwitterSearchString = $SearchString;
$TwitterMoreURL = "http://twitter.com/search?q=";
$TwitterMoreURL .= $SearchString;
}
In der eigentlichen Abfrage an die Twitter API wird zuerst die URL zusammengesetzt, anschließend wird dann per cURL die API aufgerufen und der Rückgabewert der als JSON Zeichenkette vorliegt als Objekt abgelegt.
// Twitter API abfragen
$TwitterAPIURL = "http://search.twitter.com/search.json?";
$TwitterAPIURL .= "q=" . urlencode($TwitterSearchString);
$TwitterAPIURL .= "&rpp=" . $TweedNumber;
$CurlHandler = curl_init();
curl_setopt($CurlHandler, CURLOPT_URL, $TwitterAPIURL);
curl_setopt($CurlHandler, CURLOPT_HEADER, 0);
curl_setopt($CurlHandler, CURLOPT_RETURNTRANSFER, true);
$TwitterObject = json_decode(curl_exec($CurlHandler));
$TwitterObject->more_url = $TwitterMoreURL;
curl_close($CurlHandler);
Das Objekt, das wir hier bekommen, geben wir 1:1 an den Aufrufer zurück. Man könnte hier natürlich noch die Daten aufbereiten oder andere spannende Dinge damit machen (z.B. Cachen, Links austauschen um eine Statistik anzulegen, Konkurrenten bei einer Suche nicht anzeigen, …). Aber das sind dann Features die in den Randshop einfließen werden. Ebenso wie eine Verwaltung des Ganzen über das Admintool. Dies hier soll ja nur ein kleines kurzes Beispiel sein.
Das Objekt hat folgenden Aufbaue:
object(stdClass)#2 (9) {
["results"]=>
array(5) {
[0]=>
object(stdClass)#3 (10) {
["profile_image_url"]=>
string(89) "http://a1.twimg.com/profile_images/407565976/modellbahntechnik-aktuell-de-logo_normal.jpg"
["created_at"]=>
string(31) "Wed, 18 Nov 2009 10:06:40 +0000"
["from_user"]=>
string(10) "modellbahn"
["to_user_id"]=>
NULL
["text"]=>
string(123) "RT @Hannover_News ... 10:00 bis .. http://bit.ly/25SWu8"
["id"]=>
float(5822782674)
["from_user_id"]=>
int(9671356)
["geo"]=>
NULL
["iso_language_code"]=>
string(2) "de"
["source"]=>
string(59) "<a href="http://twitter.com/">web</a>"
}
…
}
["max_id"]=>
float(5822782674)
["since_id"]=>
int(0)
["refresh_url"]=>
string(40) "?since_id=5822782674&q=from%3Amodellbahn"
["next_page"]=>
string(51) "?page=2&max_id=5822782674&rpp=5&q=from%3Amodellbahn"
["results_per_page"]=>
int(5)
["page"]=>
int(1)
["completed_in"]=>
float(0.054926)
["query"]=>
string(17) "from%3Amodellbahn"
}
In dem Array results
sind die gewünschten Tweeds. Hier nur exemplarisch der erste Eintrag. Die Einträge sind denk ich selbsterklärend. Wir werden lediglich den Benutzer (from_user
und profile_image_url
) und die Einträge (text
) anzeigen.
Neben den eigentlich Einträgen, liefert uns Twitter noch ein paar weitere Daten. Spannend ist hier die refresh_url
, über die man zyklisch per AJAX prüfen könnte, ob es schon neue Tweeds gibt und in einem solchen Fall die Liste neu aufbauen könnte.
Wir integrieren den Aufruf und den Include der Funktion in die Datei includes/header.inc.php
:
include_once(DATEIPFAD . 'includes/functions.twitter.inc.php');
$tpl_twitter_object = GetTwitterSearchResult('modellbahn');
Und lesen die Daten im Template /templates/standard/index.tpl
aus (ab der Version 1.4.x /templates/standard/website/index.tpl
):
<!-- Twitter -->
<? if (sizeof($tpl_twitter_object->results)): ?>
<div class="twitterBox">
<h2>Twitter</h2>
<ul>
<? foreach($tpl_twitter_object->results as $Tweet):?>
<li>
<a href=\"<?=$tpl_twitter_object->more_url?>\" target="_blank">
<img src="<?=$Tweet->profile_image_url?>" width="22" height="22" align="top" /></a>
<b><a href="<?=$tpl_twitter_object->more_url?>" target="_blank"><?=$Tweet->from_user?></a></b><br />
<?=preg_replace("`((?:https?|ftp)://\S+[[:alnum:]]/?)`si", "<a href=\"$1\" target=\"_blank\">$1</a>", $Tweet->text);?></li>
<? endforeach ?>
</ul>
</div>
<? endif ?>
Noch eine Umwandlung der URLs aus dem Text in einen ordentlichen Link, ein paar CSS Angaben, und schon schaut das Ganze so aus wie unter www.tt-traum.de.
Hier noch die komplette /includes/functions.twitter.inc.php
falls es jemand mal in seinem Shop einbauen will.
Dies war erst ein Anfang mit der Twiter API. Spannender wird es dann, wenn der Shop selbst Tweeds verschicken soll. Hierfür muss man dann die Anwendung erst bei Twitter registrieren sich dort auch mit seinen Twitetr Anmeldedaten authentifizieren. Dann kann man aber direkt aus dem Shop Tweeds absetzen. Zum Beispiel wenn ein neuer Artikel eingestellt wurde, eine News geschrieben wurde oder der Lagerbestand eines Artikel unter einer bestimmten Anzahl gesunken ist. Wir sind hier offen für Anregungen und Wünsche – einfach als Kommentar hier hinterlassen.
Ich denke das Twitter ein interessantes Medium werden wird. Die SMS ist seinerzeit auch unterschätzt worden. Für uns stellt es eine schöne Möglichkeit dar, unsere Kunden und Interessenten mal eben schnell über Wareneingänge, Sonderangebote oder Hightlights zu informieren.
Zu dem Thema gibt’s auch schon ein Artikel mit ein paar Links hier im Blog:
http://www.blog.randshop.com/2009/11/twitter-fur-shopbetreiber/
Wir selbst sehen es auch eher kritisch und beobachten die Entwicklung interessiert. Es gibt hier einige Möglichkeiten den eigene Shop aufzuwerten (die Anzeige der Tweeds, wie hier beschrieben, war ja nur ein einfaches Beispiel für die API). Aber es muss natürlich nicht um jeden Preis sein. Das hängt dann doch zu sehr von der Zielgruppe des Shops ab. Vielleicht ist das auch mal eine Idee für einen neuen Beitrag hier.
Ich habe zwar in ein Projekt auch Twitter ein gebunden aber so richtig lässt sich der Sinn von TwitterBusiness für mich nicht erkennen. Vielleicht liegt das auch daran, dass ich nicht den ganzen Tag im Twitter hänge und den ganzen Kommentaren der anderen Nutzer folge – schließlich muss man ja auch noch etwas produktiv sein.
Vielleicht könnt ihr ja mal schrieben, was eurer Meinung nach der Vorteil von Twitter im Shop ist.