2017-01-03 3 views
0

Кажется, у меня проблемы с доступом к части RSS-канала. Я прочитал эту статью: Accessing date as XML node in PHP и Problem getting author from a wordpress RSS feed using SimpleXmlElement статью, но я все еще не могу заставить ее работать.PHP Недопустимый аргумент, предоставленный foreach() при получении RSS

<item> 
    <title>This is the title</title> 
    <dc:creator>!an (@myHandle)</dc:creator> 
    <description><![CDATA[<p class="TweetTextSize js-tweet-text tweet-text" lang="en">What is this tweeet</p>]]></description> 
    <pubDate>Tue, 03 Jan 2017 22:01:54 +0000</pubDate> 
    <guid>1234567</guid> 
    <link>1234567</link> 
    <twitter:source/> 
    <twitter:place/> 
</item> 

вот часть rss, которую я получаю. Вот полный RSS: https://twitrss.me/twitter_search_to_rss/?term=test+this+feed

Я пытаюсь получить доступ к этому с PHP код следующим образом:

$feed = new DOMDocument(); 
$feed->load('https://twitrss.me/twitter_search_to_rss/?term=test+this+feed'); 

foreach ($feed->getElementsByTagName('channel')->item(0) as $item) { 
    $ns_dc = $item->children('http://purl.org/dc/elements/1.1/'); 
    echo $ns_dc->creator; 
} 

, но я получаю эту ошибку:

Invalid argument supplied for foreach()

Я пытался изменить его на :

$feed->getElementsByTagName('channel')->item(0) 

, но затем ничего не выводится.

Я также попытался:

$feed->getElementsByTagName('channel') 

но получаю ошибку:

Call to undefined method DOMElement::children()

Вопрос

Пожалуйста, может кто-нибудь сказать мне, с помощью PHP, как получить доступ к DC: создатель тега и присвоить это значение переменной?

Редактировать

 $i = 1; 
    foreach ($feed->channel as $row) { 
    echo $i; 

     foreach ($row->children() as $key => $val) { 
      if ($key == "item") { 
      if ($i == 1) { 
       $ns_dc = $val->children('http://purl.org/dc/elements/1.1/'); 
       echo $ns_dc->creator; 
       } 
      } 

     } 

    $i = $i + 1; 
    } 
+0

Похоже, вы должны просто использовать '$ feed-> getElementsByTagName ('channel')' в вашем для каждого. – BizzyBob

+0

См. Нижнюю часть ответа. Пробовал, но получил ошибку: вызов неопределенного метода DOMElement :: children() – JamesG

ответ

1

Поскольку вы имеете дело с содержанием XML, я обнаружил, что проще использовать SimpleXML вместо DOMDocument. Поскольку каждый <item> находится в том же блоке, что и channel, вы можете сделать foreach в поисках ключа от item.

$feed = simplexml_load_file('https://twitrss.me/twitter_search_to_rss/?term=test+this+feed'); 

foreach ($feed->channel as $row) { 
    foreach ($row->children() as $key => $val) { 
     if ($key == "item") { 
      $ns_dc = $val->children('http://purl.org/dc/elements/1.1/'); 
      echo $ns_dc->creator; 
     } 
    } 
} 

Этот код выводит строку «создатель», которую вы ожидаете.

+1

Нет. Я решил это. Я просто хотел самого последнего. Спасибо. Я принял ответ и +1. Спасибо, чувак за быстрый ответ. – JamesG