Как получить доступ к XML из вызова API flickr.photos.search? - PullRequest
0 голосов
/ 05 февраля 2010

Системе моего клиента необходим доступ к личным фотографиям из их учетной записи Flickr с помощью вызова API flickr.photos.search. Я настроил его и получил сгенерированный 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 выше, и это ДА ЭТО ДИН! правильное количество раз.

Значит, по какой-то причине он просто не в восторге от $ 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 ) )

Ответы [ 2 ]

0 голосов
/ 05 февраля 2010

Я решил это сам, дох. Заголовок является атрибутом элемента XML, а не узлом, поэтому к нему обращаются как к массиву, а не как к атрибуту объекта (запутанная терминология).

Так что это echo $photo['title']; и пуф! это работает.

0 голосов
/ 05 февраля 2010

При использовании SimpleXML вы всегда должны называть свою переменную PHP после узла, который она представляет. Это помогает сохранить четкое представление о том, где вы находитесь в своем дереве XML. Например, ваш код должен быть:

$rsp = simplexml_load_file($flickrURL);
foreach($rsp->photos->photo as $photo)
{
    echo $photo['title'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...