vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=252)
-   -   RSS reader to display more the 1 forum RSS feed (https://vborg.vbsupport.ru/showthread.php?t=285746)

Popa Andrei 07-20-2012 07:23 AM

RSS reader to display more the 1 forum RSS feed
 
PHP Code:

<?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($fp4096))
{
    
xml_parse($parser$datafeof($fp));        
}
    
fclose($fp);
xml_parser_free($parser);

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


i want to make it like

PHP Code:

$rss_file 'link here';
[
COLOR="Red"]$rss_file2 'link  2 here';[/COLOR


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 this
HTML Code:

http://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 Code:

<?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($fp4096))
    {
        
xml_parse($parser$datafeof($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
PHP Code:

include_once ('rss.php');
echo 
$rss_output


kh99 07-21-2012 09:59 AM

Oh, sorry. Near the top, "$rss_files[] = array( " should be:

Code:

$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 Code:

<?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($fp4096)) 
    { 
        
xml_parse($parser$datafeof($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
PHP Code:

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:

Code:

$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:

Code:

<?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 [DATE]1343173125[/DATE] at [TIME]1343173125[/TIME] ---------------

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:

Code:

    $link = '';

    $parser = xml_parser_create();

to

Code:

    $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.


All times are GMT. The time now is 04:51 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01273 seconds
  • Memory Usage 1,916KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (5)bbcode_code_printable
  • (1)bbcode_html_printable
  • (6)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (18)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete