Сложность разбора фида атомов с помощью simplexml_load_file (), невозможно получить атрибут - PullRequest
0 голосов
/ 21 марта 2010

Я пытаюсь создать социальную шкалу времени.Я загружаю каналы из определенных мест, поэтому у меня есть график того, что я сделал.Проблема, с которой я столкнулся, связана с Google Reader Shared Items.

Я хочу получить время, когда я поделился элементом, который содержится в <entry gr:crawl-timestamp-msec="1269088723811"> Попытка получить элемент с помощью $date = $xml->entry[$i]->link->attributes()->gr:crawl-timestamp-msec; не удалась из-за: after gr, который вызывает ошибку PHP.Я мог выяснить, как получить элемент, поэтому подумал, что я изменил бы имя, используя код ниже, но он выдает следующую ошибку

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<?xml version="1.0"?><feed xmlns:idx="urn:atom-extension:indexing" xmlns:media="http://search.yahoo.com/mrss/" xmlns

<?php

$get_feed = file_get_contents('http://www.google.com/reader/public/atom/user/03120403612393553979/state/com.google/broadcast');

    $old = "gr:crawl-timestamp-msec";
    $new  = "timestamp";

    $xml_file = str_replace($old, $new, $get_feed);

    $xml = simplexml_load_file($xml_file);
    $i = 0;


        foreach ($xml->entry as $value)
        { 

            $id = $xml->entry[$i]->id;
            $date = date('Y-m-d H:i:s', strtotime($xml->entry[$i]->attributes()->timestamp ));
            $text = $xml->entry[$i]->title;
            $link = $xml->entry[$i]->link->attributes()->href;
            $source = "googleshared";

            echo "date = $date<br />";

            $sql="INSERT IGNORE INTO timeline (id,date,text,link, source) VALUES ('$id', '$date', '$text', '$link', '$source')";
            mysql_query($sql);

            $i++;
        }`

Может ли кто-нибудь указать мнеправильное направление, пожалуйста.

Приветствия

Крейг

1 Ответ

2 голосов
/ 21 марта 2010

Проблема в том, что crawl-timestamp-msec находится в другом пространстве имен. Где-то в документе (обычно это корневой элемент, который в вашем случае выглядит как <feed/>), он будет иметь атрибут в виде xmlns:gr="http://some/url/here". Это говорит о том, что документ будет использовать вещи из пространства имен http://some/url/here и будет префикс всех этих вещей с gr.

[Редактировать: рассматриваемый URL-адрес http://www.google.com/schemas/reader/atom/]

Чтобы получить к нему доступ, нужно изменить

$xml->entry[$i]->link->attributes()->gr:crawl-timestamp-msec

до

$xml->entry[$i]->attributes('http://www.google.com/schemas/reader/atom/')->{'crawl-timestamp-msec'}

(Изменить: атрибут находится на элементе <entry/>, а не <link/>, кажется)

...