Делаем погодный сервис для сайта за 5 минут
Благодаря сервисам Google, эта задача действительно отнимет всего несколько минут. По сути дела, всё, что нам нужно - сформировать URL-адрес по правилам Google API, передать ему название своего населённого пункта, тоже полученное по гугловским правилам (кстати, не так уж легко найти где-то список этих городов в правильной транскрипции, вот доки, можно ещё и вот так), затем сделать запрос к гугловскому сервису и проанализировать полученный ответ.
Ниже приведён класс-обёртка на PHP, написанный для погодного сервиса, по умолчанию в нём ставится русский язык и кодировка Юникод (UTF-8):
<?php class Weather { public $xml; function __construct ($city, $lang='ru', $charset='utf-8') { $base = 'http://www.google.com/ig/api'; $params = 'weather=' . trim($city); $params .= '&hl=' . trim($lang); $params .= '&oe=' . trim($charset); $url = $base . '?' . $params; $this->xml = simplexml_load_file($url); } function getInfo() { if (!$this->xml) return false; $information = $this->xml->xpath("/xml_api_reply/weather/forecast_information"); return $information[0]; } function getCurrentWeather() { if (!$this->xml) return false; $current = $this->xml->xpath("/xml_api_reply/weather/current_conditions"); return $current[0]; } function getForecast() { if (!$this->xml) return array(); $forecast_list = $this->xml->xpath("/xml_api_reply/weather/forecast_conditions"); return $forecast_list; } } ?>
Предполагается, что код сохранён в файле с именем Weather.php
и находится в той же папке сервера, что основной скрипт.
А это - небольшой скрипт, использующий класс Weather
. Он позволяет выдать прогноз погоды в Новосибирске на 4 дня (сегодняшний день - информация получается методом getCurrentWeather
плюс стандартный прогноз на 3 дня - метод getForecast
)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html; charset=utf-8" http-equiv="content-type"> <title>Google Weather</title> </head> <style type=text/css> .weather img { margin: 2px; vertical-align: middle; } .condition { font-family: Verdana, Arial, Helvetica, sans-serif; font-size : 10px; } </style> <body> <?php $city='Novosibirsk'; if (isset($_GET['city'])) $city=htmlspecialchars(trim($_GET['city'])); include("Weather.php"); $gw = new Weather($city); $gw_info = $gw->getInfo(); $gw_today = $gw->getCurrentWeather(); $gw_forecast = $gw->getForecast(); echo $gw_info->city['data'].', '.$gw_info->forecast_date['data']. //Закомментарить строку выше, если не нужны город и дата '<div class="weather"><img src="http://www.google.com'. $gw_today->icon['data'].'"><span class="condition">'. $gw_today->temp_c['data'].' C, '.$gw_today->condition['data'].', '. $gw_today->humidity['data'].', '. $gw_today->wind_condition['data'].'</span></div>'; foreach ($gw_forecast as $forecast) { echo '<div class="weather"><img src="http://www.google.com'. $forecast->icon['data'].'"><span class="condition"> '. $forecast->day_of_week['data'].': '. $forecast->high['data'].' C | '.$forecast->low['data'].' C, '. $forecast->condition['data'].'</span></div>'; } echo '<div class="weather"><span class="condition"><a href="index.php">Reload</a></span></div>'; ?> </body> </html>
Результат работы нашего скрипта может быть таким (здесь скрипт вызван из тега <iframe>
):
Сервис в работе (код со временем может измениться)
Для вывода прогноза по другому городу просто вызовите скрипт с параметром URL-адреса city, равным названию нужного города, например, для Москвы получится так: http://scripts.kislenko.net/googleweather/?city=Moscow
Разумеется, можно поменять оформление выдачи, стили, кодировку и т.п.
Необязательно также возвращать целый документ, можно писать
выдачу файла index.php
в некую строку и потом выводить эту строку командой echo
.
Альтернативный путь - установка какого-нибудь информера от GISMeteo или другой службы, конечно, ещё проще, но, сами понимаете, вид выдачи там не перепрограммируешь...
P.S. В августе 2012-го Google отключил погодный API, новый скрипт на сервисе Yahoo здесь.
19.03.2012, 16:02 [12166 просмотров]