Hello, I am trying to do nifty things with the flickr api, but this code does not work on my web host. Something about the url_fopen (?) turned off for security. I'm told that I can use "Curl" to work around that. Will you offer some help, if even a relevant url for RTM? Thank you. :-)

<?php

// includes the images from flickr for the comma seperated $tags

  $tags = urlencode('colorful');

  include( "http://api.flickr.com/services/feeds/photos_public.gne?tags=$tags&format=php" );

  foreach($feed['items'] as $item)
    echo $item['description'];

?>

Try:

http://www.php.net/curl - PHP curl Lib docs
http://curl.haxx.se/libcurl/php/ - Curl Lib Author's site

The nice lil class contributed by Sean Huber to the PHP docs should work quite well for simple HTTP tasks...

<?php
/*
Sean Huber CURL library

This library is a basic implementation of CURL capabilities.
It works in most modern versions of IE and FF.

==================================== USAGE ====================================
It exports the CURL object globally, so set a callback with setCallback($func).
(Use setCallback(array('class_name', 'func_name')) to set a callback as a func
that lies within a different class)
Then use one of the CURL request methods:

get($url);
post($url, $vars); vars is a urlencoded string in query string format.

Your callback function will then be called with 1 argument, the response text.
If a callback is not defined, your request will return the response text.
*/

class CURL {
   var $callback = false;

function setCallback($func_name) {
   $this->callback = $func_name;
}

function doRequest($method, $url, $vars) {
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_HEADER, 1);
   curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
   curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
   if ($method == 'POST') {
       curl_setopt($ch, CURLOPT_POST, 1);
       curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
   }
   $data = curl_exec($ch);
   curl_close($ch);
   if ($data) {
       if ($this->callback)
       {
           $callback = $this->callback;
           $this->callback = false;
           return call_user_func($callback, $data);
       } else {
           return $data;
       }
   } else {
       return curl_error($ch);
   }
}

function get($url) {
   return $this->doRequest('GET', $url, 'NULL');
}

function post($url, $vars) {
   return $this->doRequest('POST', $url, $vars);
}
}
?>

Just include it in your script and use it like:

$curl = new CURL();
$curl->get('.. flickr url here... ');

The only problem is that Flickr returns the <?php ?> tags. So you'll have to strip those out. And then execute the raw PHP using eval().

I'm trying to do the same thing and don't really understand your example. In he example, to what local file is the photo obtained via curl written?

Thanks, Len

Thanks for coming back on this, but I've just recently abandoned all effort in PHP for Ruby.

Happy new year

This article has been dead for over six months. Start a new discussion instead.