Changeset 438

Show
Ignore:
Timestamp:
07/31/09 05:44:29 (11 years ago)
Author:
kovell
Message:

Fixes: pagesplitter creates correct links for 1000+ pages. Feed fetcher caches feeds in case of timeouts.

Location:
dev/common
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • dev/common/admin/feed_fetcher.php

    r404 r438  
    6464                                substr_replace($fetchurl,'?', strpos($fetchurl,'&'),0); 
    6565                $uurl = $url; 
     66                // only lists fetched with lastkllid are ordered by id. 
     67                if(strpos($fetchurl, 'lastkllid')) $this->idordered = true; 
     68                else $this->idordered = false; 
     69                $this->feedfilename = 'cache/data/feed'.md5($uurl).'.xml'; 
    6670                $xml_parser = xml_parser_create("UTF-8"); 
    6771                xml_set_object ( $xml_parser, $this ); 
     
    6973                xml_set_character_data_handler ( $xml_parser, 'characterData' ); 
    7074 
    71                 include_once('common/includes/class.http.php'); 
    72  
    73                 $http = new http_request($fetchurl); 
    74                 $http->set_useragent("EDK Feedfetcher ".$feedversion); 
    75                 $http->set_timeout(120); 
    76                 $http->set_cookie('PHPSESSID', 'a2bb4a7485eaba91b9d8db6aafd8ec5d'); 
    77                 $data = $http->get_content(); 
    78 //              $data = trim(preg_replace('<<!--.*?-->>', '', $data)); // remove <!-- Cached --> message, else it will break gzinflate 
    79                 $data = preg_replace('<<!--.*?-->>', '', $data); // remove <!-- Cached --> message, else it will break gzinflate 
    80                 if (!@gzinflate($data)) 
    81                 { 
    82                         $cprs = "raw HTML stream"; 
    83                 } else 
    84                 { 
    85                         $data = gzinflate($data); 
    86                         $cprs = "GZip compressed stream"; 
    87                 } 
    88  
     75                if(file_exists($this->feedfilename)) 
     76                { 
     77            // Give up trying to parse the cached file after a day. 
     78            if (time() - filemtime($this->feedfilename) > 24 * 60 * 60 ) 
     79                        { 
     80                                unlink($this->feedfilename); 
     81                                @unlink($this->feedfilename.'.stat'); 
     82                                @unlink($this->feedfilename.'.tstat'); 
     83                        } 
     84                } 
     85                if(!file_exists($this->feedfilename)) 
     86                { 
     87                        include_once('common/includes/class.http.php'); 
     88 
     89                        $http = new http_request($fetchurl); 
     90                        $http->set_useragent("EDK Feedfetcher ".$feedversion); 
     91                        $http->set_timeout(120); 
     92                        $http->set_cookie('PHPSESSID', 'a2bb4a7485eaba91b9d8db6aafd8ec5d'); 
     93                        $data = $http->get_content(); 
     94        //              $data = trim(preg_replace('<<!--.*?-->>', '', $data)); // remove <!-- Cached --> message, else it will break gzinflate 
     95                        $data = preg_replace('<<!--.*?-->>', '', $data); // remove <!-- Cached --> message, else it will break gzinflate 
     96                        if (!@gzinflate($data)) 
     97                        { 
     98                                $cprs = "raw HTML stream"; 
     99                        } else 
     100                        { 
     101                                $data = gzinflate($data); 
     102                                $cprs = "GZip compressed stream"; 
     103                        } 
     104                        file_put_contents($this->feedfilename, $data); 
     105                } 
     106                else 
     107                { 
     108                        $data = file_get_contents($this->feedfilename); 
     109                        if(file_exists($this->feedfilename.'.stat')) 
     110                        { 
     111                                $this->tracklast_ = intval(file_get_contents($this->feedfilename.'.stat')); 
     112                                $this->tracktime_ = 0; 
     113                        } 
     114                        elseif(file_exists($this->feedfilename.'.tstat')) 
     115                        { 
     116                                $this->tracklast_ = 0; 
     117                                $this->tracktime_ = intval(file_get_contents($this->feedfilename.'.tstat')); 
     118                        } 
     119                        else 
     120                        { 
     121                                $this->tracklast_ = 0; 
     122                                $this->tracktime_ = 0; 
     123                        } 
     124                } 
    89125                if (!xml_parse($xml_parser, $data, true)) 
     126                { 
     127                        unlink($this->feedfilename); 
     128                        @unlink($this->feedfilename.'.stat'); 
     129                        @unlink($this->feedfilename.'.tstat'); 
    90130                        return "<i>Error getting XML data from ".$fetchurl."</i><br><br>"; 
     131                } 
    91132 
    92133                xml_parser_free($xml_parser); 
    93  
     134                unlink($this->feedfilename); 
     135                @unlink($this->feedfilename.'.stat'); 
     136                @unlink($this->feedfilename.'.tstat'); 
     137                 
    94138                if (config::get('fetch_verbose') ) 
    95139                { 
     
    98142                        else 
    99143                                $html .= "<div class=block-header2>No kills added from feed: ".$url."<br>".$str." <i><br>(".$cprs.")</i><br><br></div>"; 
    100                 } else 
     144                } 
     145                else 
    101146                { 
    102147                        if ($x) 
     
    126171                if ($name == "ITEM") 
    127172                { 
    128                         if ( isset( $description ) ) 
    129                         { 
    130                                 //Check age of mail 
    131                                 if(config::get('filter_apply')) 
     173                        if ( isset( $description )) 
     174                        { 
     175                                $description = trim(str_replace("\r", '', $description)); 
     176                                $year = substr($description, 0, 4); 
     177                                $month = substr($description, 5, 2); 
     178                                $day = substr($description, 8, 2); 
     179                                $killstamp = mktime(0, 0, 0, $month, $day, $year); 
     180                                if ( $this->idordered && $this->tracklast_ > intval($title)) 
    132181                                { 
    133                                         $filterdate = config::get('filter_date'); 
    134                                         $year = substr($description, 0, 4); 
    135                                         $month = substr($description, 5, 2); 
    136                                         $day = substr($description, 8, 2); 
    137                                         $killstamp = mktime(0, 0, 0, $month, $day, $year); 
    138                                         if ($killstamp < $filterdate) $killid = -4; 
     182                                        $html .= "Killmail ".intval($title)." already processed <br>"; 
    139183                                } 
    140                                 if(config::get('filter_apply') && $killid == -4); 
    141                                 // If the kill has an external id then check if it is already 
    142                                 // on this board. 
    143                                 elseif($apiID = intval($apiID)) 
     184                                elseif (!$this->idordered && $this->tracktime_ > $killstamp) 
    144185                                { 
    145                                         $qry = new DBQuery(); 
    146                                         $qry->execute("SELECT 1 FROM kb3_kills WHERE kll_external_id = ".$apiID); 
    147                                         if(!$qry->recordCount()) 
    148                                         { 
    149                                                 $parser = new Parser( $description ); 
    150                                                 $killid = $parser->parse( true ); 
    151                                         } 
    152                                         else $killid = -3; 
    153                                 } 
    154                                 elseif(!$apikills) 
    155                                 { 
    156                                         $parser = new Parser( $description ); 
    157                                         $killid = $parser->parse( true ); 
    158                                 } 
    159                                 if($this->trackkey_ != '' && $this->tracklast_ < intval($title) && intval($title) > 0) 
    160                                 { 
    161                                         if($apikills) 
    162                                                 config::set($this->trackkey_, $uurl . ':::' . intval($title) . ':::' . $this->trackfriend_ . ':::on' ); 
    163                                         else 
    164                                                 config::set($this->trackkey_, $uurl . ':::' . intval($title) . ':::' . $this->trackfriend_ . ':::' ); 
    165                                 } 
    166                                 if ( $killid <= 0 ) 
    167                                 { 
    168                                         if ( $killid == 0 && config::get('fetch_verbose') ) 
    169                                                 $html .= "Killmail is malformed. ".$uurl." Kill ID = ".$title." <br>"; 
    170                                         if ( $killid == -1 && config::get('fetch_verbose') ) 
    171                                                 $html .= "Killmail already posted <a href=\"?a=kill_detail&amp;kll_id=".$parser->dupeid_."\">here</a>.<br>"; 
    172                                         if ( $killid == -2 && config::get('fetch_verbose') ) 
    173                                                 $html .= "Killmail is not related to ".KB_TITLE.".<br>"; 
    174                                         if ( $killid == -3 && config::get('fetch_verbose') ) 
    175                                                 $html .= "Killmail already posted <a href=\"?a=kill_detail&amp;kll_external_id=".$apiID."\">here</a>.<br>"; 
    176                                         if ( $killid == -4 && config::get('fetch_verbose') ) 
    177                                                 $html .= "Killmail too old to post with current settings.<br>"; 
     186                                        $html .= "Killmail ".intval($title)." already processed. <br>"; 
    178187                                } 
    179188                                else 
    180189                                { 
    181                                         $qry = new DBQuery(); 
    182                                         if(strpos($uurl, '?')) $logurl = substr(substr($uurl,7,strpos($uurl, '?') - 7), 0, 20); 
    183                                         else $logurl = substr($uurl,7,20); 
    184                                         $qry->execute( "insert into kb3_log (log_kll_id, log_site, log_ip_address, log_timestamp) values( ". 
    185                                                 $killid.", '".KB_SITE."','".$logurl."',now() )" ); 
    186                                         $html .= "Killmail successfully posted <a href=\"?a=kill_detail&kll_id=".$killid."\">here</a>.<br>"; 
    187  
    188                                         if (config::get('fetch_comment')) 
    189                                         {  
    190                                                 $comments = new Comments($killid); 
    191                                                 $comments->addComment("Feed Syndication", config::get('fetch_comment')." mail fetched from: ".$uurl.")"); 
    192                                         } 
    193                                         $x++; 
     190                                        //Check age of mail 
     191                                        if(config::get('filter_apply')) 
     192                                        { 
     193                                                $filterdate = config::get('filter_date'); 
     194                                                if ($killstamp < $filterdate) $killid = -4; 
     195                                        } 
     196                                        if(config::get('filter_apply') && $killid == -4); 
     197                                        // If the kill has an external id then check if it is already 
     198                                        // on this board. 
     199                                        elseif($apiID = intval($apiID)) 
     200                                        { 
     201                                                $qry = new DBQuery(); 
     202                                                $qry->execute("SELECT 1 FROM kb3_kills WHERE kll_external_id = ".$apiID); 
     203                                                if(!$qry->recordCount()) 
     204                                                { 
     205                                                        $parser = new Parser( $description ); 
     206                                                        $killid = $parser->parse( true ); 
     207                                                } 
     208                                                else $killid = -3; 
     209                                        } 
     210                                        elseif(!$apikills) 
     211                                        { 
     212                                                $parser = new Parser( $description ); 
     213                                                $killid = $parser->parse( true ); 
     214                                        } 
     215                                        if ( $killid <= 0 ) 
     216                                        { 
     217                                                if ( $killid == 0 && config::get('fetch_verbose') ) 
     218                                                        $html .= "Killmail ".intval($title)." is malformed. ".$uurl." Kill ID = ".$title." <br>"; 
     219                                                if ( $killid == -1 && config::get('fetch_verbose') ) 
     220                                                        $html .= "Killmail ".intval($title)." already posted <a href=\"?a=kill_detail&amp;kll_id=".$parser->dupeid_."\">here</a>.<br>"; 
     221                                                if ( $killid == -2 && config::get('fetch_verbose') ) 
     222                                                        $html .= "Killmail ".intval($title)." is not related to ".KB_TITLE.".<br>"; 
     223                                                if ( $killid == -3 && config::get('fetch_verbose') ) 
     224                                                        $html .= "Killmail ".intval($title)." already posted <a href=\"?a=kill_detail&amp;kll_external_id=".$apiID."\">here</a>.<br>"; 
     225                                                if ( $killid == -4 && config::get('fetch_verbose') ) 
     226                                                        $html .= "Killmail ".intval($title)." too old to post with current settings.<br>"; 
     227                                        } 
     228                                        else 
     229                                        { 
     230                                                $qry = new DBQuery(); 
     231                                                if(strpos($uurl, '?')) $logurl = substr($uurl,0,strpos($uurl, '?')).'?a=kill_detail&kll_id='.intval($title); 
     232                                                else $logurl = uurl.'?a=kill_detail&kll_id='.intval($title); 
     233                                                $qry->execute( "insert into kb3_log (log_kll_id, log_site, log_ip_address, log_timestamp) values( ". 
     234                                                        $killid.", '".KB_SITE."','".$logurl."',now() )" ); 
     235                                                $html .= "Killmail ".intval($title)." successfully posted <a href=\"?a=kill_detail&kll_id=".$killid."\">here</a>.<br>"; 
     236 
     237                                                if (config::get('fetch_comment')) 
     238                                                { 
     239                                                        $comments = new Comments($killid); 
     240                                                        $comments->addComment("Feed Syndication", config::get('fetch_comment')." mail fetched from: ".$uurl.")"); 
     241                                                } 
     242                                                $x++; 
     243                                        } 
     244                                        if( $this->idordered && intval($title) > 0) 
     245                                        { 
     246                                                $this->tracklast_ = intval($title); 
     247                                                file_put_contents($this->feedfilename.'.stat', strval(intval($title))); 
     248                                        } 
     249                                        elseif( !$this->idordered && $killstamp > 0) 
     250                                        { 
     251                                                $this->tracktime_ = $killstamp; 
     252                                                file_put_contents($this->feedfilename.'.tstat', strval($killstamp)); 
     253                                        } 
    194254                                } 
    195255                        } 
  • dev/common/includes/class.pagesplitter.php

    r370 r438  
    2222        if ($_GET['page']) 
    2323        { 
    24             $url = preg_replace("/&page=([0-9]?[0-9]?[0-9])/", "", 
     24            $url = preg_replace("/&page=([0-9]+)/", "", 
    2525                $_SERVER['QUERY_STRING']); 
    2626                        $url =preg_replace("/&/", "&amp;", $url);