Question

I'm using PHP's "simplexml_load_file" to get some data from Flickr.

My goal is to get the photo url.

I'm able to get the following value (assigned to PHP variable):

<p><a href="http://www.flickr.com/people/19725893@N00/">codewrecker</a> posted a photo:</p>

<p><a href="http://www.flickr.com/photos/19725893@N00/2302759205/" title="Santa Monica Pier"><img src="http://farm3.static.flickr.com/2298/2302759205_4fb109f367_m.jpg" width="180" height="240" alt="Santa Monica Pier" /></a></p>

How can I extract just this part of it?

http://farm3.static.flickr.com/2298/2302759205_4fb109f367_m.jpg

Just in case it helps, here's the code I'm working with:

<?php
$xml = simplexml_load_file("http://api.flickr.com/services/feeds/photos_public.gne?id=19725893@N00&lang=en-us&format=xml&tags=carousel");
foreach($xml->entry as $child) {
    $flickr_content = $child->content; // gets html including img url
    // how can I get the img url from "$flickr_content"???
 }
?>
Was it helpful?

Solution

You can probably get away with using a regular expression for this, assuming that the way the HTML is formed is pretty much going to stay the same, e.g.:

if (preg_match('/<img src="([^"]+)"/i', $string, $matches)) {
    $imageUrl = $matches[1];   
}

This is fairly un-robust, and if the HTML is going to change (e.g. the order of parameters in the <img> tag, risk of malformed HTML etc.), you would be better off using an HTML parser.

OTHER TIPS

It's not solving your problem(and probably total overkill), but worth mentioning because I've used the library on 2 projects and it's well written.

phpFlickr - http://phpflickr.com/

Easy way: Combination of substr and strpos to extract first the tag and then the src='...' value, and finally the target string.

Slightly more difficult way (BUT MUCH MORE ROBUST): Use an XML parsing library such as simpleXML

I hope this is helpful. I enjoy using xpath to cut through the XML I get back from SimpleXML:

<?php
$xml = new SimpleXMLElement("http://api.flickr.com/services/feeds/photos_public.gne?id=19725893@N00&lang=en-us&format=xml&tags=carousel", NULL, True);
$images = $xml->xpath('//img');  //use xpath on the XML to find the img tags

foreach($images as $image){  
    echo $image['src'] ;  //here is the image URL
}
?>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top