PDA

View Full Version : RSS для php-nuke


BFG
01.04.2011, 20:28
Задался идеей создать RSS канал своего сайта, но вот постоянно обновлять самому лень, нашёл такой вот типа модуль (смотреть вложение), но там предлагают создать новую таблицу в БД и наполнять её, а уже оттуда и обновляется сама лента. Теперь собственно вопрос: как-бы это изменить файл pss.php что-бы он брал инфу из уже существующих таблиц нюки: название статьи, короткий текст статьи, и дату добавления.

Думаю если получится сделать, многим будет интересно, тк лента будет обновляться из БД сайта, а не вручную.

Заранее благодарен за помощь!!!


кстати вот запрос который предлагали выполнить на БД
CREATE TABLE BLOG ( ID int(11) NOT NULL default '0', title varchar(50) default NULL, description text default NULL, link varchar(200) default NULL, date date default NULL, category varchar(100) NOT NULL default '', ab varchar(10) NOT NULL default '', PRIMARY KEY (ID) ) TYPE=MyISAM;

BFG
01.04.2011, 21:35
Спросите, почему не воспользоваться стандартным включением ultramode? новости челси (http://www.chelseateam.ru/)
Просто если включаю ultramode, и пытаюсь открыть backend.php постоянно получаю ошибку:
Ошибка разбора XML: синтаксическая ошибка (Строка: 4, Символ: 0)
и подсвечивается вся строка: <?xml version="1.0" encoding="windows-1251"?>

Soniks
01.04.2011, 23:47
а чем вы пытаетесь просмотреть вывод Rss? специальной программой (http://ru.wikipedia.org/wiki/RSS-агрегатор) ?

BFG
02.04.2011, 00:17
браузером. Опера 11.01.
например по адресу http://mynuke.ru/backend.php вижу нормальную страницу, а по адресу http://www.chelseateam.ru/backend.php ошибку, а почему? интересно!!!

Soniks
02.04.2011, 00:50
Попробуйте воспользоваться иным браузером, который поддерживает наибольший формат ридеров. У меня вах rss отображается корректно.

BFG
02.04.2011, 03:11
в мозилле 4 тоже ошибку показывает.
Ошибка синтаксического анализа XML:
объявление XML или текста не в начале сущности Адрес: http://www.chelseateam.ru/backend.php
Строка 4, символ 1:<?xml version="1.0" encoding="windows-1251"?> ^
и ие 6 тоже...
The XML page cannot be displayed
Cannot view XML input using style sheet.
Please correct the error and then click the Refresh button, or try again later. --------------------------------------------------------------------------------
Cannot have multiple DOCTYPE declarations.
Error processing resource 'http://my.netscape.com/publish/formats/rss-0.91.dtd'....
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&...
странно это всё очень...
и опера и мозилла - последние версии, ИЕ практически не пользуюсь, поэтому до сих пор 6.

Soniks, а ты каким браузером смотрел???

Soniks
03.04.2011, 11:02
Все, ясно.
5 января 2006 года с сайта my.netscape.com был удален файл rss-0.91.dtd, ссылки на который были размещены в большом количестве трансляций формата RSS версии 0.91. Это событие привело к сбою некоторых онлайновых и офлайновых агрегаторов, так как потоки, ссылающиеся на этот DTD стали неправильными.
Поэтому такая проблема.
Можно попробовать удалить строку или же изменить в ней путь на данный файл, который закачать (http://emacspeak.googlecode.com/svn/trunk/html/rss-0.91.dtd) к себе на хостинг:
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"
"http://my.netscape.com/publish/formats/rss-0.91.dtd">
Или лучше изменить формат rss в файле backend.php, сделать верси 2.0 например.
По примеру как тут сделано:
http://ru.wikipedia.org/wiki/RSS

BFG
03.04.2011, 12:25
Soniks, проблема как-раз таки в том, что появляется "Ошибка разбора XML". И подсвечивается первая строка: <?xml version="1.0"?>.
До обработки того самого файла дело и не доходит....
Я пробовал залить его себе на хост, тоже не помогло...
а вот первый вариант, работает, только не знаю как БД прикрутить..

Soniks
03.04.2011, 18:32
BFG тогда стоит поменять формат на более новую версию. Это будет самое правильное.

BFG
28.07.2011, 17:27
Soniks, ни в какую не получается... даже из 8-ой нюки брал файл, всё-равно ошибку выдаёт, может выложите свой файл backend.php попробую его всунуть себе...

Soniks
28.07.2011, 19:32
Тут как раз размещен старая версия файла, вот:
include("mainfile.php");
global $prefix, $db, $nukeurl;
header("Content-Type: text/xml");
$result = $db->sql_query("SELECT sid, title, hometext FROM ".$prefix."_stories ORDER BY sid DESC LIMIT 10");
echo "<?xml version=\"1.0\" encoding=\""._CHARSET."\"?>\n\n";
echo "<!DOCTYPE rss PUBLIC \"-//Netscape Communications//DTD RSS 0.91//EN\"\n";
echo " \"http://www.rssboard.org/rss-0.91.dtd.\">\n\n";
echo "<rss version=\"0.91\">\n\n";
echo "<channel>\n";
echo "<title>".htmlspecialchars($sitename)."</title>\n";
echo "<link>$nukeurl</link>\n";
echo "<description>".htmlspecialchars($backend_title)."</description>\n";
echo "<language>$backend_language</language>\n\n";

while (list($rsid, $rtitle, $rtext) = $db->sql_fetchrow($result)) {
$rsid = intval($rsid);
echo "<item>\n";
echo "<title>".htmlspecialchars($rtitle)."</title>\n";
echo "<link>$nukeurl/modules.php?name=News&amp;file=article&amp;sid=$rsid</link>\n";
echo "<description>".htmlspecialchars($rtext)."</description>\n";
echo "</item>\n\n";
}
echo "</channel>\n";
echo "</rss>";

BFG
28.07.2011, 19:45
странно, один фиг ошибка:
http://i25.fastpic.ru/big/2011/0728/50/48d710b0352b350d33bbe8795d3d8350.jpg
хотя ваш rss я вижу нормально:
http://i25.fastpic.ru/big/2011/0728/4a/2539f1e2e360d7bf51d76fd48539234a.jpg

Soniks
28.07.2011, 20:17
Попробуйте в файл .htaccess (если его нет в корне сайта, то создать его) раместиь следующию запись:

AddDefaultCharset windows-1251
php_value default_charset "cp1251"

BFG
28.07.2011, 20:31
после добавления строк файл стал иметь вид:
RewriteEngine on
RewriteRule ^(.*)dir-catalogue/(.*)$ /findout.php [L]
AddDefaultCharsetwindows-1251
php_value default_charset "cp1251"

теперь на локалхосте ошибка Денвера а на хосте Internal Server Error
тоже самое и если только ваши строки...

Soniks
29.07.2011, 00:54
опечатка была в вышеуказанном коде, исправил

BFG
30.07.2011, 14:49
тоже самое:
http://i25.fastpic.ru/big/2011/0728/50/48d710b0352b350d33bbe8795d3d8350.jpg

BFG
31.07.2011, 04:03
ради интереса поставил голую нюку 8.0 и проверил - на ней работает RSS с любым файлом backend.php (родной, 7.6, и ваш) и без .htaccess...

BFG
02.08.2011, 19:10
ещё такая фишка, если на "голую" нюку 7.6 2.9 (с родной БД RSS работает) заливаю свою БД то RSS сразу выдаёт выше описанную ошибку...
в чём же дело? может в том, что в БД есть кодировка utf-8?

BFG
04.08.2011, 04:14
собственно с этим кодом немного разобрался, теперь он у меня берёт название и описание новости из БД, но как-то странно, выводит 10 новостей таким образом:
Название
Описание
(но ссылка с названия ведёт на этот же самый rss файл)

но только на локалхосте, а в тырнете появляется ещё и проблема с кодировкой:
http://www.chelseateam.ru/rss/rss.php (http://rus-phpnuke.com/redirect.php?url=http://www.chelseateam.ru/rss/rss.php)

<?php
// начало программы
include "rss.inc"; // это собственно класс
include "conn.inc"; // переменные для открытия базы


$Rss= new CRss();

$Rss->Title="ChelseaTeam.Ru - Мы знаем о \"Челси\" всё!!!";
$Rss->Link="http://www.chelseateam.ru";
$Rss->Copyright="© ChelseaTeam.Ru.";
$Rss->Description="Фан-сайт лондонского клуба \"Челси\"";
$Rss->Category = "Blues-News";
$Rss->Language="ru";

$Rss->ManagingEditor="info@mail.ru";
$Rss->WebMaster="info@mail.ru";
$Rss->Query="SELECT title, hometext, sid FROM nuke_stories ORDER BY sid DESC LIMIT 10";

$Rss->Open($Server,$DataBase,$Login,$Password);
$Rss->LastBuildDate=date("r");
// получаем последнюю дату публикации
$query = "SELECT nuke_stories.time FROM nuke_stories ORDER BY nuke_stories.time DESC LIMIT 1";

$result1 = mysql_query($query)
or die("FROM nuke_stories failed");

$line = mysql_fetch_array($result1);

$Date =date("r",strtotime($line[0]));
mysql_free_result($result1);

$Rss->LastBuildDate=$Date;
$Rss->PubDate=$Rss->LastBuildDate;

$Rss->PrintHeader();
$Rss->Query();

while ($line = mysql_fetch_array($Rss->Result))
{ // для каждой записи выведем
$Title = $line[0];
$Description = $line[1];
$Link=$line[2];
$PubDate=date("r",strtotime($line[3]));
$Category=$line[4];
$Rss->PrintBody($Title,$Link,$Description,$Category,$PubDate);
}
$Rss->PrintFooter();
$Rss->Close();

?>

Это переделанный немного код из скрипта в первом посте во вложении...

BFG
06.08.2011, 23:24
вопрос с кодировкой решил:
вставил:
mysql_query("set names cp1251");
перед запросом к БД:
$query = "SELECT nuke_stories.time FROM nuke_stories ORDER BY nuke_stories.time DESC LIMIT 1";
Soniks, плиз, помоги решить проблему со ссылками на новость, а то они идут именно на этот rss файл...
http://www.chelseateam.ru/rss/rss.php

BFG
07.08.2011, 01:36
новости челси (http://www.chelseateam.ru/) Гы-гы )))
проблема решилась практически сама )))
удалением строки:
<?xml version="1.0" encoding="windows-1251"?>
из backend.php

Всем спасибо за поддержку

вот мой http://www.chelseateam.ru/rss.php

Как и знал, не всё коту масленица, теперь то он работает, но например feedburner не разбирает его кодировку, можно ли как-нибудь иначе прописать эту строку челси (http://www.chelseateam.ru/) ?

BFG
07.08.2011, 14:58
и не только feedburner, ни один ресурс не определяет ленту как rss.
видимо придётся возвращаться к посту №20 http://forum.mynuke.ru/showpost.php?p=17694&postcount=20

Soniks
09.08.2011, 14:39
BFG В какой у вас кодировки сама БД и таблицы?

BFG
10.08.2011, 23:26
cp1251 general ci, где то вычитал что это можетпроизойти из-за несоответствия кодировок файла и хостинга...
а в том скрипте всё работает, вот только не знаю как ссылку нормально прикрутить...

Soniks
16.08.2011, 13:12
BFG да, проблема именно в кодировки. Поэтому нужно копать в этом направлении. Посмотрите в какой кодировки записан сам файл rss

BFG
16.08.2011, 23:45
Посмотрите в какой кодировки записан сам файл rss
а как это сделать?
сам файл это и есть backend.php он не работает со строкой кодировки...

Soniks
21.08.2011, 22:08
Многие редакторы умеют работать с различными кодировками, например Notepad++ (для Win) и TextWrangler (для Mac).
Просто ваш сервер отдает ответ в формате UTF-8

Soniks
21.08.2011, 22:13
попробуйте так же добавить отправку принудительно заголовка с кодировкой, добавив данную строку:
header("Content-Type: text/xml; charset=windows-1251");
в замен:
header("Content-Type: text/xml");
И в тег <xml> кодировку нужно вернуть.

BFG
21.08.2011, 23:47
получилось примерно вот так:
header("Content-Type: text/xml; charset=windows-1251");
$result = $db->sql_query("SELECT sid, title, hometext FROM ".$prefix."_stories ORDER BY sid DESC LIMIT 10");
echo "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n\n";
echo "<rss version=\"2.0\">\n\n";
но один хрен:
Ошибка разбора XML: синтаксическая ошибка (Строка: 4, Символ: 0)

и это даже на Локалхосте (Денвер)

И вот ещё такая фишка:
в проверке сайта: http://www.cy-pr.com/analysis/chelseateam.ru#copyscape после ключевых слов идёт такая запись:
Кодировка сервера / страницы: Неверная кодировка / windows-1251 (Cyrillic)
что это значит, не подскажете?

BFG
22.08.2011, 02:11
Soniks посмотри плиз исходный код страницы:
http://www.chelseateam.ru/rss.php
откудато появились лишние переводы строк... может поэтому не фурычит?
в маинфайл.рнр их нет... (вроде)

Soniks
23.08.2011, 11:09
BFG код вашего нынешнего файла rss.php в студию, посмотрим.

BFG
23.08.2011, 13:55
<?php
include("mainfile.php");
global $prefix, $db, $nukeurl;
header("Content-Type: application/xml");
// $db->sql_query("set names windows-1251");
$result = $db->sql_query("SELECT sid, title, hometext FROM ".$prefix."_stories ORDER BY sid DESC LIMIT 10");

// echo "<xml version=\"1.0\" encoding=\"windows-1251\">\n\n";
echo "<rss version=\"2.0\">\n\n";
echo "<channel>\n";
echo "<title>".htmlspecialchars($sitename)."</title>\n";
echo "<link>$nukeurl</link>\n";
echo "<description>".htmlspecialchars($backend_title)."</description>\n";
echo "<language>$backend_language</language>\n\n";
echo " <image>
<url>http://www.chelseateam.ru/images/banner.gif</url>
<title>".htmlspecialchars($sitename,ENT_QUOTES)."</title>
<link>".$nukeurl."/</link>
</image>";
while (list($rsid, $rtitle, $rtext) = $db->sql_fetchrow($result)) {
$rsid = intval($rsid);
echo "<item>\n";
echo "<title>".htmlspecialchars($rtitle)."</title>\n";
echo "<link>$nukeurl/modules.php?name=News&amp;file=article&amp;sid=$rsid</link>\n";
echo "<description>".htmlspecialchars($rtext)."</description>\n";
echo "</item>\n\n";
}
echo "</channel>\n";
echo "</rss>";

?>

Soniks
24.08.2011, 18:55
BFG можно леко проверить, закоментировав строчки:

include("mainfile.php");
global $prefix, $db, $nukeurl;
header("Content-Type: application/xml");
// $db->sql_query("set names windows-1251");
$result = $db->sql_query("SELECT sid, title, hometext FROM ".$prefix."_stories ORDER BY sid DESC LIMIT 10");


и открыть файл

BFG
24.08.2011, 21:08
пришлось закоментарить ещё и эту строку:
while (list($rsid, $rtitle, $rtext) = $db->sql_fetchrow($result)) {

и о чудо, лишние строки исчезли...
что же теперь делать???

Soniks
25.08.2011, 09:53
Скорее всего строки добавляются гдето в вызываемых файлах из mainfile.php или может быть в самом файле.
После комментирования этих строк ваш rss проходит валидацию, с учетом этих правок http://forum.mynuke.ru/showpost.php?p=17710&postcount=28 и выставления кодировки?

BFG
26.08.2011, 03:12
да, почти все каталоги видят канал как rss, вот только страница то пустая (белая) получается (((

Soniks
29.08.2011, 21:07
BFG скорее всего где то у вас подключается файл или скрипт, который меняет выдаваемую кодировку или вносит иную корректировку в работу.
Попробуйте отключить (закомментировать) все ранее вами добавленные изменения в файлы сайта.

BFG
30.08.2011, 00:06
))) это уже не реально...
столько сил и времени вложено, что уже почти ничего и не вспомнить...