Блог

Фрілансера

RSS
rss
Закладки

Кві

6

Погода через смс (безплатно)

категорія: parser, php, sms

Суть ідеї: Кожно ранку о 8:00 получати смс з прогнозом погоди на цілий день. Без використання платних послуг.

Щоб це зробити, потрібно виконати дві задачі:

  1. дізнатись прогноз погоди у моєму місті
  2. відправити смс

Щоб знайти прогноз погоди вирішено заузати Google Weather API.

Глянем урлу http://www.google.com/ig/api?weather=L’viv
В результат получаєм XML:

<xml_api_reply version="1">

<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">

<forecast_information>
<city data="L'viv, L'vivs'ka"/>
<postal_code data="Львов"/>
<latitude_e6 data=""/>

<longitude_e6 data=""/>
<forecast_date data="2010-04-06"/>
<current_date_time data="2010-04-06 14:00:00 +0000"/>
<unit_system data="SI"/>

</forecast_information>

<current_conditions>
<condition data="Дождь"/>
<temp_f data="48"/>

<temp_c data="9"/>
<humidity data="Влажность: 82 %"/>
<icon data="/ig/images/weather/rain.gif"/>
<wind_condition data="Ветер: С, 1 м/с"/>

</current_conditions>

<forecast_conditions>
<day_of_week data="Вт"/>
<low data="3"/>

<high data="10"/>
<icon data="/ig/images/weather/chance_of_rain.gif"/>
<condition data="Возможен дождь"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Ср"/>
<low data="4"/>
<high data="15"/>

<icon data="/ig/images/weather/chance_of_rain.gif"/>
<condition data="Возможен дождь"/>
</forecast_conditions>

<forecast_conditions>

<day_of_week data="Чт"/>
<low data="3"/>
<high data="17"/>
<icon data="/ig/images/weather/chance_of_rain.gif"/>

<condition data="Возможен дождь"/>
</forecast_conditions>

<forecast_conditions>
<day_of_week data="Пт"/>

<low data="3"/>
<high data="16"/>
<icon data="/ig/images/weather/mostly_sunny.gif"/>
<condition data="Преимущественно солнечно"/>

</forecast_conditions>
</weather>
</xml_api_reply>

Мова XML може відрізнятись*

Парсимо xml-ку за допомогою SimpleXMLElement.

Прогноз погоди готовий, тепер залишилось відправити цей прогноз по смс.
В київстарі є сервіс прийому смс з електронної пошти kyivstar.ua/ru/personal/contract/services/sms/.
Відправляємо мило на номер 38067xxxxxxx@2sms.kyivstar.net і получаєм смс :)

Реалізація на php:

<?php
$city = "L'viv";
$number = '380679241401';

$str = file_get_contents('http://www.google.com/ig/api?weather='.$city);
$xml = new SimpleXMLElement($str);

//print_r($xml);

$mes = '';
$mes .= $city;
$mes .= "\n";
$mes .= (string)$xml->weather->forecast_conditions[0]->day_of_week['data'];
$mes .= "\n";
$mes .= round(((int)$xml->weather->forecast_conditions[0]->low['data']-32)*5/9);
$mes .= "-";
$mes .= round(((int)$xml->weather->forecast_conditions[0]->high['data']-32)*5/9);
$mes .= "\n";
$mes .= (string)$xml->weather->forecast_conditions[0]->condition['data'];

$headers = "MIME-Version: 1.0\nFrom: sergunik@gmail.com\nContent-Type: text/plain; charset=utf-8";
mail($number.'@2sms.kyivstar.net', '', $mes, $headers);
?>

Маніпуляції типу -32)*5/9 я робив для того щоб перевести температуру з Фаренгейта в Цельсії.

Тепер заливаєм собі на сервак і ставим задачу на крон.
Готово, тепер я щодня зранку получаю смс з прогнозом погоди у Львові.

Можливі проблеми:

  • На серваку включена ліба SimpleXMLElement. Відповідно, щоб розпарсити xml то потрібно включити бібліотеку, або парсити іншим способом (наприклад взяти цей парсер).
  • Сервак не відправляє мило функцією mail(). Тоді потрібно звязатись з сапортом хостинга і вже з ними домовлятись.
  • На мобілі заблокована можливість прийому смс з інтернету. Тоді потрібно включити цю послугу: пусте смс на номер 7021 (безкоштовно для київстарівців).

Здається все…

Залишилось таємницею, як в повідомлення записати символ кінця строчки (\n \r <br>)?

Share

Пару років тому зреалізував був таку штуку, погоду брав правда від гісметео а не від гугла, слав погоду десь приблизно 300 людям. А потім все надоїли та й прикрив сервіс. Тоді смски ще й можна було на МТС відправляти та й на мобі (теперішній білайн). Деколи смски просто не доходять, особливо перед новим роком та й на інші свята. Символи кінця стрічки київстаром ігноруються, так що можна не шукати як то зреалізувати.

mr.petruccio

Дякую, згодилось, тільки трохи вдосконалив, змінивши
$str = file_get_contents(‘http://www.google.com/ig/api?weather=’.$city);
на
$str = file_get_contents(‘http://www.google.com/ig/api?weather=’.$city.’&hl=uk&oe=utf-8′);
А вивід потім транслітерував

MustangUA

[...] попередній статті Погода через смс для відправки смс-повідомлень я використовував імейл [...]

Безкоштовні смс (Київстар) - Sergunik

no spam <noindex> <nofolow>

Блог фрілансера
Sergunik
2009-2010