Jump to content
  • 0

создание RSS-канала


Yahoo!
 Share

Question

Тут вот приступил к созданию=)

Появился вопрос. Как сохранить в формате xml, или почему я вижу на других сайтах rss ленты в формате xml или вообще rdf (студии Лебедева), если неизбежно применение php в самой ленте. Вопросы будут ещё. Выходные посвящу этому=) Спасибо.

Link to comment
Share on other sites

Recommended Posts

  • 0

если кому понадобится, то вот:

<?php
// Задаем формат даты
define('DATE_FORMAT_RFC822','r');
// Сообщяем браузеру что передаем XML
header("Content-type: text/xml; charset=UTF-8");
// Дата последней сборки фида
$lastBuildDate=date(DATE_FORMAT_RFC822);
echo <<<END
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>site.ru RSSFeed</title>
<link>site.ru</link>
<description>Моя RSS лента</description>
<pubDate>$lastBuildDate</pubDate>
<lastBuildDate>$lastBuildDate</lastBuildDate>
<docs>http://site.ru/rss</docs>
<generator>cms system light</generator>
<copyright>Copyright 2010 site.ru</copyright>
<managingEditor>test@site.ru</managingEditor>
<webMaster>test@site.ru</webMaster>
<language>ru</language>
END;
// В этом файле надо разместить подключение к базе данных

$host="localhost"; #Хост
$login_mysql="login"; #Логин
$password_mysql="pass"; #Пароль
$baza_name="bd_name"; #Имя базы
$db = @mysql_connect("$host", "$login_mysql", "$password_mysql");
mysql_query("SET NAMES utf8");
if (!$db) exit("<p>К сожалению, не доступен сервер MySQL</p>");
if (!@mysql_select_db($baza_name,$db)) exit("<p>К сожалению, не доступна база данных</p>");

// Модифицируйте запрос под вашу таблицу
$query = "SELECT title, full_text, title2, date FROM pages ORDER by date desc LIMIT 0,10";
$res = mysql_query($query); while ($row=mysql_fetch_array($res))
{
// Убираем из тайтла html теги и лишние пробелы
$title = strip_tags(trim($row['title']));
// С аноносом можно не проводить такие манипуляции, т.к. мы вставим его в блок CDATA
$anon = $row['full_text'];
$url = $row['title2'];
$pubDate = date(DATE_FORMAT_RFC822);
echo <<<END
<item>
<title>$title</title>
<description><![CDATA[$anon]]></description>
<link>http://site.ru/$url</link>
<guid isPermaLink="true">http://mysite.com/news/$url</guid>
<pubDate>$pubDate</pubDate>
</item>
END;
}
echo <<<END
</channel>
</rss>
END;
?>

Link to comment
Share on other sites

  • 0

Вот так это выглядит у меня для блога

$arr=$blog->getlist(0, 10); // Тут мы получаем 10 последних записей блога
header('Content-Type: text/xml;charset=utf-8'); // Отправляем заголовок, что это XML. В принципе, лучше это делать на сервере (у меня так и есть), но такой вариант тоже приемлемый
$date=date('r'); // Дата, когда сформирован этот XML в формате «RFC 2822»
echo "<"."?xml version=\"1.0\" encoding=\"utf-8\" ?".">
<rss version=\"2.0\">
<channel>
<title>Мой блог</title>
<description>Мой блог — самый блоговый блог в мире</description>
<link>http://{$_SERVER['SERVER_NAME']}/</link>
<lastBuildDate>{$date}</lastBuildDate>
";
foreach ($arr as $v)
{
echo "
<item>
<title>{$v['name']}</title>
<description>{$v['description']}</description>
<link>http://{$_SERVER['SERVER_NAME']}/blog/{$v['id']}-{$v['enname']}</link>
</item>
";
}

echo "
</channel>
</rss>
";

Вот так всё на самом деле просто.

Link to comment
Share on other sites

  • 0

Не люблю дату из Mysql!!!!!

я разделил для статей и комментариев хранить даты в VARCHAR , для RSS так и быть отдельно DATE.

Заношу туда дату date("r") и извлекаю. Выдаёт 1989 год.

Edited by Yahoo!
Link to comment
Share on other sites

  • 0
хранить даты в VARCHAR

? :)

Я ещё могу понять когда Int, но на чём основаны ваши аргументы для использования VARCHAR ?

Заношу туда дату date("r") и извлекаю. Выдаёт 1989 год.

DATE у вас в каком формате ?

Link to comment
Share on other sites

  • 0
Я ещё могу понять когда Int, но на чём основаны ваши аргументы для использования VARCHAR ?

Я понимаю, что это не логично, но выводится так, как мне надо =)

DATE у вас в каком формате ?

в БД заношу в формате date("r")

Edited by Yahoo!
Link to comment
Share on other sites

  • 0
в БД заношу в формате date("r")

и оно нормально такую строчку распознаёт ? не лучше уж в таблицу DATETIME заносить date('U') ?

ну или классически для базы YYYY-MM-DD HH:MM:SS

Link to comment
Share on other sites

  • 0

Я про функцию date() c заданным вами форматированием.

Выдаёт на обычной странице или на RSS?

Есть принципиальная разница ? Данные из разных мест берутся?

Link to comment
Share on other sites

  • 0
Ну например тут говорится о нужном форматировании.

Ну, логично. Соответственно вы должны хранить дату в mysql в формате DATETIME или TIMESTAMP

а для RSS уже форматировать должным образом (в формате RFC 2822 : Mon, 14 Feb 2011 17:19:28 +0300)

Link to comment
Share on other sites

  • 0

Я сделал!!!!!

// дата для RSS хранится отдельно от даты для статьи в формате DATETIME
$data = $row['rssdate']; // присваиваем переменной извлечённую дату
$date = date("r", time($data)+2000); // вот такое простое перекодирование, +2000 это для хостинга фикс =)
...
// применение:
echo "....".$date."....";

Ура =)

Стоп! Сейчас стало отображаться текущее время, ничего не понимаю! $date = date("r", time($data)+2000); - ступил)) но я не знаю как переформатнуть=(

Edited by Yahoo!
Link to comment
Share on other sites

  • 0
Стоп! Сейчас стало отображаться текущее время, ничего не понимаю!

в rss так и должно быть на сколько я понял, то есть если делаешь какое-либо изменение, или добавление нового материала, то в rss вроде как все записи должны поменяться на текущее, не?

Link to comment
Share on other sites

  • 0
Стоп! Сейчас стало отображаться текущее время, ничего не понимаю! $date = date("r", time($data)+2000); - ступил)) но я не знаю как переформатнуть=(

переформатнуть в мануале если я правильно понял

Link to comment
Share on other sites

  • 0
Эту стаью я не раз смотрел=) там основы форматирования, ещё интересно так:

select from tablica1

не знаю, как из БД

Чтоб ответить на ваш вопрос нужно знать в каком же формате хранится у вас дата в базе (т.е. возвращаемся к началу чего от вас добиться я не смог).

Из того формата что в date_format("%d.%m.%Y", POLE_DATA_DOBAVLENIJA) вы не получите ("Y-m-d H:i:s") ("r").

а про форматирование читать можно около тут

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy