SimplePie не парсинг Google News RSS-канал - PullRequest
2 голосов
/ 29 декабря 2011

Этот код прекрасно работает с любым другим 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 M Y | g:i a T'); ?></p>



        </div>

    <?php endforeach; ?>


</div>

Ответы [ 4 ]

4 голосов
/ 29 декабря 2011

Убедитесь, что вы используете SimplePie 1.2.1 , 1.2 была ошибка при разборе URL, которая может вызвать этот тип ошибки.

(я также ведущий разработчик SimplePie, поэтому не стесняйтесь задавать вопросы прямо на мою электронную почту)

Если вы используете 1.2.1, может показаться, что это проявление ошибка # 162 , которая в настоящее время не подтверждена. Я подробно расскажу об этом, но, похоже, это ошибка в SimplePie, а не в вашем коде.

(Я также отправлю сюда сообщение о том, почему это происходит для любопытных среди вас.)

1 голос
/ 29 декабря 2011

Я не имею понятия о 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, вам не нужно устанавливать какую-либо библиотеку или около того.

Демо

0 голосов
/ 06 января 2018

Просто хотел добавить сюда заметку для тех, кто считает, что приведенный выше ответ не работает. Если вы получаете нулевое значение для заголовка элемента, проверьте источник канала, возможно, в вашем простом шпионе или скрипте нет ничего плохого, но ваш браузер установил его в null из-за HTML-кода в тегах элемента заголовка.

0 голосов
/ 07 сентября 2016

Для канала новостей Google используется:

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