2010-03-20 2 views
0

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

Я хочу получить время, в которое я поделился элементом, который содержится в <entry gr:crawl-timestamp-msec="1269088723811"> Попытка получить элемент с использованием $date = $xml->entry[$i]->link->attributes()->gr:crawl-timestamp-msec; не удалась из-за: после 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++; 
     }` 

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

Приветствия

Craig

ответ

2

Проблема в том, что 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'}

(Edit: атрибут на <entry/> элемент, а не <link/>, похоже)

+0

Hi Chris, Спасибо за быстрый ответ. Знал, что было что-то делать с пространствами имен из веб-сайта IBM, но не мог понять. Я заменил то, что вы сказали, но это порождает другую ошибку. 'Примечание: использование неопределенной постоянной метки времени - предполагаемая« отметка времени »в /Users/craigward/Dropbox/Websites/wip/cron/get_feed_data.php в строке 52 Уведомление : Использование неопределенного константы msec - предполагается «msec» в /Users/craigward/Dropbox/Websites/wip/cron/get_feed_data.php в строке 52 date = 0' –

+1

@Craig Используйте ответ Криса в сочетании с моим (используя фигурные скобки и цитаты), и он должен работать. –

+0

И +1 - Я знал, что там было больше :) –

 Смежные вопросы

  • Нет связанных вопросов^_^