Фильтрация потока RSS по ключевым словам в PHP - PullRequest
0 голосов
/ 25 января 2010

У меня есть небольшой сайт на PHP (в любом случае, он более статичный, чем динамический). Я вижу, что на нескольких сайтах публикуются потоки RSS или как их там называют.

Интересно, есть ли возможность загрузить такой поток RSS, отфильтровать его по теме ключевых слов сайта и отобразить в виде небольшой тематической колонки новостей с использованием PHP.

Сложна ли эта задача? С чего мне начать? Я совершенно новичок в этой области, поэтому извините, если на такие вопросы уже дан ответ.

1 Ответ

5 голосов
/ 26 января 2010

Обновление: В коде этого ответа было несколько ошибок. Спасибо @obelizsk за их идентификацию, с тех пор я обновил ответ.

Учитывая RSS:

<code>
<rss version="2.0">
<channel>
<title>(Title)</title>
<description>(Description)</description>
<link><a href="http://www.link.to/the/feed/</link" rel="nofollow noreferrer">http://www.link.to/the/feed/</link</a>>
<item>
<title> New RSS Creation Tool </title>
<description> FeedForAll generates rss feeds so webmasters do not need to struggle with feed creation </description>
<link> <a href="http://www.feedforall.com" rel="nofollow noreferrer">http://www.feedforall.com</a> </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, заполненный данными, выбранными вами при проверке ключевого слова.

Вы можете отобразить это с любым HTML-кодом, который вы хотите, просто итерируя по $news.

Кроме того, вы можете выполнить ту же задачу с помощью JavaScript и XMLHttpRequest без необходимости вмешательства PHP. Загрузите канал в виде XML и выполните ту же процедуру. Чтобы отобразить данные, вы можете использовать document.createElement() для добавления дочерних узлов, содержащих запрошенную вами информацию.

...