I have created an Element for my project which loads the Google Weather API. Locally it works perfectly. The problem appeared when I uploaded it and when I gave it to a friend of mine to try it.
The code for the element is the following one
<?php
Configure::write('debug', 2);
$xml = simplexml_load_file('http://www.google.com/ig/api?weather=name_city');
$information = $xml->xpath("/xml_api_reply/weather/forecast_information");
$current = $xml->xpath("/xml_api_reply/weather/current_conditions");
$forecast_list = $xml->xpath("/xml_api_reply/weather/forecast_conditions");
?>
<html>
<head>
<title>Google Weather API</title>
</head>
<body>
<h1><?= print $information[0]->city['data']; ?></h1>
<h2>Today's weather</h2>
<div class="weather">
<?php $icon_today = (string) $current[0]->condition['data'];?>
<?php echo $this->Html->image('tick/'.$icon_today.'.png');?>
<span class="condition">
<?= $current[0]->temp_c['data'] ?>° C,
</span>
</div>
<h2>Forecast</h2>
<? foreach ($forecast_list as $forecast) : ?>
<div class="weather">
<?php $icon = (string) $forecast->condition['data'];?>
<?php echo $this->Html->image('tick/'.$icon.'.png',array('width' => '45'));?>
<div><?= $forecast->day_of_week['data']; ?></div>
<span class="condition">
<?php
$low = (int) $forecast->low['data'];
$high = (int) $forecast->high['data'];
$low_celsius = (int) (($low - 32) * (5/9));
$high_celsius = (int)(($high - 32) * (5/9));
?>
<?= $low_celsius ?>° C - <?= $high_celsius ?>° C,
<?= $forecast->condition['data'] ?>
</span>
</div>
<? endforeach ?>
</body>
</html>
When I uploaded it I got these messages
Warning (2): simplexml_load_file() [function.simplexml-load-file]:
http://www.google.com/ig/api?weather=name_city: parser error : Document is empty
[APP/View/Elements/weather.ctp, line 5]
Warning (2): simplexml_load_file() [function.simplexml-load-file]:
[APP/View/Elements/weather.ctp, line 5]
Warning (2): simplexml_load_file() [function.simplexml-load-file]: ^
[APP/View/Elements/weather.ctp, line 5]
Warning (2): simplexml_load_file() [function.simplexml-load-file]:
http://www.google.com/ig/api?weather=name_city:1: parser error : Start tag
expected, '<' not found [APP/View/Elements/weather.ctp, line 5]
Warning (2): simplexml_load_file() [function.simplexml-load-file]:
[APP/View/Elements/weather.ctp, line 5]
Warning (2): simplexml_load_file() [function.simplexml-load-file]: ^
[APP/View/Elements/weather.ctp, line 5]
Fatal error: Call to a member function xpath() on a non-object in
/home/wwwsite/public_html/testing/app/View/Elements/weather.ctp on line 6
name_city has a real value. When I tried it on another computer there where other types of error ($forecast->day_of_week['data'] for example was not recognized as a valid variable). It seems that the online version is not able to receive data from Google Weather so the result is empty. Could anyone please tell me what to do?
There is currently an intermittent 403 Forbidden response to the Google Weather API that you are using. See Google Weather API 403 Error
The 403 response may be causing the empty document that you see in the first line of the results. Rerun the code again now both locally and on the server and see if the problem is intermittent.
The reason for the intermittent 403 response is not known but has been a problem since the 7th of August 2012 which is the time that you posted this problem.