0

クライアントのシステムは、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 にアクセスする方法がわかりません。

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ところ、Ding!Ding!Ding!Ding! がエコーされます。これは、4 枚の写真があることを認識し、適切な回数だけループしていることを意味します。

どうやら、何らかの理由で $photo->title に満足していないようですか?

また

使用すると、次のよう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 ) )
4

2 に答える 2

0

SimpleXMLを使用する場合は、PHP変数に、それが表すノードにちなんで名前を付ける必要があります。これは、XMLツリーのどこにいるかを明確に把握するのに役立ちます。たとえば、コードは次のようになります。

$rsp = simplexml_load_file($flickrURL);
foreach($rsp->photos->photo as $photo)
{
    echo $photo['title'];
}
于 2010-02-05T18:44:57.380 に答える
0

私はそれを自分で解決しました。Title は XML 要素の属性であり、ノードではないため、オブジェクト属性ではなく配列のようにアクセスされます (紛らわしい用語)。

それでecho $photo['title'];、うんちです!できます。

于 2010-02-05T19:22:24.180 に答える