vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=252)
-   -   Modify RSS reader (https://vborg.vbsupport.ru/showthread.php?t=281575)

Popa Andrei 04-15-2012 03:26 AM

Modify RSS reader
 
I use this rss reader to get mi data from the forum
How do i modifie to show only the last 10 updates
Regards
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 'http://forum.elitegamers.co/external.php?type=RSS2&forumids=18';
    
// ## configuration end
// ######################################################
// ## Do not touch code below!
    
    
$is_item false;
$tag '';
$title '';
$description '';
$link '';
    
function 
character_data($parser$data)
{
    global 
$is_item$tag$title$description$link;
    if (
$is_item)
    {
        switch (
$tag)
        {
            case 
"TITLE":
            
$title .= $data;
            break;
            case 
"DESCRIPTION":
            
$description .= $data;
    
            break;
            case 
"LINK":
            
$link .= $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;
    if (
$name == "ITEM")
    {
        
$rss_output .= "<table width='530' style='margin-left:auto; margin-right:auto; padding-bottom:10px;'>
                            <tr>
                                <td style='padding-left:15px;' align='left'><p style='font-weight:bold;'><a style='color:#FB7800;' href='" 
trim($link) . "'>" htmlspecialchars(trim($title)) . "</a></p></td>
                            </tr>
                            <tr>
                                <td><p style='color:#70CCA0'>" 
htmlspecialchars(trim($description)) . "</p></td>
                            </tr>
                        </table>"
;
        
$title "";
        
$description "";
        
$link "";
        
$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);
?>


Popa Andrei 04-18-2012 08:46 AM

bump

kh99 04-18-2012 01:28 PM

Maybe add a couple lines (in red) near the top:

Code:

// ## configuration end
// ######################################################
// ## Do not touch code below!
   
$max_items = 10;
$item_count = 0;   
$is_item = false;
$tag = '';
$title = '';
$description = '';
$link = '';


then change function end_element like this:

Code:

function end_element($parser, $name)
{
    global $is_item, $title, $description, $link, $rss_output;
    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 style='font-weight:bold;'><a style='color:#FB7800;' href='" . trim($link) . "'>" . htmlspecialchars(trim($title)) . "</a></p></td>
                            </tr>
                            <tr>
                                <td><p style='color:#70CCA0'>" . htmlspecialchars(trim($description)) . "</p></td>
                            </tr>
                        </table>";
        }
        $title = "";
        $description = "";
        $link = "";
        $is_item = false;
    }
}


But this really only ignores everything after the first 10 items returned in the feed, which means that if there are more than 10 some are just going to be lost.

Popa Andrei 04-18-2012 03:29 PM

Thak you very much.
That worked perfect
You are mi saviour.

Popa Andrei 06-25-2012 11:57 PM

any ideea how to fecth and display in the html output the thread creation date and time?

kh99 06-26-2012 11:08 AM

You can edit the feed and put {feed:date} in the body template.

ETA: oops - I forgot we're talking about your custom reader script. Let me look at that...

OK, try this: Change function character_data() to:

Code:

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;

        }
    }
}


Then at the beginning of the end_element function:

Code:

function end_element($parser, $name)
{
    global $is_item, $title, $description, $link, $rss_output, $date;


then use $date in the html output. (I haven't tested this at all).

Popa Andrei 06-26-2012 01:02 PM

I changed the page to this but ain`t working.

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 'http://forum.elitegamers.co/external.php?type=RSS2&forumids=18';
    
// ## configuration end
// ######################################################
// ## Do not touch code below!
    
$max_items 12;
$item_count 0;    
$is_item false;
$tag '';
$title '';
$description '';
$link '';
    
function 
character_data($parser$data)
{
    global 
$is_item$tag$title$description$link;
    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 style='font-weight:bold;'><a style='color:#FB7800;' href='"
.trim($link)."'>".htmlspecialchars(trim($title))."".$date."</a></p></td>
                            </tr>
                            <tr>
                                <td><p style='color:#70CCA0'>" 
htmlspecialchars(trim($description)) . "</p></td>
                            </tr>
                        </table>"
;
        
$title "";
        
$description "";
        
$link "";
        
$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);
?>


kh99 06-26-2012 01:48 PM

There's one more part that I missed highlighting in red - at the beginning of character_data(), you need to add $date to the global statement.

Popa Andrei 06-26-2012 01:55 PM

1 Attachment(s)
Ty its working but i think it needs a little adjustements.
Look

kh99 06-26-2012 02:01 PM

Oh, right. At the bottom of the end_element() function, where there's $title = "", $description = "", etc, add $date = "";


All times are GMT. The time now is 12:03 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.01181 seconds
  • Memory Usage 1,801KB
  • 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
  • (4)bbcode_code_printable
  • (2)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)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
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete