Получение определенных записей из RSS-канала [PHP] - PullRequest
0 голосов
/ 23 мая 2010

Итак, у меня есть лента RSS с вариантами каждого элемента.Что я хочу сделать, это просто получить записи, которые содержат определенный раздел текста.

Например:

 <item>
    <title>RADIO SHOW - CF64K - 05-20-10 + WRAPUP </title>
    <link>http://linktoradioshow.com</link>
 <comments>Radio show from 05-20-10</comments>
 <pubDate>Thu, 20 May 2010 19:12:12 +0200</pubDate>
 <category domain="http://linktoradioshow.com/browse/199">Audio / Other</category>
 <dc:creator>n0s</dc:creator>
 <guid>http://otherlinktoradioshow.com/</guid>
 <enclosure url="http://linktoradioshow.com/" length="13005" />
 </item>
 <item>
 <title>RADIO SHOW - CF128K - 05-20-10 + WRAPUP </title>
 <link>http://linktoradioshow.com</link>
 <comments>Radio show from 05-20-10</comments>
 <pubDate>Thu, 20 May 2010 19:12:12 +0200</pubDate>
 <category domain="http://linktoradioshow.com/browse/199">Audio / Other</category>
 <dc:creator>n0s</dc:creator>
 <guid>http://otherlinktoradioshow.com/</guid>
 <enclosure url="http://linktoradioshow.com/" length="13005" />
 </item>

Я хочу отображать только результаты, содержащие строку CF64K.Хотя это, вероятно, очень простое регулярное выражение, я не могу понять, как это правильно сделать.Мне всегда кажется, что я могу отображать только строку «CF64K», а не то, что ее окружает.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 мая 2010

Если вам нужно простое совпадение подстроки, вы можете использовать XPath:

$rss = simplexml_load_file($url);
foreach ($rss->xpath('//item[contains(title, "CF64K")]') as $item)
{
    print_r($item);
}

В противном случае вы можете просто зациклить элементы и отфильтровать их вручную

$rss = simplexml_load_file($url);
foreach ($rss->xpath('//item') as $item)
{
    if (!preg_match('#CF64K#i', $item->title))
    {
        continue;
    }
    print_r($item);
}
1 голос
/ 23 мая 2010

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

Использовать парсер RSS. Цикл по записям, используя API, который он предоставляет. Проверьте, соответствуют ли они вашим требованиям (используя простое совпадение строк, а не регулярное выражение). Обработайте те, которые делают, и переходите к началу цикла для тех, кто этого не делает.

...