Проблема с вычислением прогноза погоды в Google - PullRequest
0 голосов
/ 23 июня 2010

Это примерно отчет о погоде Google XML .

Что делает расчет Google?

Когда я гуглю с ключевым словом погода = Лондон, Великобритания , отображается примерно такой снимок экрана

альтернативный текст http://img293.imageshack.us/img293/4746/weathergoogle.jpg

В моем XML нет ничего подобного 26, 11, 26, 22, нет

Мой XML выглядит следующим образом.

альтернативный текст http://img171.imageshack.us/img171/7408/weatherxml.jpg

Какой расчет используется в отчете о погоде?

Как получить их в переменную PHP?

Ответы [ 4 ]

4 голосов
/ 23 июня 2010

Нет расчета.Связанный вами XML имеет следующие узлы:

<temp_f data="70"/>
<temp_c data="21"/>

и

<low data="11"/>
<high data="26"/>

Первые два - это температура в градусах Цельсия и Фаренгейта для текущей погоды и соответствуют левой части наСтраница Google Seach.Высокие и низкие значения - это то, что страница поиска Google показывает для прогноза (только по Цельсию).

PHP предоставляет ряд библиотек для работы с XML .Наиболее заметными из них являются DOM , XMLReader и SimpleXML .Посмотрите на примеры в руководстве по PHP, как их использовать.Переполнение стека также имеет множество вопросов и ответов об их использовании.


РЕДАКТИРОВАТЬ после обновления: похоже, Google выдает высокие / низкие значения в градусах Фаренгейта в зависимости от языка, установленного в браузере, запрашивающем канал.Либо добавьте языковой параметр hl=[languagecode] к URL-адресу, чтобы узнать, можете ли вы запросить это в градусах Цельсия, либо - если это невозможно - конвертируйте максимум / минимум вручную :

            from Fahrenheit               to Fahrenheit
Celsius     [°C] = ([°F] − 32) × 5⁄9      [°F] = [°C] × 9⁄5 + 32
1 голос
/ 10 ноября 2010

На самом деле, это так же просто, как добавление & hl = en-GB к концу URL http://www.google.com/ig/api?weather=London,UK&hl=en-GB должно работать.Для других языков существуют проблемы с синтаксическим анализом (связанные с UTF-8), но для перехода на английский язык в Centigrade вам просто нужно переключиться на язык в ГБ (по умолчанию для США).

0 голосов
/ 31 декабря 2010

Как объясняет AR, вернуть значения по Цельсию на самом деле так же просто, как передать код языка.

API погоды Google официально не задокументирован, но я нашел эти 2 ссылки полезными:

0 голосов
/ 23 июня 2010
    <?php
        $xml = simplexml_load_file('http://www.google.com/ig/api?weather=London');
        $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><?php print $information[0]->city['data']; ?></h1>
        <h2>Today's weather</h2>
        <div class="weather">
            <img src="<?php echo  'http://www.google.com' . $current[0]->icon['data']?>" alt="weather"?>
            <span class="condition">
            <?php echo round(conver_f_c($current[0]->temp_f['data'])); ?>&deg; C,
            <?php echo $current[0]->condition['data'] ?>
            </span>
        </div>
        <h2>Forecast</h2>
        <?php foreach ($forecast_list as $forecast) : ?>
            <div class="weather">
                <img src="<?php echo 'http://www.google.com' . $forecast->icon['data']?>" alt="weather"?>
                <div><?php echo $forecast->day_of_week['data']; ?></div>
                <span class="condition">
                    <?php echo round(conver_f_c($forecast->low['data'])); ?>&deg; C - <?php echo round(conver_f_c($forecast->high['data'])); ?>&deg; C,
                    <?php echo $forecast->condition['data'] ?>
                </span>
            </div>
        <?php endforeach ?>
    </body>
</html>

<?php
function conver_f_c($F){

    return  $C = ($F - 32) * 5/9;
}

Этот фрагмент исправил мою проблему, API погоды Google с изображением, PHP.

...