[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объединение форумов через RSS
Max Brown
Здравствуйте.
Я озадачился объединением нескольких (неизвестно даже точное их количество) форумов между собой. Объединение планируется не полное, а лишь частичное, по принципу "открытые под-форумы с одинаковыми названиями объединяются, а с отличающимися названиями - остаются на каждом форуме свои".
Планирую сделать это методом экспорта/импорта сообщений через RSS-ленту.
В связи с чем возникли вопросы:

1. Я вообще, не велосипед случайно изобретаю?

2. Существует ли какой-то единый формат RSS-ленты, предназначенный именно для этой цели (экспорт/импорт сообщений с корректным распределением сообщений по топикам, а топиков - по под-форумам)?

3. Охотно приму на условиях Open Source предложения сотрудничества от специалистов по движку IPB, поскольку как минимум 2 из нужных мне форумов работают именно на нём, а я с ним ещё не работал. Со своей стороны, могу обеспечить решение задачи для phpBB в случае, если Total Syndication Suite для phpBB 3.0.4 нас чем-то не устроит.

Мои наработки по данному вопросу находятся по адресу: www.wgent.com/velikoe_obqhedinenie_forumov.htm



Спустя 4 часа, 42 минуты, 37 секунд (22.09.2009 - 22:08) FatCat написал(а):
Цитата (Max Brown @ 22.09.2009 - 18:25)
Планирую сделать это методом экспорта/импорта сообщений через RSS-ленту.

ИМХО, проще на отдающий форум написать простенький пхп-скрпит, например через модули, который по запросу будет собирать напрямую нужную информацию из БД и отдавать по запросу принимающему форуму.

Нечто похожее у меня сделано для импорта информации из форума на сайт в другом домене (и на другом хосте), могу поделиться кодами.
Образец:
Топик в форуме => Страница сайта

Спустя 1 день, 3 часа, 54 минуты, 59 секунд (24.09.2009 - 02:03) Guest написал(а):
За предложение поделиться кодом - спасибо, но скорее всего, я позаимствую из него только те части, которые работают с пока что малоизвестной мне базой данных IPB, т.к. я уже твёрдо нацелился на RSS-обмен.
Должен сразу предупредить, что позаимствованные фрагменты кода неминуемо будут опубликованы, т.к. мои разработки будут делаться строго по принципам Open Source.

Файлы можно прислать на адрес:
"Max Brown" <mx@obninsk.ru>
(адрес нужно вводить в поле "Кому:" целиком с именем, иначе завернёт спам-фильтр).

Спустя 10 часов, 23 минуты, 5 секунд (24.09.2009 - 12:26) FatCat написал(а):
Цитата (Guest @ 24.09.2009 - 03:03)
позаимствованные фрагменты кода неминуемо будут опубликованы

Не проблема.
Приведу здесь полный код, благо он довольно простой. Писал несколько лет назад, когда еще только начинал осваивать пхп, поэтому прошу сильно не смеяться. В своих модулях конечно же код можете модернизировать как угодно.

В корень форума кладется файл; с других серверов обращение к этому файлу с нужными параметрами вызова.

Файл в корне форума
PHP
if(is_dir"../../pharmfo.rum" ))define('RPATH','/home/pharmfo.rum/www/');  //локалка
else define('RPATH','/home/path_to_forum/pharm-forum.ru/');  //сервер

require RPATH.'conf_global.php';

Error_Reporting(1+2+4+8);
// Connect to the Database
if (!($link mysql_connect($INFO['sql_host'], $INFO['sql_user'], $INFO['sql_pass'])))
{
echo( 
sprintf"Нет соединения С базой данных!"mysql_error() ) );
exit();
};


function 
check_perms($fid)
{
$fid intval($fid);
$query_site "select read_perms, password from ibf_forums where id='".$fid."'";
if (!(
$result_site mysql_db_query("pharmforum"$query_site)))
{
echo 
mysql_errno(), mysql_error();
return 
0;
}
$perms mysql_fetch_array($result_site);
$perms['read_perms'] = ",".$perms['read_perms'].",";
$perms['password'] .= "pwd";
$perms['read_perms'] = str_replace(",*,",",2,",$perms['read_perms']);
if(
$perms['password']=='pwd' and stristr($perms['read_perms'],",2,"))return TRUE;
else return 
FALSE;
}

function 
parse_forum_to_site($txt)
{
$txt preg_replace"#(<!--)(.+?)(,)(.+?)(\/\/-->)#is""<!--\\2 //-->"$txt );
$txt preg_replace"#(<li class=ssi2><a class=ssi2 href='http:\/\/www.pharm-forum.ru\/index.php\?showtopic=)(.+?)('>)(.+?)(</a>)#is""<li class=ssi2>[a href='index.php?pid=']\\4"$txt );
$txt preg_replace"#(\[a href='index.php\?pid='\])(.+?)(</li>\n<!-- )(.+?)( \/\/-->)#is""<a class=ssi2 href='index.php?pid=\\4'>\\2</a>"$txt );
$txt preg_replace"#<!--(.+?)//-->\n\n#is"""$txt );
return 
$txt;
}



if(isSet(
$pid) and isSet($fid))die("Невозможно одновременно отобразить список сообщений и одно сообщение!");




if(isSet(
$pid))
{
$pid intval($pid);
$query_site "SELECT p.pid, p.post, t.forum_id, t.id_apteka FROM ibf_topics t, ibf_posts p WHERE p.pid =".$pid." AND t.tid = p.topic_id";

if (!(
$result_site mysql_db_query("pharmforum"$query_site)))
{
echo 
mysql_errno(), mysql_error();
return 
0;
}
$post mysql_fetch_array($result_site);
if(
check_perms($post['forum_id']) or $post['id_apteka'] != '0'){
require 
RPATH."sources/lib/post_parser.php";
$parser = new post_parser();
$return_post $parser->post_db_parse($post['post'], );
echo 
$return_post;
}
else if(
$post['id_apteka'] == '0') {echo "Сообщению в закрытом разделе не задан ключ экспорта.";}
else  {echo 
"Ошибка вызова ssi2.php.";}
}




if(isSet(
$fid))
{
$fid intval($fid);
if(isSet(
$keyword))$keyword addslashes($keyword);else $keyword "";
$order "";
if(isSet(
$sort)){
if(
stristr("forum_id|tid|title|description|id_apteka"$sort))$qprefix "t.";
elseif(
stristr("pid|post|topic_id"$sort))$qprefix "p.";
else 
$qprefix "";
    if(
$qprefix != "")
    {
        
$order $qprefix.addslashes($sort);
        if(isSet(
$scale)){if($scale == 'desc'){$order .= " desc";}}
        
$order .= ", ";
    }
}


if(isSet(
$skin))$skiner "act=ST&f=".intval($skin)."&t=";
else 
$skiner "showtopic=";

$result_text "\n\n";
$result_text .= "<ul class=ssi2>";
$query_site "SELECT t.forum_id, t.tid, t.title, t.description, t.id_apteka, p.pid, p.post, p.topic_id FROM ibf_topics t, ibf_posts p WHERE t.tid = p.topic_id AND t.forum_id = ".$fid." order by ".$order." p.pid";

if (!(
$result_messs mysql_db_query("pharmforum"$query_site))){echo  mysql_errno(), mysql_error();  return ;}
$topic_counter "0";
$post_counted "";
$perms_checker TRUE;
    while(
$row_messs mysql_fetch_array($result_messs))
    {
    
$row_messs['id_apteka'] = ",".$row_messs['id_apteka'].",,";
    if( 
$topic_counter == "0" )$perms_checker check_perms($row_messs['forum_id']);
        if(
$perms_checker)
        {
            if(
$row_messs['tid'] != $topic_counter)
                {
                if(
$post_counted != "")$result_text .= "\n<!-- ".$post_counted." //-->\n";
                
$post_counted $row_messs['pid'].",";
                    if(
stristr($row_messs['id_apteka'], ",".$keyword.","))
                    {if(!
stristr($result_text,$row_messs['tid']."'>"))
                        {
                            
$result_text .= "\n<li class=ssi2><a class=ssi2 href='http://www.pharm-forum.ru/index.php?".$skiner.$row_messs['tid']."'>";
                            
$result_text .= $row_messs['title'];
                            
$result_text .= '</a>';
                            if(
$row_messs['description']!=''){$result_text .= '<br><span class=ssi2>'.$row_messs['description'].'</span>';};
                            
$result_text .= '</li>';
                        }
                    }
                }
                else
                {
                
$post_counted .= $row_messs['pid'].",";
                }
            
        }
    
$topic_counter $row_messs['tid'];
    }
$result_text .= "\n<!-- ".$post_counted." //-->\n";
$result_text .= "</ul>";

if(!isSet(
$reply))$reply "false";
elseif(
$reply != "true")$reply "false"// Вывод ссылок на форум только по ключу true

if($reply == "false")
{
$result_text parse_forum_to_site($result_text);
}

echo(
$result_text);
}



if(isSet(
$count))
{
$count intval($count);
$query_site "SELECT attach_hits FROM ibf_posts WHERE pid =".$count;

if (!(
$result_site mysql_db_query("pharmforum"$query_site)))
{
echo 
mysql_errno(), mysql_error();
return 
0;
}
$post mysql_fetch_array($result_site);
echo(
$post['attach_hits']);
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.