БлогNot. Делаем погодный сервис для сайта за 5 минут

Делаем погодный сервис для сайта за 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 [12085 просмотров]


теги: php погода сервис google

К этой статье пока нет комментариев, Ваш будет первым