PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Zugriff auf die SlideShows bei SlideShare via Zend_Service_SlideShare

with one comment

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;
    }
}

Written by Michael Kliewe

Dezember 5th, 2011 at 10:07 am

Posted in PHP

Tagged with , ,

One Response to 'Zugriff auf die SlideShows bei SlideShare via Zend_Service_SlideShare'

Subscribe to comments with RSS or TrackBack to 'Zugriff auf die SlideShows bei SlideShare via Zend_Service_SlideShare'.

  1. […] in die YouTube APIwithout commentsSo, heute ist die YouTube API dran, nachdem ich letzte Woche die SlideShare API vorgestellt hatte. Mit Hilfe der YouTube Data API ist es möglich Videos hochzuladen, nach Videos […]

Leave a Reply

You can add images to your comment by clicking here.