代码之家  ›  专栏  ›  技术社区  ›  rhodesjason

如何从flickr.photos.search api调用访问xml?

  •  0
  • rhodesjason  · 技术社区  · 16 年前

    我的客户端系统需要使用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->标题出于某种原因?

    阿尔索

    当我使用 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 回复  |  直到 10 年前
        1
  •  0
  •   rhodesjason    16 年前

    我自己解决的,老兄。title是xml元素的一个属性,而不是一个节点,因此它的访问方式是数组,而不是对象属性(混淆的术语)。

    所以它是 echo $photo['title']; 噗噗!它起作用了。

        2
  •  0
  •   Community Mohan Dere    10 年前

    当使用simplexml时,您应该总是在php变量所代表的节点之后命名它。它有助于清楚地了解您在xml树中的位置。例如,您的代码应该是:

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