PDA

View Full Version : RSS reader to display more the 1 forum RSS feed


Popa Andrei
07-20-2012, 07:23 AM
<?php
// ################################################## ####
// ## configuration
// ##
// ## $rss_file= 'http://www.vbulletin.com/forum/external.php?type=rss';
// ## Adjust this variable to point to your RSS feed

$rss_file = 'link here';

// ## configuration end
// ################################################## ####
// ## Do not touch code below!

$max_items = 5;
$item_count = 0;
$is_item = false;
$tag = '';
$title = '';
$description = '';
$link = '';


echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<style type="text/css">
A:link {text-decoration: none; color: #FB7800; font-weight:bold;}
A:visited {text-decoration: none; color: #FB7800; font-weight:bold;}
A:active {text-decoration: none; color: #FB7800; font-weight:bold;}
A:hover {text-decoration: underline; color: red; font-weight:bold;}
</style>
</head>
<body>';

function character_data($parser, $data)
{
global $is_item, $tag, $title, $description, $link , $date;
if ($is_item)
{
switch ($tag)
{
case "TITLE":
$title .= $data;
break;
case "DESCRIPTION":
$description .= $data;

break;
case "LINK":
$link .= $data;
break;

case "PUBDATE":
$date .= $data;
break;
}
}
}

function begin_element($parser, $name)
{
global $is_item, $tag;
if ($is_item)
{
$tag = $name;
}
else if ($name == "ITEM")
{
$is_item = true;
}
}

function end_element($parser, $name)
{
global $is_item, $title, $description, $link, $rss_output, $date;
if ($name == "ITEM")
{
global $item_count, $max_items;
$item_count++;
if ($item_count <= $max_items)
{
$rss_output .= "<table width='530' style='margin-left:auto; margin-right:auto; padding-bottom:10px;'>
<tr>
<td style='padding-left:15px;' align='left'><p><a href='".trim($link)."' target=\"_blank\">".htmlspecialchars(trim($title))."</a></p></td>
</tr>
<tr>
<td><p style='color:#95BEDA;'>Posted ".$date."</p></td>
</tr>
<tr>
<td><p style='color:#70CCA0'>" . htmlspecialchars(trim($description)) . "</p></td>
</tr>
</table>";
$title = "";
$description = "";
$link = "";
$date = "";
$is_item = false;
}
}
}


$parser = xml_parser_create();

xml_set_element_handler($parser, "begin_element", "end_element");
xml_set_character_data_handler($parser, "character_data");
$fp = fopen($rss_file,"r");

while ($data = fread($fp, 4096))
{
xml_parse($parser, $data, feof($fp));
}

fclose($fp);
xml_parser_free($parser);

echo '</body>
</html>';
?>


i want to make it like

$rss_file = 'link here';
$rss_file2 = 'link 2 here';


Can someone help me,i have no ideea about php scripting.
Thank you.

Simon Lloyd
07-20-2012, 08:06 AM
I haven't changed my core files, what i have done is add an rss link in each forums description like thishttp://www.mysite.com/forum/external.php?type=rss2&forumids=40

Popa Andrei
07-20-2012, 08:13 AM
well that wont be ussefull since i want to disaply data separate on the custom HTML page i have.

kh99
07-20-2012, 11:36 AM
Try this:

<?php
// ################################################## ####
// ## configuration
// ##
// ## $rss_file= 'http://www.vbulletin.com/forum/external.php?type=rss';
// ## Adjust this variable to point to your RSS feed

$rss_files[] = array(
array(url => 'link 1 here', max => 5),
array(url => 'link 2 here', max => 10),
);

// ## configuration end
// ################################################## ####
// ## Do not touch code below!

echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<style type="text/css">
A:link {text-decoration: none; color: #FB7800; font-weight:bold;}
A:visited {text-decoration: none; color: #FB7800; font-weight:bold;}
A:active {text-decoration: none; color: #FB7800; font-weight:bold;}
A:hover {text-decoration: underline; color: red; font-weight:bold;}
</style>
</head>
<body>';

function character_data($parser, $data)
{
global $is_item, $tag, $title, $description, $link , $date;
if ($is_item)
{
switch ($tag)
{
case "TITLE":
$title .= $data;
break;
case "DESCRIPTION":
$description .= $data;

break;
case "LINK":
$link .= $data;
break;

case "PUBDATE":
$date .= $data;
break;
}
}
}

function begin_element($parser, $name)
{
global $is_item, $tag;
if ($is_item)
{
$tag = $name;
}
else if ($name == "ITEM")
{
$is_item = true;
}
}

function end_element($parser, $name)
{
global $is_item, $title, $description, $link, $rss_output, $date;
if ($name == "ITEM")
{
global $item_count, $max_items;
$item_count++;
if ($item_count <= $max_items)
{
$rss_output .= "<table width='530' style='margin-left:auto; margin-right:auto; padding-bottom:10px;'>
<tr>
<td style='padding-left:15px;' align='left'><p><a href='".trim($link)."' target=\"_blank\">".htmlspecialchars(trim($title))."</a></p></td>
</tr>
<tr>
<td><p style='color:#95BEDA;'>Posted ".$date."</p></td>
</tr>
<tr>
<td><p style='color:#70CCA0'>" . htmlspecialchars(trim($description)) . "</p></td>
</tr>
</table>";
$title = "";
$description = "";
$link = "";
$date = "";
$is_item = false;
}
}
}


foreach ($rss_files AS $feed)
{
$max_items = $feed['max'];
$item_count = 0;
$is_item = false;
$tag = '';
$title = '';
$description = '';
$link = '';

$parser = xml_parser_create();

xml_set_element_handler($parser, "begin_element", "end_element");
xml_set_character_data_handler($parser, "character_data");
$fp = fopen($feed['url'],"r");

while ($data = fread($fp, 4096))
{
xml_parse($parser, $data, feof($fp));
}

fclose($fp);
xml_parser_free($parser);

// You might want to echo some html here if you want to separate the feeds.
// ex. echo '<br />';
}
echo '</body>
</html>';
?>

Popa Andrei
07-21-2012, 03:18 AM
tryed it but now it doesent display any data.
BTW this is how it output`s the feed
include_once ('rss.php');
echo $rss_output;

kh99
07-21-2012, 09:59 AM
Oh, sorry. Near the top, "$rss_files[] = array( " should be:

$rss_files = array(


The script you originally posted outputs some code using "echo" - if you're using this in a vb page then it looks like you'd probably just want to remove those parts.

Popa Andrei
07-21-2012, 01:17 PM
This is my current file

<?php
// ################################################## ####
// ## configuration
// ##
// ## $rss_file= 'http://www.vbulletin.com/forum/external.php?type=rss';
// ## Adjust this variable to point to your RSS feed

$rss_files[] = array(
url => 'http://forum.elitegamers.co/external.php?type=RSS2&forumids=18', max => 5,
url => 'http://forum.elitegamers.co/external.php?type=RSS2&forumids=48', max => 5
);

// ## configuration end
// ################################################## ####
// ## Do not touch code below!

echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<style type="text/css">
A:link {text-decoration: none; color: #FB7800; font-weight:bold;}
A:visited {text-decoration: none; color: #FB7800; font-weight:bold;}
A:active {text-decoration: none; color: #FB7800; font-weight:bold;}
A:hover {text-decoration: underline; color: red; font-weight:bold;}
</style>
</head>
<body>';

function character_data($parser, $data)
{
global $is_item, $tag, $title, $description, $link , $date;
if ($is_item)
{
switch ($tag)
{
case "TITLE":
$title .= $data;
break;
case "DESCRIPTION":
$description .= $data;

break;
case "LINK":
$link .= $data;
break;

case "PUBDATE":
$date .= $data;
break;
}
}
}

function begin_element($parser, $name)
{
global $is_item, $tag;
if ($is_item)
{
$tag = $name;
}
else if ($name == "ITEM")
{
$is_item = true;
}
}

function end_element($parser, $name)
{
global $is_item, $title, $description, $link, $rss_output, $date;
if ($name == "ITEM")
{
global $item_count, $max_items;
$item_count++;
if ($item_count <= $max_items)
{
$rss_output .= "<table width='530' style='margin-left:auto; margin-right:auto; padding-bottom:10px;'>
<tr>
<td style='padding-left:15px;' align='left'><p><a href='".trim($link)."' target=\"_blank\">".htmlspecialchars(trim($title))."</a></p></td>
</tr>
<tr>
<td><p style='color:#95BEDA;'>Posted ".$date."</p></td>
</tr>
<tr>
<td><p style='color:#70CCA0'>" . htmlspecialchars(trim($description)) . "</p></td>
</tr>
</table>";
$title = "";
$description = "";
$link = "";
$date = "";
$is_item = false;
}
}
}


foreach ($rss_files AS $feed)
{
$max_items = $feed['max'];
$item_count = 0;
$is_item = false;
$tag = '';
$title = '';
$description = '';
$link = '';

$parser = xml_parser_create();

xml_set_element_handler($parser, "begin_element", "end_element");
xml_set_character_data_handler($parser, "character_data");
$fp = fopen($feed['url'],"r");

while ($data = fread($fp, 4096))
{
xml_parse($parser, $data, feof($fp));
}

fclose($fp);
xml_parser_free($parser);

// You might want to echo some html here if you want to separate the feeds.
// ex. echo '<br />';
}
echo '</body>
</html>';
?>

And here the data is displayed http://cabal.elitegamers.co

As you may se in the page only the second rrs feed is loaded.
And i would like to display them separated like
echo $rss_output;
echo $rss_output2;


Thank you for your intereset in helping me untill now.I much appreciate it.

Popa Andrei
07-22-2012, 09:34 PM
bump

kh99
07-23-2012, 01:45 PM
The config part at the top should be:

$rss_files = array(
array('url' => 'http://forum.elitegamers.co/external.php?type=RSS2&forumids=18', 'max' => 5),
array('url' => 'http://forum.elitegamers.co/external.php?type=RSS2&forumids=48', 'max' => 5)
);



If you really want a separate variables for each feed it will require more changes, but you shouldn't really need that because if you want them separated in some way, you can add some html inside the loop.

Popa Andrei
07-23-2012, 10:31 PM
Well that worked.Thank you very much.
Now can you tell me how to separate them in the loop?
Thank you again.

kh99
07-23-2012, 10:42 PM
Well, what were you thinking about? Do you just want some space between them or do you want some type of header saying what the feed is?

Popa Andrei
07-23-2012, 10:45 PM
well if it could have some header saying this is news this is events it will be perfect.

kh99
07-24-2012, 02:09 AM
OK, you could do something like this:

<?php
// ################################################## ####
// ## configuration
// ##
// ## $rss_file= 'http://www.vbulletin.com/forum/external.php?type=rss';
// ## Adjust this variable to point to your RSS feed

$rss_files = array(
array('url' => 'http://forum.elitegamers.co/external.php?type=RSS2&forumids=18', 'max' => 5, 'title' => "News"),
array('url' => 'http://forum.elitegamers.co/external.php?type=RSS2&forumids=48', 'max' => 5, 'title' => "Events")
);

// ## configuration end
// ################################################## ####
// ## Do not touch code below!

echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<style type="text/css">
A:link {text-decoration: none; color: #FB7800; font-weight:bold;}
A:visited {text-decoration: none; color: #FB7800; font-weight:bold;}
A:active {text-decoration: none; color: #FB7800; font-weight:bold;}
A:hover {text-decoration: underline; color: red; font-weight:bold;}
</style>
</head>
<body>';

function character_data($parser, $data)
{
global $is_item, $tag, $title, $description, $link , $date;
if ($is_item)
{
switch ($tag)
{
case "TITLE":
$title .= $data;
break;
case "DESCRIPTION":
$description .= $data;

break;
case "LINK":
$link .= $data;
break;

case "PUBDATE":
$date .= $data;
break;
}
}
}

function begin_element($parser, $name)
{
global $is_item, $tag;
if ($is_item)
{
$tag = $name;
}
else if ($name == "ITEM")
{
$is_item = true;
}
}

function end_element($parser, $name)
{
global $is_item, $title, $description, $link, $rss_output, $date;
if ($name == "ITEM")
{
global $item_count, $max_items;
$item_count++;
if ($item_count <= $max_items)
{
$rss_output .= "<table width='530' style='margin-left:auto; margin-right:auto; padding-bottom:10px;'>
<tr>
<td style='padding-left:15px;' align='left'><p><a href='".trim($link)."' target=\"_blank\">".htmlspecialchars(trim($title))."</a></p></td>
</tr>
<tr>
<td><p style='color:#95BEDA;'>Posted ".$date."</p></td>
</tr>
<tr>
<td><p style='color:#70CCA0'>" . htmlspecialchars(trim($description)) . "</p></td>
</tr>
</table>";
$title = "";
$description = "";
$link = "";
$date = "";
$is_item = false;
}
}
}

$rss_output = "";
foreach ($rss_files AS $feed)
{
$rss_output .= "<table width='530' style='margin-left:auto; margin-right:auto; padding-bottom:10px;'>
<tr><td align='left'>{$feed['title']}</td></tr></table>";
$max_items = $feed['max'];
$item_count = 0;
$is_item = false;
$tag = '';
$title = '';
$description = '';
$link = '';

$parser = xml_parser_create();

xml_set_element_handler($parser, "begin_element", "end_element");
xml_set_character_data_handler($parser, "character_data");
$fp = fopen($feed['url'],"r");

while ($data = fread($fp, 4096))
{
xml_parse($parser, $data, feof($fp));
}

fclose($fp);
xml_parser_free($parser);

$rss_output .= "<BR/>";
}
echo $rss_output;
echo '</body>
</html>';
?>


I just took the table tags from the end_element function, but if you want it to look different you'll have to figure out the html for it (and change the "$rss_output = " line at the beginning of the foreach loop).

Popa Andrei
07-24-2012, 10:36 PM
Thank you very much.I will try to improve now the visual of it.

--------------- Added 1343173125 at 1343173125 ---------------

But one problem,if you look here http://cabal.elitegamers.co/
the [Ended] Boss/drop event show more post dates.How do i fix that?

kh99
07-24-2012, 10:52 PM
In the foreach loop, change:

$link = '';

$parser = xml_parser_create();


to

$link = '';
$date = '';

$parser = xml_parser_create();


(add the $date = ''; after the $link line).

Popa Andrei
07-25-2012, 10:43 AM
Fixed.
Now another thig is that [Ended] Boss/drop event is created before the [In progress] New Advertise banner for EGCabal Online post and its closed to.Why it appears as the first and current one?

kh99
07-25-2012, 10:59 AM
That's the order they are in the feed, and the post date of the first [ended] one is later than the [in progress] one, so I'm not sure what you can do about that.

Popa Andrei
07-26-2012, 12:13 PM
o ok.Thank you very much.