Junecloud Delivery Status per PHP auslesen

Ich habe mich mal wieder hin gesetzt und einen sehr unsauberen, unschönen und schlecht dokumentierten Scraper in PHP geschrieben. Diesmal geht es um die Delivery Status Sendungsverfolgung von den Jungs und Mädels von Junecloud. Delivery Status Touch ist eine meiner „First-Homescreen“-Apps auf iPhone und iPad. Es gibt auch ein Dashboard-Widget für OS X (aber wer benutzt schon noch das Dashboard?).

Ich hatte jetzt das Problem, dass ich gerne alle Informationen zu Sendungsverfolgungen unterschiedlicher Versandunternehmen, die ich sowieso alle bei Delivery Status pflege, in auswertbarer Form auslesen wollte. Leider gibt es von Junecloud selbst dafür keine API, also musste ich, wie schon bei Runtastic, selbst Hand anlegen.

Das Ergebnis nennt sich „php-deliverystatus“ und steht ab sofort unter MIT Lizenz auf GitHub zum Download bereit.

Und so funktioniert es:

<?php         
include('class.deliverystatus.php');         
$ds = New Deliverystatus();         
$ds->setUsername('USERNAME');
$ds->setPassword('PASSWORD');
$ds->setTimeout(20);
 
$ds->login();
$myDeliveries = $ds->getDeliveries();
$ds->logout();
 
var_dump($myDeliveries);
?>

Als Ergebnis bekommt wird ein Array aus Objekten zurückgeliefert. Jedes Array-Element spiegelt eine gespeicherte Lieferung wieder. Alle Infos, die auf der Delivery Status Website angezeigt werden können, können anschließend auch weiterverarbeitet werden.

Hier mal ein Beispiel meiner aktuellen Delivery Status Lieferungen:

array(3) {
  [0]=>
  object(stdClass)#9 (4) {
    ["title"]=>
    string(11) "iPad Air 2 "
    ["tracking_url"]=>
    string(56) "https://tracking.hermesworld.com/?TrackID=71295223100561"
    ["tracking_number"]=>
    string(14) "71295223100561"
    ["information"]=>
    string(10) "www.hlg.de"
  }
  [1]=>
  object(stdClass)#18 (4) {
    ["title"]=>
    string(17) "Bench Jacke eBay "
    ["tracking_url"]=>
    string(83) "http://nolp.dhl.de/nextt-online-public/set_identcodes.do?idc=966939672912&amp;zip=95028"
    ["tracking_number"]=>
    string(12) "966939672912"
    ["information"]=>
    string(18) "nolp.dhl.de, 95028"
  }
  [2]=>
  object(stdClass)#17 (4) {
    ["title"]=>
    string(15) "TNF Jacke eBay "
    ["tracking_url"]=>
    string(83) "http://nolp.dhl.de/nextt-online-public/set_identcodes.do?idc=966939632104&amp;zip=80469"
    ["tracking_number"]=>
    string(12) "966939632104"
    ["information"]=>
    string(18) "nolp.dhl.de, 80469"
  }
}

Wie immer gilt: Viel Spaß!

Runtastic-Aktivitäten per PHP auslesen

Wenn ich mich in meinem Leben dann doch mal sportlich betätige, dokumentiere ich sämtliche Aktivitäten mit Runtastic. Runtastic ist ein ziemlich umfangreiches Portal um seine Aktivitäten und Fitness zu erfassen und eine gute Übersicht zu bekommen.

Was mich schon länger stört: Runtastic bietet keine Entwickler-API an. Ich habe bislang vergeblich versucht, irgendwie an die Daten zu kommen. Selbst ein Gold-Mitgliedschaft bringt einem hier nichts: Was auf Runtastic steht, bleibt auf Runtastic. Um dieses Problem zu umgehen habe ich spontan eine PHP-Klasse geschrieben, die sich bei Runtastic einloggt und sämtliche Aktivitäten als Objekt zurück gibt. Diese Daten kann man dann natürlich auch in Datenbanken importieren oder sich eine schnelle Excel-Export Funktion basteln.

Die Klasse steht seit heute unter dem Namen „php-runtastic“ auf GitHub zum Download bereit und steht unter MIT-Lizenz.

Hier mal ein kleines Beispiel:

<?php
	include("class.runtastic.php");
 
	$runtastic = New Runtastic();
	$runtastic->setUsername("user@example.com");
	$runtastic->setPassword("verysecurepassword");
	$runtastic->setTimeout(20);
 
	if ($runtastic->login()) {
		echo "Username: " . $runtastic->getUsername();
		echo "<br />";
		echo "UID: " . $runtastic->getUid();
		echo "<br />";
		echo "<br />";
 
		$myRuntasticActivities = $runtastic->getActivities();
		echo "My latest <b>" . $myRuntasticActivities[0]->type . "</b> activity was <b>" . $myRuntasticActivities[0]->feeling . "</b>!";
	}
 
?>

Viel Spaß!

Wie man jQuery und PHP kombiniert

Wer sich schonmal gefragt hat, wie man jQuery bzw. JavaScript mit PHP in Verbindung bringt, der bekommt hier die Antwort:

echo '<script type="text/javascript">';
  echo 'jQuery(function() {';
    echo 'jQuery("#date").datepicker({ dateFormat: "yy-mm-dd" });';
  echo '});';
echo '</script>';

Irgendwie gruselig..

Mein Wochenende: XML-RPC, cURL und ganz wenig PHP

Letztes Wochenende hatte ich wirklich keine Lust etwas spannendes zu tun. Ich hätte auf einen Geburtstag gehen können, jedoch hat mir dazu die Motivation gefehlt. Stattdessen habe ich den kompletten Samstag und halben Sonntag vor dem Rechner verbracht und eines der merkwürdigsten Projekte gestartet (und zueende gebracht), die ich jemals angefangen habe:

www.blogwolke.de

Blogwolke.de ist ein Blogverzeichnis. Nicht mehr, nicht weniger. Was bringt ein Blogverzeichnis? Richtig: Backlinks. Wer Backlinks für seine Seiten braucht, der ist mit Blogverzeichnissen gut bedient. Doch bevor ich hier erkläre was das ganze bringt, kommen wir lieber zu den spannenden Dingen: Der technische Hintergrund.

Die Ziele waren einfach: Der Benutzer soll mit minimalem Aufwand zum Erfolg kommen. Viele Blogverzeichnisse nutzen zum Tracking der Blogs sogenannte „Publicons“, die der Benutzer auf seinem Blog einbindet. Diese Idee wollte ich übernehmen – alles andere jedoch nicht.

Wie also minimiert man den Aufwand für den Nutzer? Es gibt zwei Regeln:

  • Es muss einfach sein
  • Es muss automatisch ablaufen

Umgesetzt habe ich das ganze nun über XML-RPC, cURL und ganz ganz wenig PHP-Code. Erstmal brauchte ich eine Grundlage. Wieso dazu nicht einfach ein bestehendes, sehr gutes Blog-System nutzen. Gesagt getan und WordPress aufgesetzt. Warum WordPress? Ganz klar: Haufenweise Plugins, gute SEO Optimierung und massig Erfahrung meinerseits.

Der Ist-Zustand ist also: Die Blogs eines Benutzers werden als Post in meine eigene WordPress-Instanz „gepostet“. Wie funktioniert das? Total simpel: Der Benutzer generiert auf der Startseite einen Codeblock. Dieser Codeblock sieht nach „außen“ hin aus, wie ein stink normales Bild mit einem Link. Im Hintergrund jedoch passiert die Magie. Natürlich binde ich keine Datei namens „publicon.png“ ein, sondern eine Datei namens „publicon.php“. Diese PHP-Datei tut erst einmal einige spannende Dinge, bevor sie sich als PNG-Datei outet. Somit passiert also folgendes: Sobald ein Benutzer den Code auf seiner Seite einrichtet, wird per XML-RPC ein neuer Eintrag auf meinem Blog angelegt. Dieser Eintrag (oder Blog-Post) beinhaltet folgendes:

  • die URL der Seite
  • die Meta-Description der Seite
  • die Meta-Keywords der Seite

Die URL der Seite stellt den Post-Namen auf meinem Blog dar. Die Meta-Description wird abgerufen und in den Inhalt gepostet. Die Meta-Keywords bilden auf meiner WordPress-Instanz die Tags (oder Schlagwörter). Mit dieser Kombination, und eingigen WordPress-Plugins ist es nun möglich, eine vollkommen automatisierte Tag-Cloud, eine Top-10-Liste oder ähnliches generieren zu lassen.

Und was passiert nun, wenn der Blog bereits in meinem Verzeichnis vorhanden ist? Hier kommt cURL ins Spiel. cURL „simuliert“ einen Aufruf des Eintrages zum entsprechenden Blog auf dem das Publicone ingebunden wurde. Wozu? Wie sonst sollte ich die Top-Liste generieren lassen?

Das sind sie nun, die Grundfunktionen. Hier und da gibt es noch kleinere Gimmicks. So wird dank der Thumbalizr-API ein Screenshot des eingetragenen Blogs. Außerdem  erscheint das Publicon z.B. ausgegraut (statt blau), wenn ein Fehler bei der XML-RPC-Übertragung aufgetreten ist. Dazu der Code-Generator, der vollkommen „Idiot-Proof „ist und fertig ist das vollautomatische Blog-Verzeichnis.

Zum Abschluss also die Fakten zusammengefasst:

  • das Gesamte Blog-Verzeichnis besteht aus einer WordPress-Instalation
  • ein Eintrag im Blog-Verzeichnis ist nichts anderes als ein WordPress-Post
  • ich benötigte für das gesamte Projekt ca. 2 Tage Arbeit
  • ich benötigte insgesamt 60 Zeilen Quellcode

Was lernen wir daraus? Manchmal muss man nur kreativ sein um mit wenig Aufwand ein schönes kleines Projekt zu starten.

Ob die Seite erfolg hat, weiß ich natürlich nicht. Aber eins weiß ich schon jetzt: Ich habe wieder etwas gelernt 🙂