Модуль Weather::Com — это интерфейс к API сайта weather.com.
Для пользования данными вначале необходимо получить партнерский номер и лицензионный ключ. Это открывает бесплатный доступ к API.
use v5.10;
use strict;
use Weather::Com::Finder;
my $finder = new Weather::Com::Finder({
partner_id => '1234567890',
license => 'abcdefghijklmn',
language => 'en',
});
Работа происходит в два этапа.
1. Получение списка мест
my @locations = $finder->find('Moscow, Russia');
В зависимости от точности запроса в массиве @locations окажется разное число элементов. С показанным запросом Moscow, Russia находится только одна точка (очевидно, какая), а для запроса Moscow метод find возвращает аж десять вариантов:
'Moscow, KS',
'Moscow, OH',
'Moscow, PA',
'Moscow, IA',
'Moscow, TX',
'Moscow, ID',
'Moscow, AR',
'Moscow, MI',
'Moscow, TN',
'Moscow, Russia'
2. Запрос метеоданных
На втором шаге делается собственно запрос погоды для нужного места из списка найденных (через API наверняка возможно непосредственно указать код места, однако запросы автоматически кешируются и сохраняются в файле locations.dat, который появляется на диске после первого вызова find).
say $_->current_conditions->description for @locations;
Метод description, показанный в примере к модулю, возвращает текстовую строку, например, mostly cloudy, а остальные детали возможно узнать, обращаясь к методам объектов классов Weather::Com::Location и Weather::Com::Forecast.
Фрагмент данных, которые возвращает вызов current_conditions, выглядит так:
'WEATHER' => {
'head' => {
'ur' => 'mm',
'ud' => 'km',
'form' => 'MEDIUM',
'locale' => 'en_US',
'up' => 'mb',
'ut' => 'C',
'us' => 'km/h',
'cached' => 1260478192
},
'cc' => {
'flik' => '-11',
'icon' => '26',
'lsup' => '12/10/09 11:30 PM Local Time',
'obst' => 'Moscow, RUSSIA',
'tmp' => '-5',
'wind' => {
'gust' => 'N/A',
'd' => '100',
's' => '18',
't' => 'E'
},
'hmid' => '83',
'bar' => {
'r' => '1030.1',
'd' => 'rising'
},
'moon' => {
'icon' => '24',
't' => 'Waning Crescent'
},
'dewp' => '-7',
'vis' => '10.0',
'uv' => {
'i' => '0',
't' => 'Low'
},
't' => 'Cloudy',
'cached' => 1260478192
},
'loc' => {
'suns' => '3:57 PM',
'lat' => '55.75',
'zone' => '3',
'tm' => '11:49 PM',
'sunr' => '8:48 AM',
'dnam' => 'Moscow, Russia',
'lon' => '37.62',
'id' => 'RSXX0063',
'cached' => 1260478192
},
'ver' => '2.0'
}
В числе прочего здесь содержится и информация о фазе Луны.
К сожалению, лицензионное соглашение weather.com запрещает использовать любые полученные данные (в том числе список мест) на мобильных устройствах.
Комментировать