root/dev/common/feed_fetcher.php @ 137

Revision 137, 4.1 KB (checked in by exi, 14 years ago)

Pimped the syndication module.

Line 
1<?php
2@set_time_limit(0);
3// liq's feed syndication mod v1.0
4require_once("class.page.php");
5require_once("class.kill.php");
6require_once("class.parser.php");
7
8$insideitem = false;
9$tag = "";
10$title = "";
11$description = "";
12$link = "";
13$x = 0;
14
15class Fetcher
16{
17    function generate($url, $lastkllid = 0)
18    {
19        global $x;
20
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');
25
26        $fp = @fopen($url, "r");
27        $file = '';
28        while ($data = fread($fp, 4096))
29        {
30            $file .= $data;
31        }
32        fclose($fp);
33
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);
43
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        }
52
53        return $html;
54    }
55
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    }
68
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    }
129}
130?>
Note: See TracBrowser for help on using the browser.