Facebook
Twitter
Google+
Kommentare
0
Willkommen bei "the web hates me". Mittlerweile hat unser Team ein tolles neues Monitoringtool für Agenturen gelauncht. Unter dem Namen koality.io haben wir einen Service geschaffen, der er Agenturen ermöglicht mit sehr geringen Kosten alle Ihre Webseiten zu überwachen.

Zugriff auf die SlideShows bei SlideShare via Zend_Service_SlideShare

SlideShare hat eine API über die man auf die SlideShows zugreifen kann, man kann einzelne SlideShows abrufen und SlideShows nach Tags, Gruppen oder Usernamen suchen, und erhält dann jeweils Details wie Titel, Uploaddatum, Anzahl Views, Anzahl Downloads, EmbedCode und über ein Dutzend weitere Informationen. Es ist auch möglich neue SlideShows hochzuladen.

Der Zugriff ist nicht sonderlich schwer, man benötigt einen API-Schlüssel und ein Shared Secret die man bei SlideShare im Entwicklerbereich beantragen kann. Dann sendet man einfach GET bzw. POST Anfragen an bestimmte URLs, und bekommt XML zurück.

Am einfachsten geht es jedoch mit der Zend_Service_SlideShare Klasse aus dem Zend Framework:

$slideShare = new Zend_Service_SlideShare(
    'XXXXXXXX',
    'XXXXXXXX',
    'PHPGangsta',
    'XXXXXXXX'
);
$slideShow = $slideShare->getSlideShow('10328838');

echo 'Title: '.$slideShow->getTitle()."\n";
echo 'Description: '.$slideShow->getDescription()."\n";
echo 'NumViews: '.$slideShow->getNumViews()."\n";
echo 'PermaLink: '.$slideShow->getPermaLink()."\n";
echo 'Tags: '.join(',', $slideShow->getTags())."\n";
echo 'ThumbnailUrl: '.$slideShow->getThumbnailUrl()."\n";
echo 'EmbedCode: '.$slideShow->getEmbedCode()."\n";

Und schon hat man Informationen über die betreffende Präsentation, wie beispielsweise:

Title: Caching and tuning fun for high scalability @ PHPTour
Description: Caching has been a 'hot' topic for a few years. But caching takes more than merely taking data and putting
it in a cache : the right caching techniques can improve performance and reduce load significantly. But we'll also look
at some major pitfalls, showing that caching the wrong way can bring down your site. If you're looking for a clear expla
nation about various caching techniques and tools like Memcached, Nginx and Varnish, as well as ways to deploy them in a
n efficient way, this talk is for you. In this tutorial, we'll start from a Zend Framework based site. We'll add caching
, begin to add servers and replace the standard LAMP stack, all while performing live benchmarks.
NumViews: 28
PermaLink: http://www.slideshare.net/wimg/caching-and-tuning-fun-for-high-scalability-phptour
Tags: tuning caching phptour memcache varnish
ThumbnailUrl: http://cdn.slidesharecdn.com/cachingandtuningfun-111125134026-phpapp02-thumbnail-2
EmbedCode: <object width="425" height="348" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=10328838&doc=cachingandtuningfun-111125134026-phpapp02&branding=no" /><embed width="425" height="348" type="application/x-shockwave-flash" src="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=10328838&doc=cachingandtuningfun-111125134026-phpapp02&branding=no" /></object>

Wie oben bereits angedeutet gibt es bereits Methoden um SlideShows zu suchen via Tag, Username oder Gruppe:

$slideShows = $slideShare->getSlideShowsByTag('php');

$slideShows = $slideShare->getSlideShowsByUsername('wimg');

$slideShows = $slideShare->getSlideShowsByGroup('kollace');

Die API kann aber noch mehr wie man in der API-Dokumentation sehen kann, beispielsweise “normal” suchen per Query String. Da die Zend-Klasse das nicht anbietet habe ich das schnell eingebaut. Für das Zend Framework 2 habe ich bereits einen entsprechenden Pull-Request abgesetzt, hoffe es wird bald übernommen. Darin sind dann auch Änderungen bzgl. der API-Version (es gibt mittlerweile Version 2), es sind mehr Informationen im SlideShow Objekt abrufbar und einiges mehr.

$slideShows = $slideShare->searchSlideShow('php unit test');

SlideShare macht es insgesamt sehr einfach die API zu benutzen, die Dokumentation ist gut. Mal sehen ob ich die Zeit finde und die restlichen fehlenden Methoden noch in das Zend Framework 2 einpflegen werde.

Hier meine abgeleitete Klasse mit der searchSlideShow() Methode:

<?php

class PHPGangsta_Service_SlideShare extends Zend_Service_SlideShare
{
    const SERVICE_SEARCH_SLIDE_SHOW      = 'http://www.slideshare.net/api/2/search_slideshows';

    public function searchSlideShow($searchterm)
    {
        $timestamp = time();

        $params = array('api_key'       => $this->getApiKey(),
                        'ts'            => $timestamp,
                        'hash'          => sha1($this->getSharedSecret().$timestamp),
                        'detailed'      => 1,
                        'q'             => $searchterm);

        $cache = $this->getCacheObject();

        $cache_key = md5("__zendslideshare_cache_search_$searchterm");

        if(!$resultSlideshows = $cache->load($cache_key)) {
            $client = $this->getHttpClient();

            $client->setUri(self::SERVICE_SEARCH_SLIDE_SHOW);
            $client->setParameterPost($params);

            require_once 'Zend/Http/Client/Exception.php';
            try {
                $response = $client->request('POST');
            } catch(Zend_Http_Client_Exception $e) {
                require_once 'Zend/Service/SlideShare/Exception.php';
                throw new Zend_Service_SlideShare_Exception("Service Request Failed: {$e->getMessage()}", 0, $e);
            }

            $sxe = simplexml_load_string($response->getBody());

            if($sxe->getName() == "SlideShareServiceError") {
                $message = (string)$sxe->Message[0];
                list($code, $error_str) = explode(':', $message);
                require_once 'Zend/Service/SlideShare/Exception.php';
                throw new Zend_Service_SlideShare_Exception(trim($error_str), $code);
            }

            if(!$sxe->getName() == 'Slideshows') {
                require_once 'Zend/Service/SlideShare/Exception.php';
                throw new Zend_Service_SlideShare_Exception('Unknown XML Repsonse Received');
            }

            $resultSlideshows = array();
            foreach ($sxe->Slideshow as $resultSlideshowNode) {
                $resultSlideshows[] = $this->_slideShowNodeToObject(clone $resultSlideshowNode);
            }

            $cache->save($resultSlideshows, $cache_key);
        }

        return $resultSlideshows;
    }
}

Ähnliche Artikel:

  1. Konstanten, Klassenkonstanten und der Zugriff
Über den Autor

PHP Gangsta

Der zweitgrößte deutsche, eher praxisorientierte PHP-Blog von Michael Kliewe veröffentlicht seit Mitte 2009 Artikel für Fortgeschrittene.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen