February 06, 2008

Learning Flickr APIs: Part I

Posted at: 11:55 pm by Timothy Haroutunian
Categories: Tech and Web

At my work, we are going to be starting a complete redesign of one of our sites in the next few weeks and we are preparing for it now. Just as I was leaving from work, my boss told me that he wants me to start using Flickr API’s for our photo galleries. I have had a pro flickr account for over a year and use it every day, but I have never wrapped my head around the API. (I don’t know why, it’s very easy)

If you want to use PHP to get the data, you would use the Serialized PHP Response Format in which you pass it information and it returns a multi-dimensional array. After looking at the PHP code, I realized that this would need to be a function since it is repeating a lot of information except a few spots. There are flickr libraries that you can use, but this is my first stab at it and I tried, but there were a few glitches. Here is a quick function I created to accomplish the request.

$api_key = 'some api key';
$user_id = 'some user id';

function make_call($params){
	global $api_key, $user_id; 

	$auth = array('api_key'=>$api_key,'format'=>'php_serial');
	$first_array = array_splice($params, 0, 0);
	$params = array_merge($first_array, $auth, $params);

	$encoded_params = array();
	foreach ($params as $k => $v){
		$encoded_params[] = urlencode($k).'='.urlencode($v);
	}
	$url = "http://api.flickr.com/services/rest/?".implode('&', $encoded_params);
	$ch = curl_init();
	$timeout = 5; // set to zero for no timeout
	curl_setopt ($ch, CURLOPT_URL, $url);
	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $rsp = curl_exe(c)($ch); (NO PARENTHESIS AROUND THE (c) in exec....I could not save it without them)
	curl_close($ch);
	$rsp_obj = unserialize($rsp);

	return $rsp_obj;
}

This should be saved in a functions file and called from another page that included this page. Below is the code used to call the request. You would change the $params array to what is required in that particular method.

include("functions.php"); // to get function make_call

$params = array(
	'user_id'	=> $user_id,
	'photoset_id' => 'some photoset id',
	'method'	=> 'flickr.photosets.getPhotos'
);
$data = make_call($params);

Using the $data array, you can manipulate or retrieve the data how it fits your needs. This was thrown together quick to get something from flickr which I did. I displayed all the photos from one of my sets.

$data = make_call($params);
if($data['stat'] == 'ok'){
	$set_info = $data['photoset'];
	foreach($set_info['photo'] as $photos){
		$params = array(
			'user_id'	=> $user_id,
			'photo_id' => $photos['id'],
			'method'	=> 'flickr.photos.getInfo'
		);
		$data = make_call($params);
		$photo = $data['photo'];
		$farm_server =  'http://farm'.$photo['farm'].'.static.flickr.com/'.$photo['server'];
		echo '';
	}
}

There may be a better way to accomplish this that I am not aware of, I just started looking at the API’s tonight. Hope this helps a basic request call.

Text Link Ads

Post A Comment

    2 Responses to “Learning Flickr APIs: Part I”

    1. pingback pingback:
      1
      Armenian Eagle » Learning Flickr APIs: Part II - Uploading Files

      [...] my first article about Flickr APIs, I needed to upload photos to flickr which was a lot harder than I thought it would be. I did some [...]

    2. AvatarNiels
      2

      Thanks for writing this post! It’s very helpful!

Leave a Comment



graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.graph element.

421 total reads, averaging 2 daily
stats powered by bSuite bStat