2017-01-03 18 views
0

RSSフィードの一部にアクセスできないようです。私はこの記事を読んだ:Accessing date as XML node in PHPProblem getting author from a wordpress RSS feed using SimpleXmlElementの記事しかし、私はまだこれを動作させるように見えることはできません。PHP RSSを取得するときにforeach()の引数が無効です

<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()

質問

誰かがDCにアクセスする方法をPHPを使用して、私に言うことができるしてください:作成者タグをとその値を変数に代入しますか?

編集

 $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と同じブロックにあるので、itemのキーを探してforeachを実行できます。

$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

関連する問題