在PHP中按关键字过滤RSS通量

时间:2010-01-25 19:24:15

标签: php rss filter

我在PHP中有一个小站点(无论如何,这是更动态的静态)。我看到多个网站发布了RSS通量或其他名称。

我想知道是否有可能加载这样的RSS通量,按网站关键字主题过滤它,并使用PHP将其显示为一个小主题新闻列。

这项任务是否复杂?我该怎么办?我在这个领域是全新的,很抱歉,如果这些问题已经得到解答。

1 个答案:

答案 0 :(得分:5)

更新:此答案的代码中有一些错误。感谢@obelizsk识别它们,我已经更新了答案。

给出RSS:


<rss version="2.0">
<channel>
<title>(Title)</title>
<description>(Description)</description>
<link>http://www.link.to/the/feed/</link>
<item>
<title> New RSS Creation Tool </title>
<description> FeedForAll generates rss feeds so webmasters do not need to struggle with feed creation </description>
<link> http://www.feedforall.com </link> 
<pubDate> Aug, 22 2004 00:12:30 EST </pubDate>
<category> software </category> 
</item>
</channel>
</rss>

您可以扫描您感兴趣的关键字的标题,说明和/或类别标签。

假设你的PHP脚本中有一个数组,即

$keywords = array("php", "mysql", "open source");

然后,使用SimpleXML,您可以解析RSS提要:


function has_keywords($haystack, $wordlist)
{
  $found = false;
  foreach ($wordlist as $w)
  {
    if (stripos($haystack, $w) !== false) {
      $found = true;
      break;
    }
  }
  return $found;
}

$rss = simplexml_load_file("http://www.mywebsite.com/my/rss/feed/");
foreach ($rss->channel->item as $i)
{
  if (
      has_keywords($i->title, $keywords)
   || has_keywords($i->description, $keywords)
   || has_keywords($i->category)
  )
  {
    $news[] = array
    (
        "title" => $i->title,
        "description" => $i->description,
        "link" => $i->link
    );
  }
}

这将为您提供一个数组$news,其中填充了您通过关键字检查选择的数据。

您只需遍历$news

即可使用您想要的任何HTML代码进行渲染

另外,您还可以使用JavaScript和XMLHttpRequest执行相同的任务,而无需PHP干预。以XML格式加载Feed并执行相同的过程。要呈现数据,您可以使用document.createElement()附加包含您请求的信息的子节点。