RSS feed aus webforum ziehen
Niels Dettenbach
linux at eichsfeld.net
Di Mai 5 16:31:54 CEST 2009
Am Dienstag 05 Mai 2009 schrieb Andreas Roth:
> Leider scheint die ganze Welt ja auf diese Webforen zu stehen.
> Unglücklicherweise scheint RSS-Unterstützung immernoch von vielen Admins
> als "Feature" und nicht als "Requirement" auf der Liste zu stehen.
>
> In meinem konkreten Fall möchte ich mehrere phpbb Installationen per RSS
> aufbereitet haben. Die Foren stehen nicht unter meiner Kontrolle und die
> Admins konnte ich bisher noch nicht von Feeds überzeugen.
>
> Gibt es eine Möglichkeit/Anwendung welche diese Foren extern parsen und per
> RSS aufbereiten könnten??
...hmmm,
klingt nach Frickel, wenn man bedenkt das die meisten Admins gelegentlich bis fleißig in den Templates herumstricken - wobei nicht immer ordentliches xHTML herauskommt.
Kommt zudem darauf an, was Du unter "aufbereiten" verstehst - also welche Daten / Postings Du per Feed haben willst.
Schon deshalb mag ich Foren nicht wirklich - aber die Welt will das wohl...
Vielleicht kannst Du den Admin ja überreden, im Root des PHPBBs z.B. dieses Script abzulegen (z.B. "rss.php")?:
--- schnipp --
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2008 Manchumahara(Sabuj Kundu)
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'language/en/common.' . $phpEx);
// Start session
$user->session_begin();
$auth->acl($user->data);
$user->setup();
function make_xml_compatible($text,$bbcode_uid, $bbcode_bitfield,$bbcode_options)
{
global $config, $base_url;
$text = html_entity_decode(generate_text_for_display($text, $bbcode_uid, $bbcode_bitfield, $bbcode_options));
$text = nl2br($text);
$text = str_replace('£', '&#163;', $text);
$text = str_replace('©', '(c)', $text);
$text = htmlspecialchars($text);
return $text;
}
//Get the board url address
$board_url = generate_board_url();
// Start RSS output
header('Content-type: application/rss+xml; charset=UTF-8');
$rss_result = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">
<channel>
<atom:link href=\"".$board_url."/rss.$phpEx\" rel=\"self\" type=\"application/rss+xml\" />
<title>".$config['sitename']."</title>
<link>".$board_url."</link>
<description>".$config['site_desc']."</description>
<language>".$config['default_lang']."</language>
<copyright>".$user->lang['RSS_COPYRIGHT']." ".$config['sitename']."</copyright>
<managingEditor>".$config['board_email']." (".$config['sitename'].")</managingEditor>
<generator>".$config['sitename']."</generator>
<ttl>1</ttl>
";
//
// This SQL query selects the latest topics of all forum
$sql = 'SELECT f.forum_id,f.forum_name, f.forum_desc_options, t.topic_title, t.topic_id,t.topic_last_post_id,t.topic_last_poster_name, p.post_time,
p.post_text,
p.bbcode_uid, p.bbcode_bitfield, u.username, u.user_id
FROM '. FORUMS_TABLE .' f,'.TOPICS_TABLE.' t, '.POSTS_TABLE.' p,'.USERS_TABLE.' u
WHERE t.forum_id = f.forum_id
AND t.topic_status != 1
AND p.post_id = t.topic_last_post_id
AND u.user_id = p.poster_id
ORDER BY t.topic_last_post_id DESC';
if(!$result = $db->sql_query_limit($sql,30))
{
trigger_error($user->lang['RSS_FAILURE']);
}
while($row = $db->sql_fetchrow($result))
{
$forumid=$row['forum_id'];
$topicid=$row['topic_id'];
if($auth->acl_get('f_read',$forumid)) //getting authentication
{
$post_link = $board_url."/viewtopic.".$phpEx."?f=".$forumid."&t=".$topicid."#p".$row['topic_last_post_id'];
$topic_link = $board_url."/viewtopic.".$phpEx."?f=".$forumid."&t=".$topicid;
$description = $user->lang['POST_BY_AUTHOR']." ".$row['topic_last_poster_name']." (".$user->lang['POSTED']."
".$user->format_date($row['post_time']).")<br/>".$row['post_text']."<br /><br /><a href=\"".$topic_link."\">".$user->lang['RSS_READ_TOPIC']."</a><hr />";
$rss_result .= "
<item>
<title>".$row['topic_title']."</title>
<link>".$post_link."</link>
<description>".make_xml_compatible($description, $row['bbcode_uid'], $row['bbcode_bitfield'],
$row['forum_desc_options'])."</description>
<pubDate>".$user->format_date($row['post_time'])."</pubDate>
<guid isPermaLink=\"true\">".$post_link."</guid>
</item>";
}
}
$rss_result .= '</channel></rss>';
echo $rss_result;
$db->sql_freeresult($result);
?>
--- schnapp ---
Dabei kommt dann z.B. sowas heraus:
http://forum.eichsfeld.net/rss.php
Viel Glück,
Niels.
--
Niels Dettenbach
---
Eichsfelder Linux/UNIX Stammtisch (EICLUSt)
http://linux.eichsfeld.net
---
business: Syndicat IT&Internet - http://www.syndicat.com
Heilbad Heiligenstadt / Erbil / Cape Town
---
Kryptoinfo:
PGP public key ID 651CA20D
Fingerprint: 55E0 4DCD B04C 4A49 1586 88AE 54DC 4465 651C A20D
https://syndicat.com/pub_key.asc
---