Обновляемый поток RSS.xml для своего сайта, генерируемый на PHP

MK
На сайте с 27.01.2009
Offline
19
1349

Здравствуйте.

1. Хочется: чтобы на моём сайте появился новостной файл rss.xml, который создавался бы php-файлом

2. Почему посредством PHP: создавать вручную каждую новость каждый день трудно (новостей 5 в день к примеру), хочу создать новости на несколько дней вперёд и запустить в обновление

3. Что нашел на других сайтах:

<?php
$xml=new DomDocument('1.0','utf-8');
$sorts = $xml->appendChild($xml->createElement('sorts'));
$sort = $sorts->appendChild($xml->createElement('sort'));
$name = $sort->appendChild($xml->createElement('name'));
$name->appendChild($xml->createTextNode('yyyy'));
$xml->formatOutput = true;
$xml->save('goods.xml');
?>

Только работает на английском, ставишь русский текст - не работает.

windows-1251 вместо utf-8 ставишь - то же

не говоря уже о том, что новости не обновляются в зависимости от времени

4. Формат RSS:

<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel><atom:link href="ссылка на данный xml-файл" rel="self" type="application/rss+xml" />
<title>заголовок сайта</title>
<link>ссылка на сайт</link>
<description>описание сайта</description>
<language>ru</language>
<lastBuildDate>дата публикации последней новости в формате Tue, 09 Nov 2010 20:25:37 GMT +0300</lastBuildDate>

<webMaster>веб-мастер сайта</webMaster>


<item>
<title>заголовок новости</title>
<link>ссылка на страницу новости</link>
<description><![CDATA[описание новости]]></description>
<pubDate>дата обновления новости</pubDate>
<guid>ссылка на страницу новости</guid>
</item>

</channel>
</rss>
Нет ничего невозможного.
N
На сайте с 05.11.2010
Offline
0
#1

Думаю, что DOM в вашем случае лишнее, будет проще формировать RSS напрямую, выводя фиду подставляя на лету соотв значения переменных в структуру нужной версии фиды и т.д. например так (файл feed.php)


<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>Новости</title>
<link>http://example.com/</link>
...
формирование $feed_data
...
<?php foreach ($feed_data as $feed_item): ?>
<item>
<title><?php echo $feed_item['title']; ?></title>
<link><?php echo $feed_item['url']; ?></link>
<guid isPermaLink="false"><?php echo $feed_item['url']; ?></guid>
<description><![CDATA[<?php echo $feed_item['description']; ?>]]></description>
<pubDate><?php echo $feed_item['pubDate']; ?></pubDate>
<category><![CDATA[<?php echo $feed_item['category']; ?>]]></category>
</item>
<?php endforeach; ?>
</channel>
</rss>

для этого примера, формат $feed_data может быть например такой:


// это пример структуры, сами же данные должны генериться динамически (браться из БД, вычисляться соотв. образом - например pubDate и т.д.)
$feed_data = array(
array('title' => 'title1', 'url' => 'url 1', 'description' => 'description 1', 'pubDate' => 'pubDate 1', 'category'=> 'category 1'),
array('title' => 'title2', 'url' => 'url 2', 'description' => 'description 2', 'pubDate' => 'pubDate 2', 'category'=> 'category 2'),
...............
);

здесь, массив $feed_data формируется из ваших данных, которые в этом же скрипте могут браться из БД, файлов, ещё как-то вычисляться и т. п., после чего фида просто выводится клиенту(браузеру, спайдеру) с заполненными данными.

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

MK
На сайте с 27.01.2009
Offline
19
#2

при запуске php файла выдается ошибка

Parse error: syntax error, unexpected T_STRING in index.php on line 1

базы нету, сайт создан на html полностью

все новости создаются вручную

то есть я предполагаю создать 10 или более новостей и поставить на обновление

заранее и хочется чтобы они в заданные часы и минуты отображались при этом меняя <lastBuildDate></lastBuildDate> в шапке rss

сегодня после 13:12 - отобразилась первая новость

сегодня после 15:56 - вторая

завтра после 8:24 - третья и так далее

можно их записать предварительно куда-то (в txt например и подгружать оттуда в зависимости от дня и времени)

а Вы бы не могли написать конкретный код на примере 2-х новостей:

и какие файлы участвуют при этом (получается создается 4 файла - php, xml и два txt ?)

Новость 1:

<item>

<title>Новость №1</title>

<link>http://surer-sayt.ru/news-1/</link>

<description><![CDATA[читайте интересную новость №1 ]]></description>

<pubDate>Tue, 11 Nov 2010 17:10:08 GMT</pubDate>

<guid>surer-sayt.ru/news-1/</guid>

</item>

при этой новости 1:

<lastBuildDate>Tue, 11 Nov 2010 20:10:08 GMT +0300</lastBuildDate>

Новость 2:

<item>

<title>Новость №2</title>

<link>http://surer-sayt.ru/news-2/</link>

<description><![CDATA[читайте интересную новость №2 ]]></description>

<pubDate>Tue, 11 Nov 2010 19:11:08 GMT</pubDate>

<guid>surer-sayt.ru/news-2/</guid>

</item>

при этой новости 2:

<lastBuildDate>Tue, 11 Nov 2010 22:11:08 GMT +0300</lastBuildDate>

а то я с 7 утра разбираюсь не могу разобраться, всё какие-то общие примеры которые не работают или работают не так как нужно.

[Удален]
#3

Поищите в яндексе, гугле, рамблере, яхе и т.д. Поищите скрипт для автоматического обновления rss. woweb.ru поищите тут

Master812
На сайте с 23.12.2007
Offline
168
#4

MnogoKlientov, делаете обычный выбор информации из БД или из файлов в php-скрипте, например rss.php и записываете полученные данные в файл rss.xml. Правда я не вижу смысла записи в rss.xml, когда можно все напрмую в rss.php показывать в формате xml ( у меня так сделано, см. http://antizlo.ru/rss.php ).

Если надо, могу бесплатно сделать Вам такой же.

raspberry pi сайт ( https://4raspberrypi.ru/ ) и orange pi сайт ( https://orangepi.su/ ) и новостной движок ( https://generalscript.ru/ )
M_8
На сайте с 24.05.2010
Offline
46
M_8
#5

Вот отличная статья http://devaka.ru/articles/howto-setup-rss-feed, я у себя по ней делал, может пригодится.

Обмен ссылками (http://www.turbo-link.ru/?r=31)

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