Zend_Service_Delicious Einführung Zend_Service_Delicious ist eine simple API, um die XML- und JSON-Webservices von del.icio.us nutzen zu können. Diese Komponente bietet Lese- und Schreibzugriff auf Beiträge bei del.icio.us, sofern man die nötigen Zugrffisrechte vorweist. Alle Beiträge abrufen getAllPosts(); foreach ($posts as $post) { echo "--\n"; echo "Title: {$post->getTitle()}\n"; echo "Url: {$post->getUrl()}\n"; } ]]> Beiträge abrufen Zend_Service_Delicious bietet drei Möglichkeiten, um Beiträge von del.icio.us abzurufen: getPosts(), getRecentPosts() und getAllPosts(). Jede dieser Methoden liefert eine Instanz der Klasse Zend_Service_Delicious_PostList, welche die abgerufenen Beiträge beinhaltet. Zend_Service_Delicious_PostList Instanzen dieser Klasse werden von den Methoden getPosts(), getAllPosts(), getRecentPosts() und getUserPosts() der Klasse Zend_Service_Delicious zurückgegeben. Für den leichteren Zugriff implementiert diese Klasse die Interfaces Countable, Iterator andArrayAccess. Zugriff auf Beitragslisten getAllPosts(); // Beiträge zählen echo count($posts); // Iteration über die Beitragsliste foreach ($posts as $post) { echo "--\n"; echo "Title: {$post->getTitle()}\n"; echo "Url: {$post->getUrl()}\n"; } // speziellen Beitrag über Arrayzugriff erhalten echo $posts[0]->getTitle(); ]]> Die Methoden ArrayAccess::offsetSet() und ArrayAccess::offsetUnset() werfen in dieser Implementierung Ausnahmen (Exceptions). Dadurch werfen Codes, wie z.B. unset($posts[0]); oder $posts[0] = 'A'; Exceptions, da nur Leserechte für die Eigenschaften bestehen. Beitragslisten-Objekte haben zwei integrierte Filter-Möglichkenten. Die Listen können nach Tags und nach URLs gefiltert werden. Eine Beitragsliste nach gewissen tags filtern Beiträge mit speziellen tags können durch die Methode withTags() aus der Liste herausgefiltert werden. Der Einfachheit halber, kann die Methode withTag() verwendet werden, wenn nur nach einem einzigen tag gefiltert werden soll. getAllPosts(); // Alle Beiträge ausgeben, denen die tags "php" und "zend" zugeordnet sind foreach ($posts->withTags(array('php', 'zend')) as $post) { echo "Title: {$post->getTitle()}\n"; echo "Url: {$post->getUrl()}\n"; } ]]> Eine Beitragsliste nach URLs filtern Beiträge können mit Hilfe der Methode withUrl() nach einer speziellen URL gefiltert werden indem ein passender regulärer Ausdruck spezifiziert wird. getAllPosts(); // Beiträge ausgeben, deren URL "/help/" enthält foreach ($posts->withUrl('/help/') as $post) { echo "Title: {$post->getTitle()}\n"; echo "Url: {$post->getUrl()}\n"; } ]]> Das Bearbeiten von Beiträgen Beiträge bearbeiten getPosts(); // Titel setzen $posts[0]->setTitle('New title'); // Änderungen speichern $posts[0]->save(); ]]> Verkettung von Methodenaufrufen Jede set-Methode gibt das Beitragsobjekt zurück, so dass man die Methodenaufrufe verketten kann. getPosts(); $posts[0]->setTitle('New title') ->setNotes('New notes') ->save(); ]]> Das Löschen von Beiträgen Es existieren zwei Wege, um einen Beitrag zu löschen. Zum Einen explizit über den Beitrags-URL oder zum Anderen durch den Aufruf der Methode delete() mit dem Objekt, welches den zu löschenden Beitrag repräsentiert. Beiträge löschen deletePost('http://framework.zend.com'); // Löschen eines Beitrags über den Aufruf der delete()-Methode $posts = $delicious->getPosts(); $posts[0]->delete(); // eine alternative Anwendung von deletePost() $delicious->deletePost($posts[0]->getUrl()); ]]> Das Hinzufügen von neuen Beiträgen Um einen Beitrag hinzuzufügen, muss zu Beginn die Methode createNewPost() aufgerufen werden, welche eine Instanz der Klasse Zend_Service_Delicious_Post zurückgibt. Danach kann mit Hilfe des erhaltenen Objekts der Beitrag verändert werden. Nach der Änderung muss die save()-Methode aufgerufen werden, damit die Änderungen in die del.icio.us-Datenbank übernommen werden. Einen Beitrag hinzufügen createNewPost('Zend Framework', 'http://framework.zend.com') ->setNotes('Zend Framework Homepage') ->save(); // Neuen Beitrag erstellen, ändern und abspeichern (ohne Verkettung) $newPost = $delicious->createNewPost('Zend Framework', 'http://framework.zend.com'); $newPost->setNotes('Zend Framework Homepage'); $newPost->save(); ]]> Tags Tags getTags()); // Umbenennen des tags "ZF" zu "Zend Framework" $delicious->renameTag('ZF', 'zendFramework'); ]]> Bundles Bundles getBundles()); // delete bundle someBundle $delicious->deleteBundle('someBundle'); // add bundle $delicious->addBundle('newBundle', array('tag1', 'tag2')); ]]> Öffentliche Daten Die del.icio.us webservice API ermöglicht den Zugriff auf die öffentlichen Daten aller Nutzer. Methoden, um öffentliche Daten abzurufen Name Beschreibung Rückgabewert getUserFans() Liefert die Fans eines Nutzers Array getUserNetwork() Liefert das Netzwerk eines Nutzers Array getUserPosts() Liefert alle Beiträge eines Nutzers Zend_Service_Delicious_PostList getUserTags() Liefert alle tags, die der Nutzer vergeben hat Array
Sollten nur diese Methoden verwendet werden, ist dem Konstruktor der Klasse Zend_Service_Delicious bei der Instanzierung kein Nutzername in Kombination mit dem entsprechenden Passwort zu übergeben. öffentliche Daten auslesen getUserFans('someUser')); // Laden des Netzwerks eines Nutzers print_r($delicious->getUserNetwork('someUser')); // Laden der vergebenen tags eines Nutzers print_r($delicious->getUserTags('someUser')); ]]> Öffentliche Beiträge Wenn öffentliche Beiträge über die Methode getUserPosts() bezogen werden wird ein Zend_Service_Delicious_PostList Objekt zurückgegeben, welches die einzelnen Beiträge in einer Liste von Zend_Service_Delicious_SimplePost-Objekten speichert. Diese Objekte enthalten Basisinformationen über den Beitrag, wie z.B. den URL, den Titel, die Notizen und Tags. Methoden der Klasse Zend_Service_Delicious_SimplePost Name Beschreibung Rückgabewert getNotes() Liefert die Beschreibung zu einem Beitrag String getTags() Liefert die tags zu einem Beitrag Array getTitle() Liefert den Titel eines Beitrags String getUrl() Liefert den URL eines Beitrags String
HTTP client Zend_Service_Delicious verwendet die Klasse Zend_Rest_Client, um HTTP-Request an den del.icio.us Webservice zu schicken. Um einzustellen, welchen HTTP Client Zend_Service_Delicious verwenden soll, muss der HTTP Client der Klasse Zend_Rest_Client geändert werden. Veränderung des HTTP clients der Klasse Zend_Rest_Client Sollte man mehr als einen Request mit Zend_Service_Delicious senden, ist es sinnvoll den HTTP Client so zu konfigurieren, dass die Verbindungen offen gehalten werden, um die Geschwindigkeit der Requests zu erhöhen. Konifguration des HTTP clients, so dass Verbindungen geöffnet bleiben setConfig(array( 'keepalive' => true )); ]]> Bei der Instanzierung eines Zend_Service_Delicious Objekts wird der SSL Transport der Klasse Zend_Rest_Client auf 'ssl' anstatt auf 'ssl2' gesetzt, da del.icio.us einige Probleme mit 'ssl2' hat. So kann es vorkommen, dass die Vervollständigung eines Request sehr lange (um die zwei Sekunden) dauert.