вопрос по rss

sand_man_
На сайте с 17.09.2008
Offline
26
416

Исходные данные: http://news.yandex.ru/yandsearch?rpt=nnews&grhow=clutop&text=%D1%81%D0%BB%D0%BE%D0%BD%D1%8B - новости про слонов на яндексе. компания занимается комплексным обслуживанием слонов: поставками и обслуживанием слонов, и хочет, чтобы клиенты компании были в курсе дел про слонов. Соответсвенно вопрос? можно как- нибудь получить эту информацию в виде rss потока и разместить на сайте так как яндекс предлагае в ленте? можно из любого другого новостного сайта. если кто сталкивался с подобным, помогите. спасибо за ответы

kimberlit
На сайте с 13.03.2007
Offline
370
#1

Недавно сам сталкивался с такой необходимостью.

Вот до чего дошёл:

<?php
$url = "http://news.yandex.ru/index.rss";

$rss = simplexml_load_file($url);

foreach ($rss->channel->item as $item) {
$title = $item->title;
$description = $item->description;
$link = $item->link;

echo "<p>", utf8_convert($title, "w"), "</p>\n";
echo "<p>", utf8_convert($description, "w"), "</p>\n";
}


// функция конвертации UTF8 в Windows-1251
function utf8_convert($str, $type)
{
static $conv = '';
if (!is_array($conv))
{
$conv = array();
for ($x=128; $x <= 143; $x++)
{
$conv['utf'][] = chr(209) . chr($x);
$conv['win'][] = chr($x + 112);
}
for ($x=144; $x<= 191; $x++)
{
$conv['utf'][] = chr(208) . chr($x);
$conv['win'][] = chr($x + 48);
}
$conv['utf'][] = chr(208) . chr(129);
$conv['win'][] = chr(168);
$conv['utf'][] = chr(209) . chr(145);
$conv['win'][] = chr(184);
}
if ($type == 'w')
{
return str_replace($conv['utf'], $conv['win'], $str);
}
elseif ($type == 'u')
{
return str_replace($conv['win'], $conv['utf'], $str);
}
else
{
return $str;
}
}
?>

PS Выводит все новости из выбранной категории новостей ...

sand_man_
На сайте с 17.09.2008
Offline
26
#2

спасибо, но это не совсем то, что нужно. rss по готовым подразделам там есть, и главная у меня в ютф, но все равно спасибо, особенно за функцию перекодировки. нужно выцепить из подкатегории, например, Африка, все сообщения содержащие слово слон

sand_man_ добавил 01.12.2008 в 17:33

хотя что-то я совсемобленился, по идее делов на 15 минут

[Удален]
#3
sand_man_:
спасибо, но это не совсем то, что нужно. rss по готовым подразделам там есть, и главная у меня в ютф, но все равно спасибо, особенно за функцию перекодировки. нужно выцепить из подкатегории, например, Африка, все сообщения содержащие слово слон

хотя что-то я совсемобленился, по идее делов на 15 минут

Есть ли слово слон в тексте:

$is_elephant = preg_match("/слон/", $где_искать_слонов);

Насчет функции перекодировки, - неужто встроенной функции iconv() не хватает? Лично я пользовался приведенной kimberlit раньше только потому что у меня на старом денвере функция iconv не работала должным образом. Почитайте вот тут про iconv, к стати, - там же можно найти много функций для перекодировки.

Насчет граббинга RSS каналов, - в приведенном kimberlit коде не учитываются версии RSS 0.9, 1.0 и Atom... Возможно это только потому, что у Вас именно RSS 2.0, но на всякий случай привожу ссылки на спецификации:

0.9

http://www.purplepages.ie/RSS/netscape/rss0.90.html

1.0

http://web.resource.org/rss/1.0/spec

Atom

http://www.ietf.org/rfc/rfc4287.txt

И даже если Вам нужно работать только с RSS версии 2.0, принцип работы Вам уже показали (см. код kimberlit). И еще - если планируете работать с RSS - будет полезным узнать то, что существует 8 различных версий RSS (0.9, 0.91, 0.92, 0.93, 0.94, 1.0, 2.0, Atom). Удачной реализации.

kimberlit
На сайте с 13.03.2007
Offline
370
#4

So1, спасибо за ссылки ...

PS Я не программист, и собирал выше приведённый код с миру по нитке методом проб и ошибок )))

[Удален]
#5
kimberlit:
So1, спасибо за ссылки ...

PS Я не программист, и собирал выше приведённый код с миру по нитке методом проб и ошибок )))

Да не за что, - остальные спецификации можно легко найти в интернете, если понадобятся сильно. Я например делаю сейчас проект вроде google.com/reader/ и lenta.yandex.ru

К сожалению, проект пока что не доделан, т.к. длительное время у меня не было интернета (а проверять то нужно работу на RSS потоках в интернете), - пришлось всё это дело изучить и чему я лично очень сильно удивился - Яндекс.Лента НЕ читает каналы RSS в которых <item> не является потомком <channel> (сдается мне, что ребята из Yandex только для RSS 2.0 сделали этот аггрегатор - Atom не проверял, но скорей всего тоже не читает). Проверить можно например на блоге http://www.seoskazki.ru/cache/rss_news.xml (RSS версии 1.0) - яндекс.Лента покажет, что в этом потоке нет записей :) google.com/reader/ же выдаст все записи - именно поэтому важно знать о существовании разных версий RSS, если планируете работать с ними.

sand_man_
На сайте с 17.09.2008
Offline
26
#6

спасибо за информацию, действительно полезный топик получился

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий