Этот код отлично работает с любым другим rss-каналом, но не с новостями Google. Я не знаю, что я делаю неправильно, я думаю, что это ошибка. Я продолжаю получать эту ошибку, когда я пытаюсь читать новостные ленты google
This XML document is invalid, likely due to invalid characters. XML error: SYSTEM or PUBLIC, the URI is missing at line 1, column 61
Например, если мы попробуем http://stackoverflow.com/feeds
он работает красиво, но не с новостями Google. Может ли кто-нибудь дать мне подсказку?
<?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 MY | g:ia T'); ?></p> </div> <?php endforeach; ?> </div>
Убедитесь, что вы используете SimplePie 1.2.1 , 1.2 была ошибка с синтаксическим разбором URL, который может вызвать этот тип ошибки.
(Я также являюсь разработчиком SimplePie, поэтому не стесняйтесь снимать вопросы прямо на мой адрес электронной почты)
Если вы используете 1.2.1, похоже, что это проявление ошибки # 162, которая в настоящее время не подтверждена. Я рассмотрю этот вопрос, но, похоже, это ошибка в SimplePie, а не в коде.
(Я также опубликую здесь, почему это происходит для любопытных среди вас.)
Я понятия не имею о 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, вам не нужно устанавливать какую-либо библиотеку.
демонстрация
Для фида новостей Google используется:
$feed->set_raw_data(file_get_contents($rssurl));