Cakephp 2.0: ошибки с Google Weather API + Xml

Я создал элемент для своего проекта, который загружает Google Weather API. Локально работает отлично. Проблема возникла, когда я загрузил его и дал попробовать своему другу.

Код элемента следующий

<?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'] ?>&deg; 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 ?>&deg; C - <?= $high_celsius ?>&deg; C,
            <?= $forecast->condition['data'] ?>
        </span>
 </div>
<? endforeach ?>
</body>
</html>

Когда я загрузил его, я получил эти сообщения

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 имеет реальное значение. Когда я попробовал это на другом компьютере, там были другие типы ошибок (например, $forecast->day_of_week['data'] не был распознан как допустимая переменная). Похоже, онлайн-версия не может получать данные от Google Weather, поэтому результат пустой. Может ли кто-нибудь сказать мне, что делать?


person user1496047    schedule 07.08.2012    source источник


Ответы (2)


В настоящее время существует прерывистый ответ 403 Forbidden на API Google Weather, который вы используете. См. ошибка Google Weather API 403.

Ответ 403 может быть причиной пустого документа, который вы видите в первой строке результатов. Запустите код еще раз, как локально, так и на сервере, и посмотрите, носит ли проблема периодический характер.

Причина прерывистого ответа 403 неизвестна, но проблема возникла с 7 августа 2012 года, когда вы опубликовали эту проблему.

person ClearCrescendo    schedule 09.08.2012
comment
Может быть, это! С помощью Chrome я проверил google.com/ig/api?weather=paris и я получил это сообщение 403. Это ошибка. У вашего клиента нет разрешения на получение URL-адреса /ig/api?weather=paris с этого сервера. Это все, что мы знаем. Как ни странно, с Firefox это работает. Онлайн версия не работает. - person user1496047; 10.08.2012
comment
Я могу воспроизвести то же самое здесь. Он постоянно выходит из строя из Chrome, периодически из-за различных ситуаций на сервере и либо постоянно, либо с перерывами работает из Firefox. Возможно, ошибка 403 связана с каким-либо изменением CDN/края в Google, поскольку это может привести к прерывистому поведению. Мы могли бы предположить, что инфраструктура Google обрабатывает/кэширует/обрабатывает Chrome иначе, чем Firefox. - person ClearCrescendo; 10.08.2012
comment
Только что сделал несколько тестов, и это не строка ident. Это что-то еще в запросе заголовка, из-за которого хром постоянно выходит из строя. - person ClearCrescendo; 10.08.2012

Google планирует закрыть iGoogle и связанные с ним API. Уже API погоды перестал отвечать с 27 августа. Вы можете использовать API wunderground.com.

person Community    schedule 08.09.2012