如何从flickr.photos.search API调用访问XML?

时间:2010-02-05 18:26:54

标签: php xml flickr

我的客户系统需要使用flickr.photos.search API调用从其Flickr帐户访问私人照片。我进行了设置并获得了该调用的生成URL。当我在浏览器中访问该URL时,它会按照它应该输出XML。

(API参考:http://www.flickr.com/services/api/flickr.photos.search.html

但是,在PHP中,我想访问该XML并使用simplexml PHP扩展来显示它。我无法弄清楚如何访问XML,因为它不是在.xml文件中,而是在动态URL中。

XML文件(来自浏览器)如下所示:

<rsp stat="ok">
  <photos page="1" pages="1" perpage="100" total="4">
    <photo id="4332852622" owner="36520372@N05" secret="xxxxxxxx" server="2760" farm="3" title="building" ispublic="0" isfriend="0" isfamily="0"/>
    <photo id="4332113745" owner="36520372@N05" secret="xxxxxxx" server="2803" farm="3" title="digging" ispublic="0" isfriend="0" isfamily="0"/>
    <photo id="4332852444" owner="36520372@N05" secret="xxxxxxx" server="4025" farm="5" title="house" ispublic="0" isfriend="0" isfamily="0"/>
    <photo id="4332113699" owner="36520372@N05" secret="xxxxxxx" server="2802" farm="3" title="PaulLuomaHab" ispublic="0" isfriend="0" isfamily="0"/>
  </photos>
</rsp>

使用PHP我正在尝试这个:

$rsp = simplexml_load_file($flickrURL);
foreach($rsp->photos->photo as $photo) {
    echo $photo->title;
}

它根本不返回任何内容。我在这里错过了什么吗?

注意:我在上面的echo "Ding!";循环中添加了foreach,它回应丁!丁!丁!丁!,这意味着它认识到有4个照片和循环正确的次数。

显然,由于某些原因,它对$ photo-&gt;标题感到不满意?

同时

当我使用print_r($photo)时,我得到了这个:

SimpleXMLElement Object ( [@attributes] => Array ( [id] => 4332852622 [owner] => 36520372@N05 [secret] => 88fff62f43 [server] => 2760 [farm] => 3 [title] => building [ispublic] => 0 [isfriend] => 0 [isfamily] => 0 ) )

2 个答案:

答案 0 :(得分:0)

使用SimpleXML时,应始终在其表示的节点之后命名PHP变量。它有助于清楚地了解您在XML树中的位置。例如,您的代码应为:

$rsp = simplexml_load_file($flickrURL);
foreach($rsp->photos->photo as $photo)
{
    echo $photo['title'];
}

答案 1 :(得分:0)

我自己解决了,doh。 Title是XML元素的属性,而不是节点,因此它像数组一样被访问,而不像对象属性(令人困惑的术语)。

所以这是echo $photo['title'];和噗!它有效。