2016-12-16 4 views
0

私は長年に渡ってPHPを使用しておらず、トゥイーターの名前を必要とする方法でツイートのRSSフィードを操作しようとしています。私は現在、TwitRSSからRSSフィードを取得していますが、トゥイーターの名前がネームスペースを使用していることを除いて、すべてうまくいきます。私はこのサイト上でネームスペースの使い方について多くのスレッドを見てきました。名前空間をSimpleXMLに置き換えるにはどうすればいいですか?

今の私のコードは次のようになります。もちろんエコーの出ている全ての通常の要素のために正常に動作しますが、私は、名前空間のタグに私が試したすべてのソリューションを取得しようとするたびにもたらしたこと

$newsoutput = new SimpleXMLElement('http://twitrss.me/twitter_search_to_rss/?term=php', LIBXML_NOCDATA, true); 
$newsoutput = json_decode(json_encode($newsoutput), TRUE); 
foreach ($newsoutput['channel']['item'] as $item) { 
echo $item['title']."<br>".$item['description']."<br>".$item['link']."<br>".$item['guid']."<br>".$item['pubDate']."<br>"; 
echo $item['author']."br";} 

ループ内のエラーメッセージ。通常は、子要素がnullの場合と同じです。

今、私は別の解決策を試してみたいと思います。私は、名前空間以外の要素を持つすべての名前空間要素を変更する文字列置換を実行したいと思います。理想的には、結果として得られるRSSフィードは、すべての要素を置き換えてから通常どおりに出力します。

私はのようなものを追加しようとしました:私はitem要素の配列がループしecho'ing前にSimpleXMLを配列に変更されなければならないことを前提としますので、私はループの前にこれを追加しました

$newsoutput->str_replace("dc:creator","author",""); 

。私はPHPのstr_replaceが3つのパラメータを必要とし、私は2つしか考えることができないということを私がしているところでは一つの問題を知っています。私が交換したいと思う言葉と交換したい言葉。ほかに何が必要ですか?私はまた、新しい名前空間フリーフィードのループを実行する前に、文字列置換のループを実行する必要があるかもしれないと思う。

+0

おっとを、「ツイーター名は」名前空間をタグで囲む必要があり、それは – XCon065

+0

'str_replace'がグローバル関数で取​​り除かしまいました。 ' - > str_replace'がクラスメソッドを使用しています。あなたはそれを間違っています。 –

+0

oops、著者は以前の文字列置換の試行からそこに残されました – XCon065

答えて

0

あなたのコードは簡単に、あなたの人生は難しくない作っている他の例からコピーハックをたくさん持っている:

  • あなたがLIBXML_NO_CDATAは必要ありません。とにかくオブジェクトをXMLに戻すときにのみ違いがあります(print_rの結果にも違いがありますが、SimpleXMLElementのような「マジック」オブジェクトの場合はそれに頼らないでください)
  • $newsoutput = json_decode(json_encode($newsoutput), TRUE); 「SimpleXML APIの便利な部分をすべて破棄して、フォーマットを保証しない配列を私に与えよう」と言います。
  • ハックにハックを追加するだけです。

代わりに、あなたは(同じように動作し、多分またthe ->attributes() method、)the ->children() methodを使用しているのSimpleXML、と名前空間を使用する方法を学ぶ必要があります。

だから、あなたはこのようなものを使用することができます

$newsoutput = new SimpleXMLElement('http://twitrss.me/twitter_search_to_rss/?term=php', 0, true); 
foreach ($newsoutput->channel->item as $item) { 
    echo $item['title']."<br>".$item['description']."<br>".$item['link']."<br>".$item['guid']."<br>".$item['pubDate']."<br>"; 
    echo $item->children('http://purl.org/dc/elements/1.1/')->creator."<br>"; 
} 
+0

はい、それは動作します。実際これを投稿した直後に私はそれを理解した。 – XCon065

+0

今私はそれ自身のRSSフィードとしてそれをエコーする全く新しい問題があります。私が持っている解決策は、あなたがビューソースをクリックしてもすべてがそこにあるにもかかわらず、あなたのブラウザでフィードの最後の行を生成するだけです。ソースはまた、1行のコードとしてしか表示されません。 – XCon065

+0

ブラウザのフィードの最後の項目を指定しておく必要があります。 – XCon065

関連する問題