root/dev/mods/feed_syndication/feed_fetcher.php @ 152

Revision 152, 5.1 KB (checked in by liq, 14 years ago)

liq's feed syndication mod 1.3

Line 
1<?php
2        //////
3//////  //////
4//////  liq's feed syndication mod v1.3
5////////////
6////////////
7////////////
8////////////
9 
10
11@set_time_limit(0);
12require_once( "common/class.kill.php" );
13require_once( "common/class.parser.php" );
14if ( file_exists("../../common/class.comments.php") ) // for the Eve-Dev Comment Class
15        require_once( "class.comments.php" );
16if ( file_exists("../../common/class.comment.php") ) // for the D2 Killboard Comment Class
17        require_once( "class.comment.php" );
18
19$insideitem = false;
20$tag = "";
21$title = "";
22$description = "";
23$link = "";
24$x=0;
25
26function setConfig($key, $value) {
27    global $config;
28    if (method_exists($config, 'setConfig'))
29        return $config->setConfig($key, $value);
30    $qry = new DBQuery();
31    $qry->execute("select cfg_value from kb3_config
32                   where cfg_key = '".$key."' and cfg_site = '".KB_SITE."'");
33    if ($qry->recordCount())
34        $sql = "update kb3_config set cfg_value = '".$value."'
35                where cfg_site = '".KB_SITE."' and cfg_key = '".$key."'";
36    else
37        $sql = "insert into kb3_config values ( '".KB_SITE."','".$key."','".$value."' )";
38    $qry->execute($sql);
39}
40
41function getConfig($key) {
42    global $config;
43    if (method_exists($config, 'getConfig'))
44        return $config->getConfig($key);
45    $qry = new DBQuery();
46    $qry->query("select ".$key." from kb3_config where cfg_site = '".KB_SITE."'");
47    $row = $qry->getRow();
48    if (isset($row[$key]))
49        return $row[$key];
50    return false;
51}
52
53function delConfig($key) {
54    global $config;
55    $qry = new DBQuery();
56    $qry->execute("delete from kb3_config where cfg_key = '".$key."' and cfg_site = '".KB_SITE."'");
57}
58
59class Fetcher {
60
61function grab($url, $str) {
62                global $x, $uurl;
63                $x=0;
64                $fetchurl = $url.$str;
65                $uurl = $url;
66        $xml_parser = xml_parser_create();
67                xml_set_object ( $xml_parser, $this );
68                xml_set_element_handler($xml_parser, "startElement", "endElement");
69                xml_set_character_data_handler ( $xml_parser, 'characterData' );
70                $fp = @fopen($fetchurl,"r"); 
71                while ($chunk = @fread($fp, 4096)) {
72                        $data .= $chunk;
73                }
74                $data = preg_replace('<<!--.*?-->>', '', $data); // remove <!-- Cached --> message, else it will break gzinflate
75               
76                if (!@gzinflate($data)) {
77                        $cprs = "raw HTML stream";
78                } else { 
79                        $data = gzinflate($data);
80                        $cprs = "GZip compressed stream";
81                }       
82               
83                if (!xml_parse( $xml_parser, $data, feof($fp) ) && !feof($fp) )
84                        return "<i>Error getting XML data from ".$url."</i><br><br>";           
85                       
86                @fclose($fp);
87                xml_parser_free($xml_parser);
88               
89                if ($x)
90                        $html .= "<div class=block-header2>".$x." kills added from feed: ".$url." <i>(".$cprs.")</i></div>";
91                else
92                        $html .= "<div class=block-header2>No kills added from feed: ".$url." <i>(".$cprs.")</i></div>";
93                //echo "url:".$url." --- ";
94                //echo " strg:".$str;
95               
96return $html;
97}
98
99function startElement($parser, $name, $attrs) {
100        global $insideitem, $tag, $title, $description, $link;
101        if ($insideitem)
102                $tag = $name;
103        elseif ($name == "ITEM")
104                $insideitem = true;
105}
106
107function endElement($parser, $name) {
108        global $insideitem, $tag, $title, $description, $link, $html, $x, $uurl;
109
110        if ($name == "ITEM") {
111                if ( isset( $description ) ) {
112                        $parser = new Parser( $description );
113                $killid = $parser->parse( true );
114                if ( $killid == 0 || $killid == -1 || $killid == -2 ) {
115                                if ( $killid == 0 && getConfig('fetch_verbose') )
116                        $html .= "Killmail is malformed.<br>";
117                        if ( $killid == -2 && getConfig('fetch_verbose') )
118                            $html .= "Killmail is not related to ".KB_TITLE.".<br>";
119                                if ( $killid == -1 && getConfig('fetch_verbose') )
120                                    $html .= "Killmail already posted <a href=\"?a=kill_detail&kll_id=".$parser->dupeid_."\">here</a>.<br>";
121                        }
122                        else {
123                                $qry = new DBQuery();
124                                $qry->execute( "insert into kb3_log     values( ".$killid.", '".KB_SITE."','".$_SERVER['REMOTE_ADDR']."',now() )" );
125                                $html .= "Killmail succsessfully posted <a href=\"?a=kill_detail&kll_id=".$killid."\">here</a>.<br>";
126
127                                if (class_exists('Comments') && getConfig('fetch_comment')) { // for the Eve-Dev Comment Class
128                                        $comments = new Comments($killid);
129                        $comments->addComment("liq's feed syndication", getConfig('fetch_comment')." mail fetched from: ".$uurl.")");
130                                }
131                                if (class_exists('Comment') && getConfig('fetch_comment')) { // for the D2 Killboard Comment Class
132                                        $comment = new Comment($killid);
133                        $comment->postComment(getConfig('fetch_comment')." \n\n\n <i>mail fetched from:\n ".$uurl."</i>", "liquidism");
134                                }
135                                $x++;
136                        }
137        }
138                $title = "";
139                $description = "";
140                $link = "";
141                $insideitem = false;
142        }
143}
144
145function characterData($parser, $data) {
146        global $insideitem, $tag, $title, $description, $link;
147        if ($insideitem) {
148                switch ($tag) {
149                        case "TITLE":
150                        $title .= $data;
151                        break;
152                        case "DESCRIPTION":
153                        $description .= $data;
154                        break;
155                        case "LINK":
156                        $link .= $data;
157                        break;
158                }
159        }
160}
161
162}
163
164?>
Note: See TracBrowser for help on using the browser.