Show
Ignore:
Timestamp:
12/07/06 05:34:28 (14 years ago)
Author:
exi
Message:

Pimped the syndication module.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • dev/common/feed_fetcher.php

    r136 r137  
    11<?php 
     2@set_time_limit(0); 
    23// liq's feed syndication mod v1.0 
     4require_once("class.page.php"); 
     5require_once("class.kill.php"); 
     6require_once("class.parser.php"); 
    37 
    4   require_once( "class.page.php" ); 
    5   require_once( "class.kill.php" ); 
    6   require_once( "class.parser.php" ); 
    7    
    8     
    9 $insideitem = false;  
     8$insideitem = false; 
    109$tag = ""; 
    1110$title = ""; 
    1211$description = ""; 
    1312$link = ""; 
    14 $x=0; 
     13$x = 0; 
    1514 
    16 class Fetcher  
     15class Fetcher 
    1716{ 
    18   
    19 function generate($url) {  
    20                 global $x; 
    21                 @set_time_limit(0);   
    22         $xml_parser = xml_parser_create(); 
    23                 xml_set_object ( $xml_parser, $this ); 
    24                 xml_set_element_handler($xml_parser, "startElement", "endElement");        
    25                 xml_set_character_data_handler ( $xml_parser, 'characterData' );   
    26                 $fp = @fopen($url,"r"); 
    27                 while ($data = fread($fp, 4096)) { 
    28                         if (!xml_parse( $xml_parser, $data, feof($fp) ) && !feof($fp) ) 
    29                                 return "<i>Error getting XML data from ".$url."</i><br><br>"; 
    30                 } 
    31                 fclose($fp); 
    32                 xml_parser_free($xml_parser); 
    33                 if ($x) 
    34                         $html = "<div class=block-header2>".$x." kills added from feed: ".$url."</div>"; 
    35                 else 
    36                         $html = "<div class=block-header2>No kills added from feed: ".$url."</div>"; 
    37                  
    38 return $html;  
    39 } 
     17    function generate($url, $lastkllid = 0) 
     18    { 
     19        global $x; 
    4020 
    41 function startElement($parser, $name, $attrs) { 
    42         global $insideitem, $tag, $title, $description, $link; 
    43         if ($insideitem) { 
    44                 $tag = $name; 
    45         } elseif ($name == "ITEM") { 
    46                 $insideitem = true; 
    47         } 
    48 } 
     21        $xml_parser = xml_parser_create(); 
     22        xml_set_object($xml_parser, $this); 
     23        xml_set_element_handler($xml_parser, "startElement", "endElement"); 
     24        xml_set_character_data_handler ($xml_parser, 'characterData'); 
    4925 
    50 function endElement($parser, $name) { 
    51         global $insideitem, $tag, $title, $description, $link, $html, $x; 
     26        $fp = @fopen($url, "r"); 
     27        $file = ''; 
     28        while ($data = fread($fp, 4096)) 
     29        { 
     30            $file .= $data; 
     31        } 
     32        fclose($fp); 
    5233 
    53         if ($name == "ITEM") { 
    54                 if ( isset( $description ) ) { 
    55                         $parser = new Parser( $description ); 
    56                 $killid = $parser->parse( true ); 
    57                 if ( $killid == 0 || $killid == -1 || $killid == -2 || $killid == -3 ) { 
    58                         $page = new Page( "Error" ); 
    59                                 if ( $killid == 0 ) 
    60                                 $html .= "Killmail is malformed.<br>"; 
    61                                 if ( $killid == -3 ) 
    62                                 $html .= "Killmail does not have a final blow! <p><br>To prevent the corruption of the database please just fake a <i>(laid the final blow)</i> behind one of the involved players on the killmail.<br><br><b>Example:</b><i><br>Name: liquidism (laid the final blow)</i></p>"; 
    63                         if ( $killid == -2 ) 
    64                                         $html .= "Killmail is not related to ".KB_TITLE.".<br>"; 
    65                                 if ( $killid == -1 ) 
    66                                         $html .= "Killmail already posted <a href=\"?a=kill_detail&kll_id=".$parser->dupeid_."\">here</a>.<br>"; 
    67                         }                
    68                         else { 
    69                                 $qry = new DBQuery(); 
    70                                 $qry->execute( "insert into kb3_log     values( ".$killid.", '".KB_SITE."','".$_SERVER['REMOTE_ADDR']."',now() )" ); 
    71                                 $html .= "Killmail has succsessfully been posted <a href=\"?a=kill_detail&kll_id=".$killid."\">here</a>.<br>";                   
    72                                 $x++; 
    73                         } 
    74         } 
    75                 $title = ""; 
    76                 $description = "";  
    77                 $link = ""; 
    78                 $insideitem = false; 
    79         } 
    80 } 
     34        if (!$file && file_exists('class.http.php')) 
     35        { 
     36            include_once('class.http.php'); 
     37            $file = new http($url); 
     38            $file = $file->get_content(); 
     39        } 
     40        if (!xml_parse($xml_parser, $file)) 
     41            return "<i>Error getting XML data from ".$url."</i><br><br>"; 
     42        xml_parser_free($xml_parser); 
    8143 
    82 function characterData($parser, $data) { 
    83         global $insideitem, $tag, $title, $description, $link; 
    84         if ($insideitem) { 
    85                 switch ($tag) { 
    86                         case "TITLE": 
    87                         $title .= $data; 
    88                         break; 
    89                         case "DESCRIPTION": 
    90                         $description .= $data; 
    91                         break; 
    92                         case "LINK": 
    93                         $link .= $data; 
    94                         break; 
    95                 } 
    96         } 
    97 } 
     44        if ($x) 
     45        { 
     46            $html = "<div class=block-header2>".$x." kills added from feed: ".$url."</div>"; 
     47        } 
     48        else 
     49        { 
     50            $html = "<div class=block-header2>No kills added from feed: ".$url."</div>"; 
     51        } 
    9852 
     53        return $html; 
     54    } 
    9955 
     56    function startElement($parser, $name, $attrs) 
     57    { 
     58        global $insideitem, $tag, $title, $description, $link; 
     59        if ($insideitem) 
     60        { 
     61            $tag = $name; 
     62        } 
     63        elseif ($name == "ITEM") 
     64        { 
     65            $insideitem = true; 
     66        } 
     67    } 
    10068 
     69    function endElement($parser, $name) 
     70    { 
     71        global $insideitem, $tag, $title, $description, $link, $html, $x, $lastkllid; 
     72 
     73        if ($name == "ITEM") 
     74        { 
     75            if (isset($description)) 
     76            { 
     77                $parser = new Parser($description); 
     78                $killid = $parser->parse(true); 
     79                if ($killid == 0 || $killid == -1 || $killid == -2 || $killid == -3) 
     80                { 
     81                    $page = new Page("Error"); 
     82                    if ($killid == 0) 
     83                        $html .= "Killmail is malformed.<br>"; 
     84                    if ($killid == -3) 
     85                        $html .= "Killmail does not have a final blow! <p><br>To prevent the corruption of the database please just fake a <i>(laid the final blow)</i> behind one of the involved players on the killmail.<br><br><b>Example:</b><i><br>Name: liquidism (laid the final blow)</i></p>"; 
     86                    if ($killid == -2) 
     87                        $html .= "Killmail is not related to ".KB_TITLE.".<br>"; 
     88                    if ($killid == -1) 
     89                        $html .= "Killmail already posted <a href=\"?a=kill_detail&kll_id=".$parser->dupeid_."\">here</a>.<br>"; 
     90                } 
     91                else 
     92                { 
     93                    $qry = new DBQuery(); 
     94                    $qry->execute("insert into kb3_log  values( ".$killid.", '".KB_SITE."','".$_SERVER['REMOTE_ADDR']."',now() )"); 
     95                    $html .= "Killmail has succsessfully been posted <a href=\"?a=kill_detail&kll_id=".$killid."\">here</a>.<br>"; 
     96                    $x++; 
     97                } 
     98            } 
     99            if (trim($title) > $lastkllid || $lastkllid == 0) 
     100            { 
     101                $lastkllid = trim($title); 
     102            } 
     103            $title = ""; 
     104            $description = ""; 
     105            $link = ""; 
     106            $insideitem = false; 
     107        } 
     108    } 
     109 
     110    function characterData($parser, $data) 
     111    { 
     112        global $insideitem, $tag, $title, $description, $link; 
     113        if ($insideitem) 
     114        { 
     115            switch ($tag) 
     116            { 
     117                case "TITLE": 
     118                    $title .= $data; 
     119                    break; 
     120                case "DESCRIPTION": 
     121                    $description .= $data; 
     122                    break; 
     123                case "LINK": 
     124                    $link .= $data; 
     125                    break; 
     126            } 
     127        } 
     128    } 
    101129} 
    102130?>