0

GoogleWeatherAPIをロードするプロジェクトの要素を作成しました。ローカルでは完全に機能します。問題は、アップロードしたときと、友人に試してもらうときに発生しました。

要素のコードは次のとおりです

<?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']が有効な変数として認識されなかった)で別のコンピューターで試してみました。オンライン版はGoogleWeatherからデータを受信できないようであるため、結果は空です。誰か教えてくれませんか?

4

2 に答える 2

3

GoogleはiGoogleと関連するAPIをシャットダウンする予定です。8月27日から天気APIへの応答をすでに停止しています。wunderground.comのAPI を使用できます

于 2012-09-08T18:22:02.927 に答える
0

現在、使用しているGoogleWeatherAPIに対して断続的な403Forbidden応答があります。Google WeatherAPI403エラーを参照してください

403応答が原因で、結果の最初の行に表示される空のドキュメントが発生している可能性があります。ローカルとサーバーの両方でコードを再実行し、問題が断続的に発生するかどうかを確認します。

403応答が断続的に発生する理由は不明ですが、この問題を投稿した2012年8月7日から問題が発生しています。

于 2012-08-09T19:54:15.953 に答える