Introduction to Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  •  Zend_Gdata
  •  Zend_Http
  •  Zend_InfoCard
  •  Zend_Json
  •  Zend_Layout
  •  Zend_Ldap
  •  Zend_Loader
  •  Zend_Locale
  •  Zend_Log
  •  Zend_Mail
  •  Zend_Markup
  •  Zend_Measure
  •  Zend_Memory
  •  Zend_Mime
  •  Zend_Navigation
  •  Zend_Oauth
  •  Zend_OpenId
  •  Zend_Paginator
  •  Zend_Pdf
  •  Zend_ProgressBar
  •  Zend_Queue
  •  Zend_Reflection
  •  Zend_Registry
  •  Zend_Rest

  •  Zend_Search_Lucene
  •  Zend_Serializer
  •  Zend_Server
  •  Zend_Service
  •  Zend_Session
  •  Zend_Soap
  •  Zend_Tag
  •  Zend_Test
  •  Zend_Text
  •  Zend_TimeSync
  •  Zend_Tool
  •  Zend_Tool_Framework
  •  Zend_Tool_Project
  •  Zend_Translate
  •  Zend_Uri
  •  Zend_Validate
  •  Zend_Version
  •  Zend_View
  •  Zend_Wildfire
  •  Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 96.1% Update 2010-11-28 - Revision 23448 - Version ZF 1.11.x

    63.18. Zend_Service_Delicious

    63.18.1. 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.

    Example 63.80. Alle Beiträge abrufen

    $delicious = new Zend_Service_Delicious('username''password');
    $posts $delicious->getAllPosts();

    foreach (
    $posts as $post) {
        echo 
    "--\n";
        echo 
    "Title: {$post->getTitle()}\n";
        echo 
    "Url: {$post->getUrl()}\n";
    }

    63.18.2. 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.

    /**
     * Beiträge werden je nach Parametern geladen. Ist kein Datum oder
     * kein URL gegeben, so wird standardmäßig das aktuelleste Datum
     * verwendet.
     *
     * @param string $tag Optionaler Filter nach einem bestimmten tag
     * @param Zend_Date $dt Optionaler Filter nach Datum
     * @param string $url Optionaler Filter nach URL
     * @return Zend_Service_Delicious_PostList
     */
    public function getPosts($tag null$dt null$url null);

    /**
     * Die letzten x Beiträge abrufen.
     *
     * @param string $tag   Optionaler Filter nach einem bestimmten tag
     * @param string $count Maximale Anzahl der Beiträge, die
     *                      zurückgeliefert werden (standardmäßig 15)
     * @return Zend_Service_Delicious_PostList
     */
    public function getRecentPosts($tag null$count 15);

    /**
     * Alle Beiträge abrufen
     *
     * @param string $tag Optionaler Filter nach einem bestimmten tag
     * @return Zend_Service_Delicious_PostList
     */
    public function getAllPosts($tag null);

    63.18.3. 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.

    Example 63.81. Zugriff auf Beitragslisten

    $delicious = new Zend_Service_Delicious('username''password');
    $posts $delicious->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();

    [Note] Note

    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.

    Example 63.82. 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.

    $delicious = new Zend_Service_Delicious('username''password');
    $posts $delicious->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";
    }

    Example 63.83. 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.

    $delicious = new Zend_Service_Delicious('username''password');
    $posts $delicious->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";
    }

    63.18.4. Das Bearbeiten von Beiträgen

    Example 63.84. Beiträge bearbeiten

    $delicious = new Zend_Service_Delicious('username''password');
    $posts $delicious->getPosts();

    // Titel setzen
    $posts[0]->setTitle('New title');
    // Änderungen speichern
    $posts[0]->save();

    Example 63.85. Verkettung von Methodenaufrufen

    Jede set-Methode gibt das Beitragsobjekt zurück, so dass man die Methodenaufrufe verketten kann.

    $delicious = new Zend_Service_Delicious('username''password');
    $posts $delicious->getPosts();

    $posts[0]->setTitle('New title')
             ->
    setNotes('New notes')
             ->
    save();

    63.18.5. 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.

    Example 63.86. Beiträge löschen

    $delicious = new Zend_Service_Delicious('username''password');

    // Explizites Löschen eines Beitrags über einen URL
    $delicious->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());

    63.18.6. 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.

    Example 63.87. Einen Beitrag hinzufügen

    $delicious = new Zend_Service_Delicious('username''password');

    // Neuen Beitrag erstellen, ändern und abspeichern
    // (Verkettung der Methodenaufrufe)
    $delicious->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();

    63.18.7. Tags

    Example 63.88. Tags

    $delicious = new Zend_Service_Delicious('username''password');

    // Abrufen aller tags
    print_r($delicious->getTags());

    // Umbenennen des tags "ZF" zu "Zend Framework"
    $delicious->renameTag('ZF''zendFramework');

    63.18.8. Bundles

    Example 63.89. Bundles

    $delicious = new Zend_Service_Delicious('username''password');

    // get all bundles
    print_r($delicious->getBundles());

    // delete bundle someBundle
    $delicious->deleteBundle('someBundle');

    // add bundle
    $delicious->addBundle('newBundle', array('tag1''tag2'));

    63.18.9. Öffentliche Daten

    Die del.icio.us webservice API ermöglicht den Zugriff auf die öffentlichen Daten aller Nutzer.

    Table 63.14. 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

    [Note] Note

    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.

    Example 63.90. öffentliche Daten auslesen

    // Nutzername und Passwort werden nicht benötigt
    $delicious = new Zend_Service_Delicious();

    // Laden der Fans eines Nutzers
    print_r($delicious->getUserFans('someUser'));

    // Laden des Netzwerks eines Nutzers
    print_r($delicious->getUserNetwork('someUser'));

    // Laden der vergebenen tags eines Nutzers
    print_r($delicious->getUserTags('someUser'));

    63.18.9.1. Ö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.

    Table 63.15. 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

    63.18.10. 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.

    Example 63.91. Veränderung des HTTP clients der Klasse Zend_Rest_Client

    $myHttpClient = new My_Http_Client();
    Zend_Rest_Client::setHttpClient($myHttpClient);

    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.

    Example 63.92. Konifguration des HTTP clients, so dass Verbindungen geöffnet bleiben

    Zend_Rest_Client::getHttpClient()->setConfig(array(
            
    'keepalive' => true
    ));

    [Note] Note

    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.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...