Forum. MyNuke.ru

Forum. MyNuke.ru (http://forum.mynuke.ru/index.php)
-   Модули (http://forum.mynuke.ru/forumdisplay.php?f=17)
-   -   RSS для php-nuke (http://forum.mynuke.ru/showthread.php?t=3964)

BFG 01.04.2011 20:28

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

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

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


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

BFG 01.04.2011 21:35

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

Soniks 01.04.2011 23:47

а чем вы пытаетесь просмотреть вывод 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 стали неправильными.

Поэтому такая проблема.
Можно попробовать удалить строку или же изменить в ней путь на данный файл, который закачать к себе на хостинг:
Код:
<!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

Тут как раз размещен старая версия файла, вот:
PHP код:
 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...8795d3d8350.jpg
хотя ваш rss я вижу нормально:
http://i25.fastpic.ru/big/2011/0728...fd48539234a.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...8795d3d8350.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

Код:
<?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,$Pub Date); } $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

новости челси Гы-гы )))
проблема решилась практически сама )))
удалением строки:
<?xml version="1.0" encoding="windows-1251"?>
из backend.php

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

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

Как и знал, не всё коту масленица, теперь то он работает, но например feedburner не разбирает его кодировку, можно ли как-нибудь иначе прописать эту строку челси ?

BFG 07.08.2011 14:58

и не только feedburner, ни один ресурс не определяет ленту как rss.
видимо придётся возвращаться к посту №20 http://forum.mynuke.ru/showpost.php...94&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

попробуйте так же добавить отправку принудительно заголовка с кодировкой, добавив данную строку:
PHP код:
 header("Content-Type: text/xml; charset=windows-1251"); 

в замен:
PHP код:
 header("Content-Type: text/xml"); 

И в тег <xml> кодировку нужно вернуть.

BFG 21.08.2011 23:47

получилось примерно вот так:
PHP код:
 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 код:
<?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 можно леко проверить, закоментировав строчки:
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"); 

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

BFG 24.08.2011 21:08

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


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

Soniks 25.08.2011 09:53

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

BFG 26.08.2011 03:12

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

Soniks 29.08.2011 21:07

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

BFG 30.08.2011 00:06

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


Часовой пояс GMT +4, время: 09:57.

Copyright © 2005 by Soniks