2011-12-29 17 views
2

このコードは他のRSSフィードと完全に連携しますが、Googleニュースフィードでは機能しません。私は何が間違っているのか分からない、私はそれがいくつかのバグだと思う。我々はhttp://stackoverflow.com/feedsはそれがうまく動作フィードではなく、Googleのニュースフィードにしよう 私はGoogleのニュースを読むしようとすると、私はこのエラーを得続けるたとえばsimplepieは解析していませんGoogleニュースRSSフィード

This XML document is invalid, likely due to invalid characters. XML error: SYSTEM or PUBLIC, the URI is missing at line 1, column 61

を供給します。誰かが私にヒントを与えることができますか?

<?php 

    //get the simplepie library 
    require_once('simplepie.inc'); 

    //grab the feed 
    $feed = new SimplePie(); 

    $feed->set_feed_url("http://news.google.com/news?hl=en&gl=us&q=austria&ie=UTF-8&output=rss"); 
    $feed->force_feed(true); 
    //$feed->encode_instead_of_strip(true); 


    //enable caching 
    $feed->enable_cache(true); 

    //provide the caching folder 
    $feed->set_cache_location('cache'); 

    //set the amount of seconds you want to cache the feed 
    $feed->set_cache_duration(1800); 

    //init the process 
    $feed->init(); 

    //let simplepie handle the content type (atom, RSS...) 
    $feed->handle_content_type(); 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>simple</title> 
</head> 

<body> 
<div id="page-wrap"> 

    <h1>News Finder</h1> 

    <?php if ($feed->error): ?> 
     <p><?php echo $feed->error; ?></p> 
    <?php endif; ?> 

    <?php foreach ($feed->get_items() as $item): ?> 

     <div class="chunk"> 

      <h4 style="background:url(<?php $feed = $item->get_feed(); echo $feed->get_favicon(); ?>) no-repeat; text-indent: 25px; margin: 0 0 10px;"><a href="<?php echo $item->get_permalink(); ?>"><?php echo $item->get_title(); ?></a></h4> 

      <p class="footnote">Source: <a href="<?php $feed = $item->get_feed(); echo $feed->get_permalink(); ?>"><?php $feed = $item->get_feed(); echo $feed->get_title(); ?></a> | <?php echo $item->get_date('j M Y | g:i a T'); ?></p> 



     </div> 

    <?php endforeach; ?> 


</div> 

+1

私はこの問題を発見したと信じています。私のホスティング会社[Rackspace]の問題です。私が別の会社と持っている別のホスティングアカウントで試してみると、それは魅力的だった。来て助けてくれてありがとう@ライアン。ケアをしてください – acrobat

+1

私はかなり同じ問題に直面しています。あなたのホストの問題点は何でしたか教えてください。 –

+0

はい、あなたのホストの問題を教えてください。 – PinoyStackOverflower

答えて

4

あなたがSimplePie 1.2.1を使用していることを確認し、1.2は、このタイプのエラーを引き起こす可能性がURLの解析でバグがありました。

(私もはSimplePieリード開発者ですので、まっすぐに私のメールに質問を撃つこと自由に感じ)

あなたは1.2.1を使用している場合、現在bug #162の現れであると思われます未確認です。私はこれを深く見ていきますが、あなたのコードではなく、間違いなくSimplePieのエラーと思われます。

(私もこれがあなたの中で好奇心のために発生している理由でここに戻って投稿します。)

+0

助けてくれてありがとう、私は今日ダウンロードした1.2.1を使用しています。それは私が 'stackoverflow.com/feed'などのあらゆるフィードのために働いているコードです.Googleのニュースフィードを除いて。私は困惑している。 – acrobat

1

私ははSimplePieについての手掛かりを持っていない、しかし、あなたのケースで簡単な方法は、ちょうどSimpleXMLは次のようになります。

$url = "http://news.google.com/news?hl=en&gl=us&q=austria&bav=on.2,or.r_gc.r_pw.,cf.osb&biw=1920&bih=973&um=1&ie=UTF-8&output=rss"; 
$feed = simplexml_load_file($url); 

echo $feed->channel->title, "\n<", $feed->channel->link, ">\n\n"; 

foreach($feed->channel->item as $item) 
{ 
    echo "* $item->title\n <$item->link>\n"; 
} 

SimpleXMLをは、PHPと通常直接使用可能ですライブラリなどをインストールする必要はありません。

Demo

+0

ありがとうhakre、私は私のサーバー上であなたのスクリプトを試して、それは動作していないようです。いくつかの要件はありますか? – acrobat

+0

フィードがRSS/Atomに準拠することがわかっている限り、SimpleXMLは問題ありません。問題は、インターネット上のフィードの大部分がそうでないことです。 SimplePieは、実際には、SimpleXMLの正規化レイヤーです。 –

+0

@ Ryan McCue:SimpleXMLは、SimplePieのようにフィードにあまり重点を置いていないので、実際には問題ではない。 – hakre

0

をGoogleニュースフィードが使用する場合:

$feed->set_raw_data(file_get_contents($rssurl)); 
0

をただ他人のためにここにメモを追加したいです上記の答えはうまくいかないと思います。アイテムのタイトルにヌルがある場合は、フィードソースを確認してください。シンプルピースやスクリプトに間違いはないかもしれませんが、タイトルアイテムタグ内のHTMLコードのためにブラウザがnullに設定しています。

+0

"answer above"は無意味です。これは、回答を日付、投票、またはアクティビティでソートできるためです。回答へのリンクを使用するか、回答の著者名を使用してください。 – Moritz