Хорошо, в качестве быстрого предупреждения, это довольно глупая демонстрация. Я имею в виду, я знаю, что это мое дело — я человек, который делает демо с кошками. Но это на самом деле заходит слишком далеко. Неделю назад мне было скучно, и я нашел интересный API, API Sunrise Sunset. Это бесплатный API, который возвращает время восхода и захода солнца для определенного местоположения. Так что, очевидно, я увидел это и подумал, что это будет идеальная услуга для вампиров.
Я имею в виду — представьте, что вам хорошо и удобно в вашей невероятно готической гробнице, вы проснулись после приятного сна и не совсем уверены, который сейчас час.
Совет для профессионалов. Не ищите в Google вампирский склеп на работе. Источник
Или, возможно, вы знаете время, но не уверены, что солнце уже взошло. Здесь на помощь приходит API. Работать с API довольно просто — для основных параметров вы просто передаете долготу и широту. Я начал с создания этого действия OpenWhisk:
const rp = require('request-promise');
function main(args) {
if(!args.lat || !args.lng) {
return { error:'Parameters lat and lng are required.' };
}
return new Promise((resolve, reject) => {
let now = new Date();
let url = `https://api.sunrise-sunset.org/json?lat=${args.lat}&lng=${args.lng}&formatted=0`;
let options = {
uri:url,
json:true
};
rp(options).then(result => {
let data = result.results;
/*
if now < data.sunrise || now > data.sunset
*/
let sunrise = new Date(data.sunrise);
let sunset = new Date(data.sunset);
resolve({result:(now < sunrise || now > sunset)});
}).catch(err => {
reject({error:err});
});
});
}
Сверху вниз — я выполняю небольшую базовую проверку параметров, а затем просто передаю запрос в API. Получив результат, я сравниваю текущее время с временем восхода и захода солнца для данного местоположения. Если текущее время после восхода солнца или после захода солнца, я возвращаю true. Я назвал это действиеVampireSafe, так что true означает, что да, это идеальное место для вампиров, чтобы выйти, хорошо провести время и т. д.
Я разместил это на OpenWhisk и включил его как веб-экшен, и на этом я полностью закончил с моим API-интерфейсом безопасности от вампиров. По сути, это заняло у меня минут десять или около того, а я уже сделал общественную услугу для монстров повсюду.
На стороне клиента я написал быстрое приложение с минимальным использованием HTML и JavaScript. Вот HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
<style>
body {
background-color:black;
}
h1, div {
color: red;
}
</style>
</head>
<body>
<h1>Vampire Safe?</h1>
<div id="status"></div>
<script src="client.js"></script>
</body>
</html>
Как видите, просто простая метка H1 и пустой div. Простите меня за встроенный стиль. А вот JavaScript:
let $status;
const API = 'https://openwhisk.ng.bluemix.net/api/v1/web/[email protected]_My%20Space/safeToDelete/isVampireSafe.json';
const GOOD = `<p>It is totally safe to be outside as a vampire. Happy Hunting!</p>`;
const BAD = `<p>Sorry, the sun is up. Stay indoors!</p>`;
document.addEventListener('DOMContentLoaded', init, false);
function init() {
$status = document.querySelector('#status');
//First, get location
navigator.geolocation.getCurrentPosition(gotLoc,locErr);
}
function locErr(e) {
console.log('location error', e);
$status.innerHTML = `
<p>
You need to let this app know your location in order for it to work. Or maybe you did
and somethig else went wrong. I'm truly sorry.
</p>`;
}
function gotLoc(pos) {
console.log('position',pos.coords);
fetch(API+'?lat='+pos.coords.latitude+'&lng='+pos.coords.longitude).then((res) => {
return res.json();
}).then((res) => {
console.log(res);
if(res.result === true) {
$status.innerHTML=GOOD;
} else {
$status.innerHTML=BAD;
}
});
}
Это просто сводится к быстрому вызову геолокации, а затем к моему API. Как только я получу свои результаты, я обновлю HTML. Вот снимок экрана в действии (обратите внимание, сейчас 13:49 по моему времени и около 200 градусов).
Конечно, если бы я хотел получить действительно точную информацию, я мог бы также проверить погоду и позволить вампирам выйти, если на улице облачно/шторм, но это, конечно, было бы глупой тратой времени.
Хотите попробовать сами? Вы можете посетить онлайн-сайт здесь: https://cfjedimaster.github.io/Serverless-Examples/vampire/client.html
Первоначально опубликовано на www.raymondcamden.com 27 июля 2017 г.