Avatar billede breon Nybegynder
22. august 2012 - 22:09 Der er 4 kommentarer og
1 løsning

Uregelmæssig fejl med SimpleXMLElement

Jeg forsøger at trække nogle vejr-oplysninger ud af Googles API vha. xml. Dertil har jeg fundet et script på nettet der ser således ud:

---

<?php
$ch = curl_init();
$timeout = 0;

//Set CURL options
curl_setopt ($ch, CURLOPT_URL, 'http://www.google.com/ig/api?weather=pothia,greece&oe=utf-8&hl=da');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

$xml_str1 = curl_exec($ch);

//close CURL cause we dont need it anymore
curl_close($ch);

        // Parse the XML response
        $xml = new SimplexmlElement($xml_str);
        foreach($xml->weather as $item) {

                foreach($item->current_conditions as $new) {
                       
                        //For temperature in fahrenheit replace temp_c by temp_f
                        $current_temperature=$new->temp_c['data'];
                        $current_humidity=$new->humidity['data'];
                        $current_wind=$new->wind_condition['data'];
                        $current_icon=$new->icon['data'];
                }

                $current_condition=$item->forecast_conditions[0]->condition['data'];           
                $next_temperature=$item->forecast_conditions[1]->high['data'];

                //to convert Fahrenheit into Celcius
                $next_temperature=round(($next_temperature-32)*(5/9));

                $next_condition=$item->forecast_conditions[1]->condition['data'];
        }

$weather_icon = "http://www.google.com$current_icon";
?>

---

Det virker for det meste OK, men nogle gange får jeg denne fejl når siden reloades:

---

Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xA0 0x25 0x22 0x2F in C:\XAMMP\xampp\htdocs\Google\weather_inc.php on line 17

Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: ata="Klart"/><temp_f data="77"/><temp_c data="25"/><humidity data="Fugtighed: 78 in C:\XAMMP\xampp\htdocs\Google\weather_inc.php on line 17

Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: ^ in C:\XAMMP\xampp\htdocs\Google\weather_inc.php on line 17

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\XAMMP\xampp\htdocs\Google\weather_inc.php:17 Stack trace: #0 C:\XAMMP\xampp\htdocs\Google\weather_inc.php(17): SimpleXMLElement->__construct('<?xml version="...') #1 C:\XAMMP\xampp\htdocs\Google\Google-rejsetips-a-h.php(1): include('C:\XAMMP\xampp\...') #2 {main} thrown in C:\XAMMP\xampp\htdocs\Google\weather_inc.php on line 17

---

Jeg er ikke super stærk til hverken PHP eller XML, så jeg kan ikke helt gennemskue hvorfor problemet opstår (og hvorfor det kun er nogle gange).

Nogen der kan hjælpe?
Avatar billede breon Nybegynder
22. august 2012 - 22:16 #1
Der var lige en stavefejl i min kode.

$xml_str1 = curl_exec($ch);

skulle have været

$xml_str = curl_exec($ch);


Men det løse ikke problemet.
Avatar billede olsensweb.dk Ekspert
23. august 2012 - 10:25 #2
Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xA0 0x25 0x22 0x2F in C:\XAMMP\xampp\htdocs\Google\weather_inc.php on line 17

$xml = new SimplexmlElement($xml_str);
bør vel uft8 incodes når du kører dansk
$xml = new SimpleXMLElement(utf8_encode($xml_str)); det problem er også omtalt her  http://www.phpclasses.org/discuss/package/5998/thread/1/


coden findes også her
http://www.codingforums.com/archive/index.php/t-221044.html 
http://www.dynamicguru.com/php/weather-forecast-script-in-php-using-google-weather-api/
http://pastebin.com/xwut7bmg

de har så en anden timeout
Avatar billede breon Nybegynder
23. august 2012 - 17:14 #3
Det løste desværre ikke problemet. Men jeg kan da afprøve den PHP klasse i stedet.
Avatar billede breon Nybegynder
26. august 2012 - 21:09 #4
Nu har jeg testet adskillige scripts fra nettet der alle viste vejret vha. Googles API og de producerer alle den samme fejlbesked.

Eftersom fejlen ikke opstår hver gang, tænker jeg at det må en begrænsning på hvor ofte man kan hente data fra Google?
Avatar billede breon Nybegynder
12. september 2012 - 19:57 #5
Nåh.. jeg prøvede at få vist vejret på denne side http://kalymnosinfo.dk, men det ser ud til at Google har taget livet af deres weather API.

Så må jeg jo klare mig uden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester