PHP: fetching only images from a Flickr feed

A Flickr feed is very useful when we want to retrieve our images uploaded on a Flickr's album. Within this feed, we're only interested in the description element contained inside each item element. By default, all the content of this element is served as HTML and it's a little bit redundant because it also contains unnecessary information, such as "Gabriele Romanato posted a photo" repeated several times. Let's say that we want only the images, with no links or descriptions. How can we achieve this result?

PHP allows us to use Perl-Compatible Regular Expressions (PCRE) to select some portions inside strings or, more generally, textual content. So we're going to use them together with the SimpleXML library. Example:

$flickr_rss = simplexml_load_file('your/feed/url');

        $entries = $flickr_rss->channel->item;
        $i = -1;
        $html = '';
        $html .= '<div class="pics">' . "\n";
        do {
          $entry = $entries[$i];
          $content = $entry->description;
          $pre_content = preg_replace('/\n+|\r\n+/', '', $content);
          $img_src_re = preg_match_all('/src=".+"/', $pre_content, $matches);
          $src = str_replace('src="', '', $matches[0][0]);
          $html .= '<img src="' . $src . '" />' . "\n";
        } while($i < 4);
        $html .= '</div>' . "\n";
        echo $html;

We're actually retrieving only the first five images of our album using a do...while loop. Since we know that the URL of each image is contained within a src attribute, we use a regular expression to accomplish this task. Then we remove the src=" characters from the string using str_replace(). Note that since we've used preg_match_all(), the returned result is an array whose first value is in turn another array, so our value is contained in the first item of this second array.


Live demo

Leave a Reply

Note: Only a member of this blog may post a comment.