RSS Feed
-
- phpBB 1.4.2
- Сообщения: 64
- Стаж: 20 лет 10 месяцев
RSS Feed
Название мода: RSS Feed
Автор: Егор Наклоняев
Описание мода: Позволяет получать последние сообщение с форума в формате XML. Поддерживаются форматы RSS 2.0 и Atom 0.3.
Версия мода: 2.2.4
Совместимая версия phpBB: 2.0.х
Cложность установки: Легко
Время, необходимое для установки: ~ 3 минуты
Скачать: rssfeed_2.2.4.zip
Размер файла: 24 kb
Drupal refresh
Автор: Егор Наклоняев
Описание мода: Позволяет получать последние сообщение с форума в формате XML. Поддерживаются форматы RSS 2.0 и Atom 0.3.
Версия мода: 2.2.4
Совместимая версия phpBB: 2.0.х
Cложность установки: Легко
Время, необходимое для установки: ~ 3 минуты
Скачать: rssfeed_2.2.4.zip
Размер файла: 24 kb
Drupal refresh
Последний раз редактировалось Менеджер сайта 17.01.2005 19:56, всего редактировалось 2 раза.
-
- phpBB 2.0.4
- Сообщения: 404
- Стаж: 20 лет 2 месяца
- Откуда: оттуда
ИНФОРМАЦИЯ К РАЗМЫШЛЕНИЮ
Более подобробно о данном моде, здесь:
http://naklon.info/rss/about.htm
P.S. Тем кто поставил себе на форум RSS, возможно имеет смысл зарегистрироваться в сервисе Яндекса:
http://blogs.yandex.ru/add.xml
Более подобробно о данном моде, здесь:
http://naklon.info/rss/about.htm
P.S. Тем кто поставил себе на форум RSS, возможно имеет смысл зарегистрироваться в сервисе Яндекса:
http://blogs.yandex.ru/add.xml
Последний раз редактировалось Егор Наклоняев 13.01.2005 17:15, всего редактировалось 1 раз.
-
- phpBB 2.0.4
- Сообщения: 404
- Стаж: 20 лет 2 месяца
- Откуда: оттуда
МАЛЕНЬКИЕ ХИТРОСТИ.
В RSS мною с особым цинизмом не был включен логотип сайта. Но это легко поправить:
1) Откройте шаблон rss_body.tpl
2) Найдите
<!-- BEGIN post_item -->
3) Перед этим вставьте строки:
Это добавит модную картинку
которая установлена по умолчанию на всех форумах.
Если у Вас есть собственная картинка, просто пропишите URL картинки между тегами <url> и поставьте её размеры width и height
Напоминаю, что соглаcно стандарту, максимальная ширина картинки 144 пикселя и высота 400 пикселей, а если тэги width и height не указаны, размер полагается 88х31.
ВАЖНО: После исправления шаблонов, проверяйте их, пожалуйста, самостоятельно на правильность выдаваемого результата с помощью валидатора: http://feedvalidator.org/
Подробнее о стандарте RSS
В RSS мною с особым цинизмом не был включен логотип сайта. Но это легко поправить:
1) Откройте шаблон rss_body.tpl
2) Найдите
<!-- BEGIN post_item -->
3) Перед этим вставьте строки:
Код: Выделить всё
<image>
<url>{BOARD_URL}templates/subSilver/images/logo_phpBB_med.gif</url>
<title>{BOARD_TITLE}</title>
<link>{BOARD_URL}</link>
<width>122</width>
<height>56</height>
</image>
которая установлена по умолчанию на всех форумах.
Если у Вас есть собственная картинка, просто пропишите URL картинки между тегами <url> и поставьте её размеры width и height
Напоминаю, что соглаcно стандарту, максимальная ширина картинки 144 пикселя и высота 400 пикселей, а если тэги width и height не указаны, размер полагается 88х31.
ВАЖНО: После исправления шаблонов, проверяйте их, пожалуйста, самостоятельно на правильность выдаваемого результата с помощью валидатора: http://feedvalidator.org/
Подробнее о стандарте RSS
-
- phpBB 2.0.4
- Сообщения: 404
- Стаж: 20 лет 2 месяца
- Откуда: оттуда
МАЛЕНЬКИЕ ХИТРОСТИ-2
Один из способов бороться с гражданами, настроившими свои агрегаторы на ежеминутные обновления данных с Вашего RSS:
1) Откройте rss.php
2) Найдите
//
// END Includes of phpBB scripts
//
3) После него добавьте:
Где 300 - время в секундах (т.е. 5 минут)
В результате, если у гражданина, по уверению его броузера или агрегатора, имеет место быть достаточно свежая версия RSS, то пусть он ей и радуется. Нечего базу данных лишний раз дёргать.
ВАЖНО: IMHO, более 5 минут лишать человека свежих новостей не следует.
Более пароноидальные идеи реализуются стандартными модами ограничения количества сессий с одного IP, поскольку для каждого подключения используется новая сессия
Один из способов бороться с гражданами, настроившими свои агрегаторы на ежеминутные обновления данных с Вашего RSS:
1) Откройте rss.php
2) Найдите
//
// END Includes of phpBB scripts
//
3) После него добавьте:
Код: Выделить всё
if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'])) if((time()-strtotime($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']))<300)
{
header("HTTP/1.1 304 Not Modified");
exit;
}
В результате, если у гражданина, по уверению его броузера или агрегатора, имеет место быть достаточно свежая версия RSS, то пусть он ей и радуется. Нечего базу данных лишний раз дёргать.
ВАЖНО: IMHO, более 5 минут лишать человека свежих новостей не следует.
Более пароноидальные идеи реализуются стандартными модами ограничения количества сессий с одного IP, поскольку для каждого подключения используется новая сессия
-
- phpBB 2.0.4
- Сообщения: 404
- Стаж: 20 лет 2 месяца
- Откуда: оттуда
Альтернативный вариант того же самого, но более хитрый. Используется идея, что если новых сообщений не возникло, то значит и не стоит проверять, редактировал ли кто-либо сообщения или нет.
Хитрость заключается в том, что данный SQL запрос является очень шустрым и практически не влияет на общее время выполнение скрипта, в то время как основной запрос использует, практически, перебор значений.
Код: Выделить всё
if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']))
{
$deadline=strtotime($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']);
if((time()-$deadline)<300)
{
header("HTTP/1.1 304 Not Modified");
exit;
}
$sql= "SELECT MAX(post_time) as pt FROM ". POSTS_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Error in obtaining post data', '', __LINE__, __FILE__, $sql);
}
if( $row = $db->sql_fetchrow($result) )
{
if($row['pt']<=$deadline)
{
header("HTTP/1.1 304 Not Modified");
exit;
}
}
}
-
- phpBB 1.2.0
- Сообщения: 11
- Стаж: 20 лет
Все прекрасно кроме одного: если в теме сообщения есть незакрытые кавычки, то получаем ошибку:
Пример: http://forum.kolomna.ru/rss.phpA semi colon character was expected. Error processing resource 'http://forum.kolomna.ru/rss.php'. Line 151, Position 84
<title>Ищу человека :: Исчу дедушку и бабушку фамилии "Архипов" или "</title>
-------...
-
- phpBB 2.0.4
- Сообщения: 404
- Стаж: 20 лет 2 месяца
- Откуда: оттуда
Насколько я вижу, у Вас установлена версия RSS Feed 1.0.5Пример: http://forum.kolomna.ru/rss.php
Если глючит версия 2.0.1 и поэтому Вы сделали откат - скопируйте новую версию под именем rss201.php в корень форума и покажите результат, в противном случае - рекомендую обновить версию.
Добавлено спустя 18 минут 52 секунды:
Кажется понял, что Вы спрашиваете. Это ошибка связанная не с программой, а с применением таблицы стилей IE к ленте новостей.A semi colon character was expected. Error processing resource 'http://forum.kolomna.ru/rss.php'. Line 151, Position 84
<title>Ищу человека :: Исчу дедушку и бабушку фамилии "Архипов" или "</title>
-------...
Поскольку, как показала практика, применение XMLT-трансформации работает в полном объеме только в IE, и, при этом, в некоторых RSS-агрегаторах для Mozilla, в частности Aggerg8, начинаются глюки лучше не использовать её в постоянном режиме. Поэтому данная функция не была включена в релиз. Если это необходимо - в ближайшей версии сделаю отдельный ключ styled.
В любом случае рекомендую обновить версию.
-
- phpBB 1.2.0
- Сообщения: 11
- Стаж: 20 лет
Поставил 2,0,1. Проверяю в MyIE и на http://feedvalidator.org
Ошибка та же. Правда из за ковычки это или нет, я не уверен.
Вот, создал специально тему для примера: http://forum.kolomna.ru/rss.php?f=15
Ошибка та же. Правда из за ковычки это или нет, я не уверен.
Вот, создал специально тему для примера: http://forum.kolomna.ru/rss.php?f=15
-
- phpBB Guru
- Сообщения: 5484
- Стаж: 20 лет 10 месяцев
- Поблагодарили: 2 раза
Смотрим внимательно в html-код страницы и видим...
Соотвественно, именно так выглдядит название темы, после того, как оно было извлечено из БД. А связано это с ограничением на количество символов в названии темы.
Проблема в том, что проводить обратное преобразование нежелательно - можно нарваться на возможность XSS-атаки.
Код: Выделить всё
<title>Коломенский Форум :: Просмотр темы - Исчу дедушку и бабушку фамилии "Архипов" или "</title>
Проблема в том, что проводить обратное преобразование нежелательно - можно нарваться на возможность XSS-атаки.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
-
- phpBB 2.0.4
- Сообщения: 404
- Стаж: 20 лет 2 месяца
- Откуда: оттуда
Точно! Урезана ; в конце последнего " - из-за этого все неприятности. Следовало "Соотвественно, именно так выглдядит название темы, после того, как оно было извлечено из БД. А связано это с ограничением на количество символов в названии темы.
Добавлено спустя 36 минут 59 секунд:
Wizzz_art
Давайте попробуем следующий путь:
Найдем в файле rss.php строку (примерно 547 строка)
'TOPIC_TITLE' => str_replace($badtags,$goodtags,$topic_title),
и заменим это на
'TOPIC_TITLE' =>htmlspecialchars(html_entity_decode($topic_title,ENT_QUOTES)),
Если это исправит ситуацию в Вашем случае - добавлю в следующую версию.
-
- phpBB 1.2.0
- Сообщения: 11
- Стаж: 20 лет
-
- phpBB 2.0.4
- Сообщения: 404
- Стаж: 20 лет 2 месяца
- Откуда: оттуда
Вышла новая версия исправляющая эту и еще несколько огрех
Изменения в версии 2.1.0
- Улучшена безопасность
- Добавлено кэширование
- Устранены отдельные недочёты ( с TOPIC_TITLE в том числе)
- Добавленый аддоны
- Добавлено английское описание
- автоподдержка языка.
Кроме того, самое главное, сделано кэширование основного rss
Если rss вызывается без параметров, то результат может сохраняться на диске и не считаться следующий раз, что позволяет еще больше снизить нагрузку на сервер.
Для этого нужно установить на папку cache права доступа 777 и в начале rss.php:
НАЙТИ
define('CACHE_TO_FILE', false);
ИЗМЕНИТЬ НА
define('CACHE_TO_FILE', true);
Добавлено спустя 1 час 6 минут 4 секунды:
Для тех, у кого кэш включен может полезно будет следующее:
Сия программка, размещенная где-нибудь на сайте может служить источником данных для разных роботов. Время выполнения её около 0.001 сек.
Изменения в версии 2.1.0
- Улучшена безопасность
- Добавлено кэширование
- Устранены отдельные недочёты ( с TOPIC_TITLE в том числе)
- Добавленый аддоны
- Добавлено английское описание
- автоподдержка языка.
Кроме того, самое главное, сделано кэширование основного rss
Если rss вызывается без параметров, то результат может сохраняться на диске и не считаться следующий раз, что позволяет еще больше снизить нагрузку на сервер.
Для этого нужно установить на папку cache права доступа 777 и в начале rss.php:
НАЙТИ
define('CACHE_TO_FILE', false);
ИЗМЕНИТЬ НА
define('CACHE_TO_FILE', true);
Добавлено спустя 1 час 6 минут 4 секунды:
Для тех, у кого кэш включен может полезно будет следующее:
Код: Выделить всё
<?php
$define('USE_GZIP',false);
$cache_file="УКАЖИТЕ ЗДЕСЬ ПОЛНЫЙ ПУТЬ/cache/rss_feed.xml";
$cachefiletime=@filemtime($cache_file);
$MyETag='"RSS'.gmdate("YmdHis", $cachefiletime).$verinfo.'"';
$MyGMTtime=gmdate("D, d M Y H:i:s", $cachefiletime)." GMT";
$do_gzip_compress = FALSE;
if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])) {
if ($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'] == $MyETag) {
header("HTTP/1.1 304 Not Modified");
exit;
}
}
else {
if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'])) {
if ($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'] == $MyGMTtime) {
header("HTTP/1.1 304 Not Modified");
exit;
}
}}
if (USE_GZIP)
{
$phpver = phpversion();
$useragent = (isset($_SERVER["HTTP_USER_AGENT"]) ) ? $_SERVER["HTTP_USER_AGENT"] : $HTTP_USER_AGENT;
if ( $phpver >= '4.0.4pl1' && ( strstr($useragent,'compatible') || strstr($useragent,'Gecko') ) )
{
if ( extension_loaded('zlib') )
{
ob_start('ob_gzhandler');
}
}
else if ( $phpver > '4.0' )
{
if ( strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip') )
{
if ( extension_loaded('zlib') )
{
$do_gzip_compress = TRUE;
ob_start();
ob_implicit_flush(0);
header('Content-Encoding: gzip');
}
}
}
}
if (!empty($HTTP_SERVER_VARS['SERVER_SOFTWARE']) && strstr($HTTP_SERVER_VARS['SERVER_SOFTWARE'], 'Apache/2'))
{
header ('Cache-Control: no-cache, pre-check=0, post-check=0, max-age=0');
}
else
{
header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0');
}
header("Last-Modified: ".$MyGMTtime);
header("Etag: ".$MyETag);
header("Expires: ".gmdate("D, d M Y H:i:s", time())." GMT");
header ('Content-Type: text/xml; charset='.$lang['ENCODING']);
if (!empty($HTTP_SERVER_VARS['SERVER_SOFTWARE']) && strstr($HTTP_SERVER_VARS['SERVER_SOFTWARE'], 'Apache/2'))
{
header ('Cache-Control: no-cache, pre-check=0, post-check=0, max-age=0');
}
else
{
header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0');
}
header("Last-Modified: ".$MyGMTtime);
header("Etag: ".$MyETag);
header("Expires: ".gmdate("D, d M Y H:i:s", time())." GMT");
header ('Content-Type: text/xml; charset='.$lang['ENCODING']);
readfile($cache_file);
if ( $do_gzip_compress )
{
$gzip_contents = ob_get_contents();
ob_end_clean();
$gzip_size = strlen($gzip_contents);
$gzip_crc = crc32($gzip_contents);
$gzip_contents = gzcompress($gzip_contents, 9);
$gzip_contents = substr($gzip_contents, 0, strlen($gzip_contents) - 4);
echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
echo $gzip_contents;
echo pack('V', $gzip_crc);
echo pack('V', $gzip_size);
}
exit;
?>
-
- phpBB 2.0.4
- Сообщения: 404
- Стаж: 20 лет 2 месяца
- Откуда: оттуда
Опять давил клопов. В результате, надавил аж версию 2.1.3
Ошибки были мелкие, встречались редко, но все равно, без них лучше...
Ошибки были мелкие, встречались редко, но все равно, без них лучше...
-
- phpBB 2.0.4
- Сообщения: 404
- Стаж: 20 лет 2 месяца
- Откуда: оттуда
Немного самолюбования.
Небольшое сравнение с известным модом, который изначально был взят за основу, а потом полностью переделан.
http://naklon.info/talk/rss_new.php?nolimit - Около 0.3 сек
http://naklon.info/talk/rss_old.php - Около 0.4 сек
Это при наличии всего 1500(!) записей в форуме. При увеличении разрыв будет гораздо сильнее. Например, на одном сильно используемом форуме было 15 сек против 1.2 сек
При использовании кэширования:
http://naklon.info/talk/rss_new.php - 0.17 сек.
Только кэш, без обработки сессий (программа - выше)
http://naklon.info/rss/forum.php - 0.02 сек
Время выполнения скрипта выводится в комментариях в конце XML файла
ОФФТОПИК:
Как показало моё тестирование более 20 существующих агрегаторов, для RSS, из бесплатного, лучше всего использовать Abilon:
Немного о программе: http://naklon.info/texts/sleep/abilon.htm
Скачать можно здесь: http://abilon.org/abilon/download/
Программка небольшая, даже Dual-Up хватит
Из shareware - NewzCrawler, однозначно.
Opera и Mozilla (в т.ч. Sage, Aggreg8) - на настоящий момент не оптимально работают с HTTP заголовками и гораздо менее удобны.
Небольшое сравнение с известным модом, который изначально был взят за основу, а потом полностью переделан.
Код: Выделить всё
##############################################################
## MOD Title: RSS Content Syndicator
## MOD Author: nschindler < phpbb@wickedwisdom.com > (Nathan Schindler) N/A
## MOD Description: Post-centric forum syndication using RSS
## MOD Version: 2.0.2
http://naklon.info/talk/rss_old.php - Около 0.4 сек
Это при наличии всего 1500(!) записей в форуме. При увеличении разрыв будет гораздо сильнее. Например, на одном сильно используемом форуме было 15 сек против 1.2 сек
При использовании кэширования:
http://naklon.info/talk/rss_new.php - 0.17 сек.
Только кэш, без обработки сессий (программа - выше)
http://naklon.info/rss/forum.php - 0.02 сек
Время выполнения скрипта выводится в комментариях в конце XML файла
ОФФТОПИК:
Как показало моё тестирование более 20 существующих агрегаторов, для RSS, из бесплатного, лучше всего использовать Abilon:
Немного о программе: http://naklon.info/texts/sleep/abilon.htm
Скачать можно здесь: http://abilon.org/abilon/download/
Программка небольшая, даже Dual-Up хватит
Из shareware - NewzCrawler, однозначно.
Opera и Mozilla (в т.ч. Sage, Aggreg8) - на настоящий момент не оптимально работают с HTTP заголовками и гораздо менее удобны.
-
- phpBB 2.0.4
- Сообщения: 404
- Стаж: 20 лет 2 месяца
- Откуда: оттуда
МАЛЕНЬКИЕ ХИТРОСТИ -3
Как исключить форум номер, например, 666 из RSS:
1.Открыть rss.php
2. Около строке 315 найти:
$unauthed = '0';
3. Заменить на
$unauthed = '0,666';
4. Чуть далее найти
if(!$is_auth[$forum_id]['auth_read'])
5.Заменить на
if(!$is_auth[$forum_id]['auth_read'] || $forum_id==666)
В результате, для Админов не изменится ничего, а обычные граждане не смогут получать форум 666 по RSS. Это удобно для исключения той же "корзины", или, скажем, для исключения премодерируемых форумов, поскольку данный MOD не поддерживает Approve Mod.
Более сложный случай:
$unauthed = '0,666,777';
if(!$is_auth[$forum_id]['auth_read'] || $forum_id==666 || $forum_id==777)
Sapienty sat
UPD: Извините, накосячил. Исправил.
Как исключить форум номер, например, 666 из RSS:
1.Открыть rss.php
2. Около строке 315 найти:
$unauthed = '0';
3. Заменить на
$unauthed = '0,666';
4. Чуть далее найти
if(!$is_auth[$forum_id]['auth_read'])
5.Заменить на
if(!$is_auth[$forum_id]['auth_read'] || $forum_id==666)
В результате, для Админов не изменится ничего, а обычные граждане не смогут получать форум 666 по RSS. Это удобно для исключения той же "корзины", или, скажем, для исключения премодерируемых форумов, поскольку данный MOD не поддерживает Approve Mod.
Более сложный случай:
$unauthed = '0,666,777';
if(!$is_auth[$forum_id]['auth_read'] || $forum_id==666 || $forum_id==777)
Sapienty sat
UPD: Извините, накосячил. Исправил.
Последний раз редактировалось Егор Наклоняев 16.01.2005 18:26, всего редактировалось 1 раз.