Flickr mit PHP in eigener Website verwenden (Teil 3)
geschrieben von Pawel
Ich bin in den ersten beiden Teilen dieser kleinen Serie schon auf eine PHP-Klasse und ein Mashup eingegangen. Ich habe mich immer gefragt, ob es nicht auch ein bißchen kleiner und eleganter geht. Nun spielt Webspace nicht unbedingt mehr eine Rolle, aber müssen es wirklich so viele Dateien sein, die Dan Coulders Klasse auf die Platte spült, um ein paar Flickraufrufe zu tätigen? Die Flickr-API gibt uns gewaltige Möglichkeiten, aber für Webpräsenzen reicht eine Handvoll von Methoden.
PHP5 ist immer mehr verbreitet, so dass es naheliegend ist, nach einr entsprechenden Klasse zu spähen. Erstaunlicherweise gibt es aber recht wenig. Flickr selbst verweist nur auf Phlickr, welches aber auch alles andere als simpel ist. Glücklicherweise hat Rasmus Lerdorf am 01.September 2005 mal etwas geschrieben.
Rasmus versteht (verständlicherweise) einiges von PHP. In der über über 3 Jahre alten Klasse (!) gelingt es ihm die wesentliche Funktionalität bereitzustellen. Der Aufbau der Sockets erfolgt über das verbreitete Curl.
Die Flickr-API hat sich verändert, es sind Methoden dazugekommen, die es 2005 noch nicht gab. Prinzipiell ist die Klasse aber auch in der bestehenden Form gut verwendbar. Für meine eigene Verwendung habe ich aber die Funktion photoSearch ein bißchen erweitert:
// add new features 11/08 and use practical defaults
function photosSearch
($user_id=‘’,$tags=‘’,$tag_mode=‘’,$text=‘’,$min_upload_date=‘’,
$max_upload_date=‘’,$min_taken_date=‘’,$max_taken_date=‘’,
$license=‘’,$sort=‘’,$privacy_filter=‘’,$bbox=‘’, $accuracy=‘’,
$safe_search=‘’,$content_type=‘’, $machine_tags=‘’, $machine_tag_mode=‘’,
$group_id=‘’, $contacts=‘’, $woe_id=‘’, $place_id=‘’, $media=‘’, $has_geo=‘1’,
$geo_context=‘’, $lat=‘’, $lon=‘’, $radius=‘’, $radius_units=‘’, $extras=‘’,
$per_page=‘20’,$page=‘’) {
if(is_array($user_id)) $params = $user_id;
else {
$params = array();
if($user_id) $params['user_id'] = $user_id;
if($tags) $params['tags'] = $tags;
if($tag_mode) $params['tag_mode'] = $tag_mode;
if($text) $params['text'] = $text;
if($min_upload_date) $params['min_upload_date'] = $min_upload_date;
if($max_upload_date) $params['max_upload_date'] = $max_upload_date;
if($min_taken_date) $params['min_taken_date'] = $min_taken_date;
if($max_taken_date) $params['max_taken_date'] = $max_taken_date;
if($license) $params['license'] = $license;
if($sort) $params['sort'] = $sort;
if($privacy_filter) $params['privacy_filter'] = $privacy_filter;
if($bbox) $params['bbox'] = $bbox;
if($accuracy) $params['accuracy'] = $accuracy;
if($safe_search) $params['safe_search'] = $safe_search;
if($content_type) $params['content_type'] = $content_type;
if($machine_tags) $params['machine_tags'] = $machine_tags;
if($machine_tag_mode) $params['machine_tag_mode'] = $machine_tag_mode;
if($group_id) $params['group_id'] = $group_id;
if($contacts) $params['contacts'] = $contacts;
if($woe_id) $params['woe_id'] = $woe_id;
if($place_id) $params['place_id'] = $place_id;
if($media) $params['media'] = $media;
if($has_geo) $params['has_geo'] = $has_geo;
if($geo_context)$params['geo_context'] = $geo_context;
if($lat) $params['lat'] = $lat;
if($lon) $params['lon'] = $lon;
if($radius) $params['radius'] = $radius;
if($radius_units) $params['radius_units'] = $radius_units;
if($extras) $params['extras'] = $extras;
if($per_page) $params['per_page'] = $per_page;
if($page) $params['page'] = $page;
}
Mit etwas mehr Fleißkönnte man auf diese Weise alle neuen Methoden abbilden. Hier noch ein kleines Anwendungsbeispiel, welches aber nicht die neuen Methoden nutzt:
<!DOCTYPE html
PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
<html xmlns=“http://www.w3.org/1999/xhtml”>
<head>
<title>Flickrtest mit Klasse!</title>
</head>
<body>
<h2>Flickrbeispiel mit der Klasse von Rasmus Lerdorf</h2>
<?php
require_once(“includes/clsFlickr_Api.php”);
$secrets = array(‘api_key’=>‘0815’,‘api_secret’=>‘pixelfans’);
$flickr = new Flickr($secrets);
$photos = $flickr->photosSearch(null, ‘Pixelfans’);
foreach($photos[‘photos’] as $photo) {
$nsid = $photo['owner'];
$title = $photo['title'];
$url = $flickr->getPhotoURL($photo);
$owner = $flickr->peopleGetInfo($nsid);
if (!$owner['realname'])
$owner = $owner['username'];
else
$owner = $owner['realname'];
$in = array('ö','ü','ä','ß','"');
$out = array('ö','ü','ä','ß','');
$title = str_replace($in,$out , "$title");
echo "<img style=\"height:75px;width:75px\" alt\"Bild vom Pixelfan aus Flickr\" src=\"".$url."\" title=\"".$title." © ".$owner."\" />\n";
}
?>
</body>
</html>
Elegant und einfach, aber da REST immer verbreiteter wird und man auf einer Webpräsenz unterschiedliche API’s aufrufen will, bietet es sich an, auf eine allgemeine REST-Parser-Klasse zu setzen.
Kategorie: PHP | Kommentare (0) | Permalink