RSS 提要为空时如何显示文本

How to display text when RSS feed is empty

我已经为此苦苦挣扎了一段时间,我从类似的问题中得到了一些帮助,但我似乎无法在我的示例中使用它。

我的网站上有一个 RSS 提要,我想做的是在 RSS 提要为 blank/empty 时显示一条消息说 "No Warnings"。如果 RSS 提要中有内容,那么我只想展示一下。

我这辈子都做不到!我无法让它识别 Feed 是空白的...这可能吗??

这是我的代码,

<!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" xml:lang="en" dir="ltr" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Loading directly an RSS feed and displaying it</title></head>
<link type="text/css" href="rss-style.css" rel="stylesheet">

<body bgcolor="#FFE991">
<div id="zone" ><img src="/images/alert-icon-120.png" alt="Weather Warnings for SA. Issued by the Australian Bureau of Meteorology" align="left" style="padding-right: 4pt"width="15" height="15" border="0"/>&nbsp;Current South Australian Statewide Warnings:<small><em><font color="black"> &nbsp;&nbsp;Provided by The Bureau of Meteorology</font></em></small>
</div>
<fieldset class="rsslibbomsa">
<?php
    require_once("rsslib.php");
    $url = "http://www.bom.gov.au/fwo/IDZ00057.warnings_sa.xml";
    $rss = RSS_Display($url, 15, false, false);

if ($rss == '')
{  
              // nothing shown, do whatever you want
    echo 'No Current Warnings';
    }


  else
{
// something to display

echo $rss123;

}

?>
</fieldset>
</body>
</html>

如果有帮助 RSS_Display 来自我在下面提供的 rsslib.php 文件,

<?php
/*
    RSS Extractor and Displayer
    (c) 2007-2010  Scriptol.com - Licence Mozilla 1.1.
    rsslib.php

    Requirements:
    - PHP 5.
    - A RSS feed.

    Using the library:
    Insert this code into the page that displays the RSS feed:

    <?php
    require_once("rsslib.php");
    echo RSS_Display("http://www.bom.gov.au/fwo/IDZ00059.warnings_vic.xml", 15);
    ? >

*/

$RSS_Content = array();

function RSS_Tags($item, $type)
{
        $y = array();
        $tnl = $item->getElementsByTagName("title");
        $tnl = $tnl->item(0);
        $title = $tnl->firstChild->textContent;

        $tnl = $item->getElementsByTagName("link");
        $tnl = $tnl->item(0);
        $link = $tnl->firstChild->textContent;

        $tnl = $item->getElementsByTagName("pubDate");
        $tnl = $tnl->item(0);
        $date = $tnl->firstChild->textContent;      

        $tnl = $item->getElementsByTagName("description");
        $tnl = $tnl->item(0);
        $description = $tnl->firstChild->textContent;

        $y["title"] = $title;
        $y["link"] = $link;
        $y["date"] = $date;     
        $y["description"] = $description;
        $y["type"] = $type;

        return $y;
}


function RSS_Channel($channel)
{
    global $RSS_Content;

    $items = $channel->getElementsByTagName("item");

    // Processing channel

    $y = RSS_Tags($channel, 0);     // get description of channel, type 0
    array_push($RSS_Content, $y);

    // Processing articles

    foreach($items as $item)
    {
        $y = RSS_Tags($item, 1);    // get description of article, type 1
        array_push($RSS_Content, $y);
    }
}

function RSS_Retrieve($url)
{
    global $RSS_Content;

    $doc  = new DOMDocument();
    $doc->load($url);

    $channels = $doc->getElementsByTagName("channel");

    $RSS_Content = array();

    foreach($channels as $channel)
    {
         RSS_Channel($channel);
    }

}


function RSS_RetrieveLinks($url)
{
    global $RSS_Content;

    $doc  = new DOMDocument();
    $doc->load($url);

    $channels = $doc->getElementsByTagName("channel");

    $RSS_Content = array();

    foreach($channels as $channel)
    {
        $items = $channel->getElementsByTagName("item");
        foreach($items as $item)
        {
            $y = RSS_Tags($item, 1);    // get description of article, type 1
            array_push($RSS_Content, $y);
        }

    }

}


function RSS_Links($url, $size = 15)
{
    global $RSS_Content;

    $page = "<ul>";

    RSS_RetrieveLinks($url);
    if($size > 0)
        $recents = array_slice($RSS_Content, 0, $size + 1);

    foreach($recents as $article)
    {
        $type = $article["type"];
        if($type == 0) continue;
        $title = $article["title"];
        $link = $article["link"];
        $page .= "<li><a href=\"$link\">$title</a></li>\n";         
    }

    $page .="</ul>/n";

    return $page;

}



function RSS_Display($url, $size = 15, $site = 0, $withdate = 0)
{
    global $RSS_Content;

    $opened = false;
    $page = "";
    $site = (intval($site) == 0) ? 1 : 0;

    RSS_Retrieve($url);
    if($size > 0)
        $recents = array_slice($RSS_Content, $site, $size + 1 - $site);

    foreach($recents as $article)
    {
        $type = $article["type"];
        if($type == 0)
        {
            if($opened == true)
            {
                $page .="</ul>\n";
                $opened = false;
            }
            $page .="<b>";
        }
        else
        {
            if($opened == false) 
            {
                $page .= "<ul>\n";
                $opened = true;
            }
        }
        $title = $article["title"];
        $link = $article["link"];
        $page .= "<li><a href=\"$link\">$title</a>";
        if($withdate)
        {
      $date = $article["date"];
      $page .=' <span class="rssdate">'.$date.'</span>';
    }
        $description = $article["description"];
        if($description != false)
        {
            $page .= "<br><span class='rssdesc'>$description</span>";
        }
        $page .= "</li>\n";         

        if($type==0)
        {
            $page .="</b><br />";
        }

    }

    if($opened == true)
    {   
        $page .="</ul>\n";
    }
    return $page."\n";

}


?>

如有任何帮助,我们将不胜感激。

非常感谢。

如果您查看 rsslib 代码,您会发现如果 rss 没有文章,则返回的字符串将为 \n

检查RSS是否为空的测试应该是if ($rss == "\n")


除此之外,rsslib 似乎是一个旧代码 (2010) 并且它不是面向对象的(这是一个问题,因为在函数外部定义的全局变量可能与您的代码冲突。

此外,此 class 完成了 RSS 的所有格式设置,因此如果您想更改它,则需要更改 rsslib 代码。

您应该考虑使用另一个 class,例如:https://github.com/dg/rss-php,它面向对象且易于使用。