RSS Feed

Все моды, созданные нашим сообществом для phpBB 2.0.x, анонсированы тут.
Закрыто
Аватара пользователя
Менеджер сайта
phpBB 1.4.2
Сообщения: 64
Зарегистрирован: 13.03.2004 21:18

RSS Feed

Сообщение Менеджер сайта » 09.01.2005 20:11

Название мода: 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
Последний раз редактировалось Менеджер сайта 17.01.2005 19:56, всего редактировалось 2 раза.

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 10.01.2005 18:36

ИНФОРМАЦИЯ К РАЗМЫШЛЕНИЮ

Более подобробно о данном моде, здесь:
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
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 11.01.2005 2:53

МАЛЕНЬКИЕ ХИТРОСТИ.

В 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
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 11.01.2005 9:45

МАЛЕНЬКИЕ ХИТРОСТИ-2

Один из способов бороться с гражданами, настроившими свои агрегаторы на ежеминутные обновления данных с Вашего 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;
}
Где 300 - время в секундах (т.е. 5 минут)
В результате, если у гражданина, по уверению его броузера или агрегатора, имеет место быть достаточно свежая версия RSS, то пусть он ей и радуется. Нечего базу данных лишний раз дёргать.
ВАЖНО: IMHO, более 5 минут лишать человека свежих новостей не следует.

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

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 11.01.2005 17:16

Альтернативный вариант того же самого, но более хитрый. Используется идея, что если новых сообщений не возникло, то значит и не стоит проверять, редактировал ли кто-либо сообщения или нет.

Код: Выделить всё

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;
        }
	 }
}
Хитрость заключается в том, что данный SQL запрос является очень шустрым и практически не влияет на общее время выполнение скрипта, в то время как основной запрос использует, практически, перебор значений.

Wizzz_art
phpBB 1.2.0
Сообщения: 11
Зарегистрирован: 30.12.2004 17:01

Сообщение Wizzz_art » 12.01.2005 10:06

Все прекрасно кроме одного: если в теме сообщения есть незакрытые кавычки, то получаем ошибку:
A semi colon character was expected. Error processing resource 'http://forum.kolomna.ru/rss.php'. Line 151, Position 84

<title>Ищу человека :: Исчу дедушку и бабушку фамилии "Архипов" или &quot</title>
-------...
Пример: http://forum.kolomna.ru/rss.php

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 12.01.2005 11:38

Насколько я вижу, у Вас установлена версия RSS Feed 1.0.5
Если глючит версия 2.0.1 и поэтому Вы сделали откат - скопируйте новую версию под именем rss201.php в корень форума и покажите результат, в противном случае - рекомендую обновить версию.

Добавлено спустя 18 минут 52 секунды:
A semi colon character was expected. Error processing resource 'http://forum.kolomna.ru/rss.php'. Line 151, Position 84

<title>Ищу человека :: Исчу дедушку и бабушку фамилии "Архипов" или &quot</title>
-------...
Кажется понял, что Вы спрашиваете. Это ошибка связанная не с программой, а с применением таблицы стилей IE к ленте новостей.
Поскольку, как показала практика, применение XMLT-трансформации работает в полном объеме только в IE, и, при этом, в некоторых RSS-агрегаторах для Mozilla, в частности Aggerg8, начинаются глюки лучше не использовать её в постоянном режиме. Поэтому данная функция не была включена в релиз. Если это необходимо - в ближайшей версии сделаю отдельный ключ styled.

В любом случае рекомендую обновить версию.

Wizzz_art
phpBB 1.2.0
Сообщения: 11
Зарегистрирован: 30.12.2004 17:01

Сообщение Wizzz_art » 12.01.2005 17:26

Поставил 2,0,1. Проверяю в MyIE и на http://feedvalidator.org
Ошибка та же. Правда из за ковычки это или нет, я не уверен.
Вот, создал специально тему для примера: http://forum.kolomna.ru/rss.php?f=15

Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5475
Зарегистрирован: 13.03.2004 21:27
Откуда: msk.ru
Поблагодарили: 1 раз
Контактная информация:

Сообщение Xpert » 12.01.2005 17:58

Смотрим внимательно в html-код страницы и видим...

Код: Выделить всё

<title>Коломенский Форум :: Просмотр темы - Исчу дедушку и бабушку фамилии "Архипов" или &quot</title>
Соотвественно, именно так выглдядит название темы, после того, как оно было извлечено из БД. А связано это с ограничением на количество символов в названии темы.
Проблема в том, что проводить обратное преобразование нежелательно - можно нарваться на возможность XSS-атаки. :(
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 12.01.2005 19:53

Соотвественно, именно так выглдядит название темы, после того, как оно было извлечено из БД. А связано это с ограничением на количество символов в названии темы.
Точно! Урезана ; в конце последнего &quot - из-за этого все неприятности. Следовало "

Добавлено спустя 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)),

Если это исправит ситуацию в Вашем случае - добавлю в следующую версию.

Wizzz_art
phpBB 1.2.0
Сообщения: 11
Зарегистрирован: 30.12.2004 17:01

Сообщение Wizzz_art » 12.01.2005 20:08

Спасибо! С причиной разобрался.
А избежать этого, насколько я понимаю, нельзя?

Добавлено спустя 34 секунды:

Упс. Поторопился :)
Сейчас попробую.

Добавлено спустя 4 минуты 20 секунд:

Исправил. Вроде работает...

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 13.01.2005 1:15

Вышла новая версия исправляющая эту и еще несколько огрех
Изменения в версии 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;
?>
Сия программка, размещенная где-нибудь на сайте может служить источником данных для разных роботов. Время выполнения её около 0.001 сек.

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 14.01.2005 19:43

Опять давил клопов. В результате, надавил аж версию 2.1.3
Ошибки были мелкие, встречались редко, но все равно, без них лучше...

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 15.01.2005 15:41

Немного самолюбования.

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

Код: Выделить всё

##############################################################
## 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_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 заголовками и гораздо менее удобны.

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 15.01.2005 21:46

МАЛЕНЬКИЕ ХИТРОСТИ -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: Извините, накосячил. Исправил.
Последний раз редактировалось Егор Наклоняев 16.01.2005 18:26, всего редактировалось 1 раз.

Закрыто

Вернуться в «Анонсы и поддержка модов для phpBB 2.0.x»