root/dev/mods/value_fetch/fetcher.php @ 361

Revision 338, 5.4 KB (checked in by beans, 12 years ago)

+ MOD: Value fetcher
+ MOD: API_Mod (and class.eveapi.php in common/includes)
+ admin_troubleshooting and images

Line 
1<?php
2Class Fetcher
3{
4        var $faction;
5        var $xml_parser;
6        var $xml_file;
7        var $insideitem;
8        var $avg_sell;
9        var $avg_buy;
10        var $typeid;
11        var $count;
12        var $timestamp;
13        var $tooLow;
14        var $sell_median;
15        var $buy_median;
16        var $factionPrice;
17        var $compfile = "http://svn.nsbit.dk/itemfetch/items.xml.gzphp.php";
18        var $uncompfile = "http://svn.nsbit.dk/itemfetch/items.xml.php";
19
20        function updateShips()
21        {
22                $qry = new DBQuery();
23                $qryins = new DBQuery();
24                $str = "SELECT ship.shp_id as id, item.price as price FROM kb3_ships ship JOIN kb3_item_price item ON item.typeID = ship.shp_externalid WHERE item.price > 0";
25                $i = 0;
26                $qry->execute($str);
27                while ($row = $qry->getRow())
28                {
29                        $i++;
30                        $qryins->execute("REPLACE INTO kb3_ships_values (shp_id, shp_value) VALUES ('".$row['id']."','".$row['price']."')");
31                }
32                return $i;
33        }
34
35        // Some of this work is based of the value_editor from Eve-dev killboard
36        function fetch_values_php5($factionin) 
37        {
38                $this->faction = $factionin;
39                // Fetch the gzip file.
40                $file = fopen($this->compfile, r);
41                if (! $file) {
42                        return 0;
43                }
44                $content = stream_get_contents($file);
45                fclose($file);
46       
47                $content = gzinflate($content);
48                // Old style, direct, no gzip!
49                // $sxe = simplexml_load_file("http://svn.nsbit.dk/itemfetch/items.xml");
50                $sxe = new SimpleXMLElement($content);
51                // prepare counter
52                $i = 0;
53                // New query
54                $qry = new DBQuery();
55                foreach($sxe->market_stat as $stat)
56                {
57                        // If there is almost nothing for sale, AT ALL, don't include!
58                        //if ($stat->total_sell_volume < 5) continue;
59                        // Same average as used in value_editor (eve_central_sync)
60                        //$weighted_average = round(((1.6 * $stat->avg_buy_price + 0.8 * $stat->avg_sell_price) / 2),0);
61                        // Use global sell prices
62                        //$weighted_average = round($stat->avg_sell_price,0);
63                        // Use sell median
64                        if (($stat->sell_median != null) && ($stat->sell_median != 0))
65                                $weighted_average = round($stat->sell_median,0);
66                        else
67                                $weighted_average = round($stat->avg_sell_price,0);
68
69                        if (($this->faction == true) && ($stat->factionPrice > 0))
70                                $weighted_average = round($stat->factionPrice,0);
71                               
72                        // Insert into database, update values!
73                        $qry->execute("REPLACE INTO kb3_item_price (typeID, price) VALUES ('".$stat->typeid."','".number_format($weighted_average, 0, '', '')."')");
74                        $i++;
75                }
76       
77                return "Count: ".$i." <br><br>Cached on: ".date('H:i:s - j/m/Y',(int)($sxe->timestamp));
78        }
79
80        function fetch_values_php4($factionin)
81        {
82                $this->faction = $factionin;
83                $this->sell_median = null;
84                $this->buy_median = null;
85                $this->xml_parser = xml_parser_create();
86                xml_set_object($this->xml_parser, &$this);
87                // use case-folding so we are sure to find the tag in $map_array
88                //xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, true);
89                xml_set_element_handler($this->xml_parser, "startElement", "endElement");
90                xml_set_character_data_handler($this->xml_parser, "characterData");
91               
92                if (!($fp = fopen($this->uncompfile, "r"))) {
93                        die("could not open XML input");
94                }   
95
96                while ($data = fread($fp, 4096)) 
97                {
98                        if (!xml_parse($this->xml_parser, $data, feof($fp))) 
99                        {
100                                die(sprintf("XML error: %s at line %d",
101                                xml_error_string(xml_get_error_code($this->xml_parser)), xml_get_current_line_number($this->xml_parser)));
102                        }
103                }
104                return "Count: ".$this->count." <br><br>Cached on: ".date('H:i:s - j/m/Y',$this->timestamp);
105        }
106
107
108        function characterData($parser, $data)
109        {
110                switch($this->tag)
111                {
112                        case "timestamp":
113                                $this->timestamp .= $data;
114                                break;
115                        case "total_sell_volume":
116                                $this->tooLow .= $data;
117                                break;
118                        case "typeid":
119                                $this->typeid .= $data;
120                                break;
121                        case "avg_buy_price":
122                                $this->avg_buy .= $data;
123                                break;
124                        case "avg_sell_price":
125                                $this->avg_sell .= $data;
126                                break;
127                        case "buy_median":
128                                $this->buy_median .= $data;
129                                break;
130                        case "sell_median":
131                                $this->sell_median .= $data;
132                                break;
133                        case "factionprice":
134                                $this->factionPrice .= $data;
135                                break;
136                }
137        }
138
139
140        function startElement($parser, $name, $attrs)
141        {
142                if ($this->insideitem)
143                {
144                        $this->tag = strtolower($name);
145                }
146                elseif (strtolower($name) == "timestamp")
147                {
148                        $this->tag = strtolower($name);
149                }
150                elseif (strtolower($name) == "market_stat")
151                {
152                        $this->insideitem = true;
153                }
154        }
155
156        function endElement($parser, $name)
157        {
158                if ($this->insideitem && (strtolower($name) == "market_stat"))
159                { 
160                        if (true)//($this->tooLow > 4)
161                        { 
162                                $qry = new DBQuery();
163                                // Old average calculation
164                                //$weighted_average = round(((1.6 * $this->avg_buy + 0.8 * $this->avg_sell) / 2),0);
165                                // New average using sell only
166                                //$weighted_average = round($this->avg_sell_price,0);
167                                // Median prices, if exists
168                                if (($this->sell_median != null) && ($this->sell_median != 0))
169                                        $weighted_average = round($this->sell_median,0);
170                                else
171                                        $weighted_average = round($this->avg_sell,0);
172                                if (($this->faction == true) && ($this->factionPrice != null))
173                                {
174                                        $weighted_average = round($this->factionPrice,0);
175                                }
176                                $qry->execute("REPLACE INTO kb3_item_price (typeID, price) VALUES ('".$this->typeid."','".number_format($weighted_average, 0, '', '')."')");
177                                $this->count++;
178                        }
179                        $this->insideitem = false;
180                        $this->typeid = null;
181                        $this->avg_buy = null;
182                        $this->avg_sell = null;
183                        $this->tooLow = null;
184                        $this->buy_median = null;
185                        $this->sell_median = null;
186                        $this->factionPrice = null;
187                }
188        }
189
190        function destroy() 
191        {
192                xml_parser_free($this->xml_parser);
193        }
194}
195?>
Note: See TracBrowser for help on using the browser.