Статьи

Создание приложения Weather с API DarkSky

Создание веб-страниц — это такое же увлекательное занятие, как и любой другой, особенно когда вы работаете с API для динамического извлечения данных. Некоторые могут назвать это здание «веб-приложениями», другие могут назвать это здание «веб-страницами». В любом случае мы собираемся создать демо-версию для отображения прогноза погоды с использованием DarkSky и Google Maps API, JavaScript magic и CSS-анимаций. Это масса удовольствия, так что давайте начнем!

Примечание : мы не будем вдаваться в подробности процесса сборки, но у вас будет достаточно информации из этого обзора, чтобы начать что-то создавать самостоятельно.

Подсказка : чтобы узнать больше об API и сети, взгляните на растущую важность API в веб-разработке.

Посмотрите на демо . Онлайн-версия пока не работает, так как вам нужно будет добавить к ней ключи API. Загрузите исходные файлы и попробуйте!

Погода приложение демо
Погода приложение демо

DarkSky предлагает один из множества API, доступных для информации о погоде. DarkSky не только имеет API, доступный для разработчиков, но и приложение для iOS , Android и даже часов Apple.

API предоставляет доступ к ежечасным и ежедневным прогнозам на предстоящую неделю, поминутным «гиперлокальным» прогнозам дождя, правительственным оповещениям о суровой погоде, наблюдениям за десятилетия назад, десяткам языков, единиц измерения и простой для понимания документации . Существует ценовая модель с оплатой по мере использования, но первые 1000 прогнозов в день бесплатны. Эта часть важна, особенно если вы хотите экспериментировать в чисто демонстрационных целях. После первых 1000 запросов она становится платной услугой по цене 0,0001 доллара за прогноз.

skycons
Skycons

DarkSky также предоставляет доступ к действительно классному набору анимированных значков прогнозов для использования вместе с их API. Эти значки называются Skycons — вдохновлены Climacons — и отображаются с использованием canvas .

Как только вы получите свой личный ключ API DarkSky, мы отправляемся в гонки, но прежде чем покинуть ворота, нам нужна форма, поэтому давайте сначала создадим эту разметку.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<form method=»get»>
    <fieldset>
        <ul>
            <li>
                <label for=»latitude»>Latitude</label>
                <input type=»text» id=»latitude» placeholder=»eg 42.9150747″ required>
            </li>
 
            <li>
                <label for=»longitude»>Longitude</label>
                <input type=»text» id=»longitude» placeholder=»eg -77.784323″ required>
            </li>
        </ul>
    </fieldset>
 
    <button>Get Weather</button>
</form>

Разметка — это не более чем элемент формы с некоторыми элементами списка и входными данными внутри. Это будет основой для нашего будущего творения.

Вот результат нашей разметки с некоторыми простыми CSS-стилями для плавного ввода и добавления цвета фона, чтобы мы могли видеть визуализированную разметку.

Мы можем пойти дальше, чем просто два входа для широты и долготы. Что если кто-то не знает эти координаты на макушке? Чтобы решить эту проблему, мы добавим еще один вход, чтобы пользователи могли вводить и получать запрошенный прогноз по названию города — это в свою очередь автоматически заполнит поля координат!

1
2
3
4
<li>
  <label for=»city-search»>City Name</label>
  <input type=»text» id=»city-search» placeholder=»eg Rochester, NY»>
</li>

Одна только эта разметка не приведет нас к цели автозаполнения координат при поиске по городу; для этого нам нужно окунуться в Google Maps API. Так же, как нам нужен ключ API для DarkSky, нам также нужен ключ API для Google Maps. Личный ключ API Карт Google можно получить здесь, и он не предусмотрен для этого урока.

Для этой части приложения мы должны включить скрипт Google API, который содержит ваш личный ключ API в URL.

1
<script src=»https://maps.googleapis.com/maps/api/js?key=[your_api_key]&libraries=places,geometry»></script>

Этот скрипт является вызовом для загрузки API Карт Google, но есть еще кое-что объяснить.

1
&libraries=places,geometry

URL включает в себя параметры &libraries=places,geometry . Служба «Места» и «Геометрия» — это набор автономных библиотек, помимо основного JavaScript API Google Карт.

С ключом API, зарегистрированным для Карт Google, мы можем начать с создания JavaScript для поля поиска, в котором будут отображаться города в качестве пользовательских типов.

1
var searchBox = new google.maps.places.SearchBox();

Для отображения поисковых запросов по городу в качестве пользовательских типов мы будем использовать так называемое окно поиска мест .

1
var searchBox = new google.maps.places.SearchBox(document.querySelector(«#city-search»));

Аргумент SearchBox() будет передан поисковому вводу, который мы создали ранее.

Пока все хорошо, но нам все еще нужно подключить прослушиватель событий, чтобы наш JavaScript знал о происходящем.

1
searchBox.addListener(‘places_changed’, function() {});

Аргумент places_changed — это событие, которое запускается, когда PlaceResult становится доступным для города / местоположения, PlaceResult пользователем. Полная документация по Google Maps JavaScript API V3 также доступна для ознакомления.

На данный момент мы находимся в очень хорошем положении, поэтому давайте создадим некоторую логику, чтобы войти в функцию прослушивания событий окна поиска.

1
2
3
searchBox.addListener(‘places_changed’, function() {
    var locale = searchBox.getPlaces()[0];
});

С переменной, определяемой как locale для хранения нашего местоположения вы можете заметить значение, переданное searchBox.getPlaces()[0] . Этот метод — магия, которая поможет автоматически заполнять координаты на основе выбранного города (первый) или, другими словами, возвращает запрос, выбранный пользователем.

Последний этап — автозаполнение координат в зависимости от выбранного города и помещение его в нашу переменную locale в функции прослушивателя событий, которую мы только что создали.

1
2
document.querySelector(«#latitude»).value = place.geometry.location.lat();
document.querySelector(«#longitude»).value = place.geometry.location.lng();

Эти две строки устанавливают «значение» наших входных координат и используют свойство geometry и location предоставленное place .

Если вы хотите, есть даже способ с помощью предоставленных классов CSS для стилизации виджета автозаполнения и окна поиска.

Для взаимодействия с DarkSky вам необходимо зарегистрировать учетную запись для получения ключа API.

1
https://api.darksky.net/forecast/[key]/[latitude],[longitude]

URL запроса прогноза очень удобен для разработчиков. Вставьте свой ключ, передайте координаты, и вы готовы получить данные.

1
$.getJSON(‘https://api.darksky.net/forecast/[key]/[latitude],[longitude]’, function(forecast) {});

Результаты DarkSky возвращаются в виде JSON (нотация объектов JavaScript), поэтому при создании запроса вам необходимо использовать метод getJSON .

1
2
3
$.getJSON([api_url], function(forecast) {
    console.log(forecast);
});

В приведенном выше коде я использую jQuery для простоты. Аргументом forecast будет представление возвращаемых результатов.

Использование console.log сообщит об объекте, представляющем данные API DarkSky. Как вы можете видеть, есть довольно много вариантов с точки зрения информации, которую можно получить.

Чтобы инициировать и использовать Skycons, нам нужно написать функцию с использованием некоторой традиционной темной магии (иначе известной как JavaScript):

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function skycons() {
        var i,
            icons = new Skycons({
                «color» : «#FFFFFF»,
                «resizeClear»: true // nasty android hack
            }),
            list = [ // listing of all possible icons
                «clear-day»,
                «clear-night»,
                «partly-cloudy-day»,
                «partly-cloudy-night»,
                «cloudy»,
                «rain»,
                «sleet»,
                «snow»,
                «wind»,
                «fog»
            ];
 
    // loop thru icon list array
    for(i = list.length; i—;) {
        var weatherType = list[i], // select each icon from list array
                // icons will have the name in the array above attached to the
                // canvas element as a class so let’s hook into them.
                elements = document.getElementsByClassName( weatherType );
 
        // loop thru the elements now and set them up
        for (e = elements.length; e—;) {
            icons.set(elements[e], weatherType);
        }
    }
     
    // animate the icons
    icons.play();
}

Этот метод для ваших Skycons должен быть помещен в запрос getJSON, который мы написали ранее. Функция будет отображать и прикреплять наши анимированные иконки для динамически создаваемых прогнозов; деталь, недокументированная Skycons.

Объединение всей этой тяжелой работы приводит к созданию работающего погодного приложения в сочетании со всеми видами волшебства, такими как массивы JavaScript, циклы, поиск API, взаимодействие и движение. Все аспекты и навыки, необходимые для создания отличного приложения.

Я настоятельно призываю вас ознакомиться с предоставленным демо-проектом . Каждая строка была полностью прокомментирована, чтобы помочь вам понять намерения для каждой строки кода. Я надеюсь, что комментарии и совместные усилия по созданию этой демонстрации помогут расширить ваши навыки и вдохновят вас на создание собственной демонстрационной практики с любым API, который вы выберете.

Возможно, вы решите создать приложение Dribbble, приложение Envato или даже приложение CodePen. Что бы это ни было, найдите время, чтобы создать что-то свое и не забывайте практиковаться, практиковаться, практиковаться!