From 57e091c134dfdf6e67483a97332edef23c45f051 Mon Sep 17 00:00:00 2001 From: plane000 Date: Tue, 10 Jul 2018 20:11:24 +0100 Subject: [PATCH] weather --- JavaScript/Levenshtein_distance/index.js | 36 + JavaScript/Levenshtein_distance/package.json | 11 + JavaScript/Levenshtein_distance/test.js | 4 + .../MinecraftFaceGetter/images/zirshock.png | Bin 0 -> 1003 bytes JavaScript/MinecraftFaceGetter/names.txt | 1 + .../weather-api-resolver/client/css/style.css | 55 + .../weather-api-resolver/client/index.html | 32 + .../weather-api-resolver/client/main.js | 27 + JavaScript/weather-api-resolver/helper.txt | 1634 +++++++++++++++++ JavaScript/weather-api-resolver/index.js | 59 + .../weather-api-resolver/package-lock.json | 433 +++++ JavaScript/weather-api-resolver/package.json | 17 + .../resources/images/weather/clear-day.png | Bin 0 -> 1514 bytes .../resources/images/weather/clear-night.png | Bin 0 -> 1143 bytes .../resources/images/weather/cloudy.png | Bin 0 -> 693 bytes .../resources/images/weather/fog.png | Bin 0 -> 416 bytes .../images/weather/partialy-cloudy-day.png | Bin 0 -> 1597 bytes .../images/weather/partialy-cloudy-night.png | Bin 0 -> 1199 bytes .../resources/images/weather/rain.png | Bin 0 -> 1013 bytes .../resources/images/weather/sleet.png | Bin 0 -> 1266 bytes .../resources/images/weather/snow.png | Bin 0 -> 18317 bytes .../resources/images/weather/wind.png | Bin 0 -> 18584 bytes 22 files changed, 2309 insertions(+) create mode 100644 JavaScript/Levenshtein_distance/index.js create mode 100644 JavaScript/Levenshtein_distance/package.json create mode 100644 JavaScript/Levenshtein_distance/test.js create mode 100644 JavaScript/MinecraftFaceGetter/images/zirshock.png create mode 100644 JavaScript/weather-api-resolver/client/css/style.css create mode 100644 JavaScript/weather-api-resolver/client/index.html create mode 100644 JavaScript/weather-api-resolver/client/main.js create mode 100644 JavaScript/weather-api-resolver/helper.txt create mode 100644 JavaScript/weather-api-resolver/index.js create mode 100644 JavaScript/weather-api-resolver/package-lock.json create mode 100644 JavaScript/weather-api-resolver/package.json create mode 100644 JavaScript/weather-api-resolver/resources/images/weather/clear-day.png create mode 100644 JavaScript/weather-api-resolver/resources/images/weather/clear-night.png create mode 100644 JavaScript/weather-api-resolver/resources/images/weather/cloudy.png create mode 100644 JavaScript/weather-api-resolver/resources/images/weather/fog.png create mode 100644 JavaScript/weather-api-resolver/resources/images/weather/partialy-cloudy-day.png create mode 100644 JavaScript/weather-api-resolver/resources/images/weather/partialy-cloudy-night.png create mode 100644 JavaScript/weather-api-resolver/resources/images/weather/rain.png create mode 100644 JavaScript/weather-api-resolver/resources/images/weather/sleet.png create mode 100644 JavaScript/weather-api-resolver/resources/images/weather/snow.png create mode 100644 JavaScript/weather-api-resolver/resources/images/weather/wind.png diff --git a/JavaScript/Levenshtein_distance/index.js b/JavaScript/Levenshtein_distance/index.js new file mode 100644 index 0000000..8a655cb --- /dev/null +++ b/JavaScript/Levenshtein_distance/index.js @@ -0,0 +1,36 @@ +/** + * @param {string} a + * @param {string} b + */ +module.exports.distance = function(a, b) { + aL = a.length; + bL = b.length; + + if (aL == 0) return aL; + if (bL == 0) return bL; + + let matrix = []; + + for (let i = 0; i <= bL; i++) { + matrix[i] = [i]; + } + + for (let i = 0; i <= aL; i++) { + matrix[0][i] = i; + } + + for (let i = 1; i <= bL; i++) { + for (let j = 1; j <= aL; j++) { + if (b.charAt(i-1) == a.charAt(j-1)) { + matrix[i][j] = matrix[i-1][j-1]; + } else { + matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, + Math.min(matrix[ i ][j-1] + 1, + matrix[i-1][j] + 1)); + } + } + } + + return matrix[bL][aL]; +} +// we're doing the matrix implimentation https://en.wikipedia.org/wiki/Levenshtein_distance diff --git a/JavaScript/Levenshtein_distance/package.json b/JavaScript/Levenshtein_distance/package.json new file mode 100644 index 0000000..b052249 --- /dev/null +++ b/JavaScript/Levenshtein_distance/package.json @@ -0,0 +1,11 @@ +{ + "name": "levenshtein-distance-finder", + "version": "1.0.0", + "description": "Implimentation of the Levenshtin distance algorithm", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Ben (plane000)", + "license": "MIT" +} diff --git a/JavaScript/Levenshtein_distance/test.js b/JavaScript/Levenshtein_distance/test.js new file mode 100644 index 0000000..241cd49 --- /dev/null +++ b/JavaScript/Levenshtein_distance/test.js @@ -0,0 +1,4 @@ +const test = require('./index'); + +console.log(test.distance('stats', 'status')); +// expected output => 3 diff --git a/JavaScript/MinecraftFaceGetter/images/zirshock.png b/JavaScript/MinecraftFaceGetter/images/zirshock.png new file mode 100644 index 0000000000000000000000000000000000000000..90325ebcdfc7275d5c243fa22a8fbc51ae1a7b43 GIT binary patch literal 1003 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&~>Eakt!T3h1?h*q7^AZs6 z?ZJb+V$T>^4{SfbTdhH$PwDvsZ@x@L_seb4oS_OerP`VeQyy?x{BTg2!lE0Q$va!_ zkG$PtbK`LPKWq7S9{7D*=IfurzF(^>U)`-YetXfk@7EVg_rG6n$1Gt?Gd-||ZN^oG z%~A + + + + + Weather + + + + +
+
+
+
+ Celsius: + +
+
+ longitude: + +
+
+ latitude: + +

+ +
+ + +
+ + diff --git a/JavaScript/weather-api-resolver/client/main.js b/JavaScript/weather-api-resolver/client/main.js new file mode 100644 index 0000000..6f58591 --- /dev/null +++ b/JavaScript/weather-api-resolver/client/main.js @@ -0,0 +1,27 @@ +async function update() { + let celsius = document.getElementById('celsius').checked; + let lat = document.getElementById('lat').value; + let long = document.getElementById('long').value; + + if (lat == '' || long == '') { + document.getElementById('Currently').innerHTML ='You have not enterd any coordinates'; + return; + } + + let http = new XMLHttpRequest(); + + http.onreadystatechange = function() { + document.getElementById('Currently').innerHTML = 'loading...'; + let response = this.responseText; + document.getElementById('Currently').innerHTML = response; + } + + let string = '/weather?lat=' + lat + '&long=' + long; + + if (!celsius) { + string += '&celsius=false' + } + + await http.open('GET', string, true); + await http.send(); +} diff --git a/JavaScript/weather-api-resolver/helper.txt b/JavaScript/weather-api-resolver/helper.txt new file mode 100644 index 0000000..13e4235 --- /dev/null +++ b/JavaScript/weather-api-resolver/helper.txt @@ -0,0 +1,1634 @@ +https://api.darksky.net/forecast/key/coords/ +key: ba238ec11435fbe60c52887be53ecc36 +coords: 51.1093005,0.56643 +args: ?units=auto -- si = metric -- us = imperial + +{ + "latitude":37.8267, + "longitude":-122.4233, + "timezone":"America/Los_Angeles", + "currently":{ + "time":1531241404, + "summary":"Clear", + "icon":"clear-day", + "nearestStormDistance":133, + "nearestStormBearing":134, + "precipIntensity":0, + "precipProbability":0, + "temperature":67.67, + "apparentTemperature":67.67, + "dewPoint":52.17, + "humidity":0.58, + "pressure":1017.04, + "windSpeed":3.28, + "windGust":6.87, + "windBearing":233, + "cloudCover":0.06, + "uvIndex":3, + "visibility":10, + "ozone":307.15 + }, + "minutely":{ + "summary":"Clear for the hour.", + "icon":"clear-day", + "data":[ + { + "time":1531241400, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531241460, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531241520, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531241580, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531241640, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531241700, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531241760, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531241820, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531241880, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531241940, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242000, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242060, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242120, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242180, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242240, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242300, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242360, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242420, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242480, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242540, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242600, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242660, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242720, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242780, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242840, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242900, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531242960, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243020, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243080, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243140, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243200, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243260, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243320, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243380, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243440, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243500, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243560, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243620, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243680, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243740, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243800, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243860, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243920, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531243980, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244040, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244100, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244160, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244220, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244280, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244340, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244400, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244460, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244520, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244580, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244640, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244700, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244760, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244820, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244880, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531244940, + "precipIntensity":0, + "precipProbability":0 + }, + { + "time":1531245000, + "precipIntensity":0, + "precipProbability":0 + } + ] + }, + "hourly":{ + "summary":"Mostly cloudy starting tonight.", + "icon":"partly-cloudy-night", + "data":[ + { + "time":1531238400, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":65.13, + "apparentTemperature":65.13, + "dewPoint":52.05, + "humidity":0.63, + "pressure":1017.19, + "windSpeed":3.1, + "windGust":6.47, + "windBearing":239, + "cloudCover":0.08, + "uvIndex":2, + "visibility":10, + "ozone":308.33 + }, + { + "time":1531242000, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":68.17, + "apparentTemperature":68.17, + "dewPoint":52.17, + "humidity":0.57, + "pressure":1017.01, + "windSpeed":3.32, + "windGust":6.95, + "windBearing":231, + "cloudCover":0.06, + "uvIndex":4, + "visibility":10, + "ozone":306.92 + }, + { + "time":1531245600, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":70.1, + "apparentTemperature":70.1, + "dewPoint":52.43, + "humidity":0.54, + "pressure":1016.78, + "windSpeed":4.57, + "windGust":8.47, + "windBearing":255, + "cloudCover":0.05, + "uvIndex":6, + "visibility":10, + "ozone":305.89 + }, + { + "time":1531249200, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":71.67, + "apparentTemperature":71.67, + "dewPoint":52.83, + "humidity":0.52, + "pressure":1016.32, + "windSpeed":6.13, + "windGust":10.83, + "windBearing":269, + "cloudCover":0.04, + "uvIndex":9, + "visibility":10, + "ozone":305.57 + }, + { + "time":1531252800, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":72.98, + "apparentTemperature":72.98, + "dewPoint":53.22, + "humidity":0.5, + "pressure":1015.94, + "windSpeed":8.17, + "windGust":12.88, + "windBearing":259, + "cloudCover":0.04, + "uvIndex":11, + "visibility":10, + "ozone":305.62 + }, + { + "time":1531256400, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0.0005, + "precipProbability":0.01, + "precipType":"rain", + "temperature":73.88, + "apparentTemperature":73.88, + "dewPoint":53.37, + "humidity":0.49, + "pressure":1015.21, + "windSpeed":9.59, + "windGust":15.72, + "windBearing":265, + "cloudCover":0.05, + "uvIndex":10, + "visibility":10, + "ozone":305.74 + }, + { + "time":1531260000, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0.0015, + "precipProbability":0.01, + "precipType":"rain", + "temperature":73.69, + "apparentTemperature":73.69, + "dewPoint":53.57, + "humidity":0.49, + "pressure":1014.82, + "windSpeed":10.51, + "windGust":18.12, + "windBearing":265, + "cloudCover":0.05, + "uvIndex":8, + "visibility":10, + "ozone":305.83 + }, + { + "time":1531263600, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":72.46, + "apparentTemperature":72.46, + "dewPoint":53.68, + "humidity":0.52, + "pressure":1014.34, + "windSpeed":11.17, + "windGust":19.67, + "windBearing":270, + "cloudCover":0.04, + "uvIndex":5, + "visibility":10, + "ozone":305.9 + }, + { + "time":1531267200, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0.0012, + "precipProbability":0.01, + "precipType":"rain", + "temperature":70.51, + "apparentTemperature":70.51, + "dewPoint":53.84, + "humidity":0.56, + "pressure":1013.97, + "windSpeed":11.07, + "windGust":19.48, + "windBearing":269, + "cloudCover":0.04, + "uvIndex":3, + "visibility":10, + "ozone":305.94 + }, + { + "time":1531270800, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":68.24, + "apparentTemperature":68.24, + "dewPoint":53.97, + "humidity":0.6, + "pressure":1013.48, + "windSpeed":10.35, + "windGust":18.08, + "windBearing":266, + "cloudCover":0.04, + "uvIndex":1, + "visibility":10, + "ozone":305.83 + }, + { + "time":1531274400, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":65.51, + "apparentTemperature":65.51, + "dewPoint":54.1, + "humidity":0.67, + "pressure":1013, + "windSpeed":9.57, + "windGust":16.99, + "windBearing":257, + "cloudCover":0.05, + "uvIndex":1, + "visibility":10, + "ozone":305.63 + }, + { + "time":1531278000, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0.0016, + "precipProbability":0.01, + "precipType":"rain", + "temperature":63.09, + "apparentTemperature":63.09, + "dewPoint":54.24, + "humidity":0.73, + "pressure":1012.89, + "windSpeed":8.74, + "windGust":16.3, + "windBearing":255, + "cloudCover":0.1, + "uvIndex":0, + "visibility":10, + "ozone":305.37 + }, + { + "time":1531281600, + "summary":"Clear", + "icon":"clear-night", + "precipIntensity":0.0012, + "precipProbability":0.01, + "precipType":"rain", + "temperature":61.52, + "apparentTemperature":61.52, + "dewPoint":54.46, + "humidity":0.78, + "pressure":1012.96, + "windSpeed":7.32, + "windGust":13.59, + "windBearing":258, + "cloudCover":0.16, + "uvIndex":0, + "visibility":10, + "ozone":305.02 + }, + { + "time":1531285200, + "summary":"Clear", + "icon":"clear-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":60.41, + "apparentTemperature":60.41, + "dewPoint":54.64, + "humidity":0.81, + "pressure":1013.36, + "windSpeed":7.51, + "windGust":13.04, + "windBearing":229, + "cloudCover":0.2, + "uvIndex":0, + "visibility":10, + "ozone":304.48 + }, + { + "time":1531288800, + "summary":"Clear", + "icon":"clear-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":59.24, + "apparentTemperature":59.24, + "dewPoint":54.92, + "humidity":0.86, + "pressure":1013.37, + "windSpeed":6.8, + "windGust":11.36, + "windBearing":242, + "cloudCover":0.23, + "uvIndex":0, + "visibility":10, + "ozone":303.9 + }, + { + "time":1531292400, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":58.27, + "apparentTemperature":58.27, + "dewPoint":55.14, + "humidity":0.89, + "pressure":1013.59, + "windSpeed":6.51, + "windGust":10.42, + "windBearing":240, + "cloudCover":0.41, + "uvIndex":0, + "visibility":10, + "ozone":303.24 + }, + { + "time":1531296000, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":57.75, + "apparentTemperature":57.75, + "dewPoint":55.13, + "humidity":0.91, + "pressure":1013.11, + "windSpeed":6.17, + "windGust":9.92, + "windBearing":233, + "cloudCover":0.54, + "uvIndex":0, + "visibility":10, + "ozone":302.49 + }, + { + "time":1531299600, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":57.24, + "apparentTemperature":57.24, + "dewPoint":55.08, + "humidity":0.93, + "pressure":1012.82, + "windSpeed":6.15, + "windGust":9.45, + "windBearing":229, + "cloudCover":0.64, + "uvIndex":0, + "visibility":10, + "ozone":301.89 + }, + { + "time":1531303200, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":56.77, + "apparentTemperature":56.77, + "dewPoint":55, + "humidity":0.94, + "pressure":1012.46, + "windSpeed":5.91, + "windGust":8.84, + "windBearing":229, + "cloudCover":0.7, + "uvIndex":0, + "visibility":10, + "ozone":301.57 + }, + { + "time":1531306800, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":55.97, + "apparentTemperature":55.97, + "dewPoint":54.89, + "humidity":0.96, + "pressure":1012.23, + "windSpeed":5.88, + "windGust":8.22, + "windBearing":208, + "cloudCover":0.75, + "uvIndex":0, + "visibility":9.16, + "ozone":301.46 + }, + { + "time":1531310400, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":55.38, + "apparentTemperature":55.38, + "dewPoint":54.82, + "humidity":0.98, + "pressure":1012.16, + "windSpeed":5.57, + "windGust":7.72, + "windBearing":213, + "cloudCover":0.8, + "uvIndex":0, + "visibility":7.37, + "ozone":301.4 + }, + { + "time":1531314000, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0.0012, + "precipProbability":0.01, + "precipType":"rain", + "temperature":54.96, + "apparentTemperature":54.96, + "dewPoint":54.78, + "humidity":0.99, + "pressure":1012.23, + "windSpeed":5.41, + "windGust":7.38, + "windBearing":209, + "cloudCover":0.84, + "uvIndex":0, + "visibility":7.94, + "ozone":301.26 + }, + { + "time":1531317600, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0.0013, + "precipProbability":0.01, + "precipType":"rain", + "temperature":55.05, + "apparentTemperature":55.05, + "dewPoint":54.76, + "humidity":0.99, + "pressure":1012.54, + "windSpeed":5.37, + "windGust":7.13, + "windBearing":202, + "cloudCover":0.9, + "uvIndex":0, + "visibility":9.76, + "ozone":301.19 + }, + { + "time":1531321200, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0.0011, + "precipProbability":0.01, + "precipType":"rain", + "temperature":55.8, + "apparentTemperature":55.8, + "dewPoint":54.77, + "humidity":0.96, + "pressure":1012.74, + "windSpeed":5.33, + "windGust":6.98, + "windBearing":197, + "cloudCover":0.91, + "uvIndex":1, + "visibility":10, + "ozone":301.08 + }, + { + "time":1531324800, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0.0006, + "precipProbability":0.01, + "precipType":"rain", + "temperature":57.44, + "apparentTemperature":57.44, + "dewPoint":54.81, + "humidity":0.91, + "pressure":1012.86, + "windSpeed":5.29, + "windGust":6.86, + "windBearing":198, + "cloudCover":0.84, + "uvIndex":1, + "visibility":10, + "ozone":300.87 + }, + { + "time":1531328400, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":59.43, + "apparentTemperature":59.43, + "dewPoint":54.89, + "humidity":0.85, + "pressure":1012.79, + "windSpeed":5.29, + "windGust":6.8, + "windBearing":203, + "cloudCover":0.67, + "uvIndex":3, + "visibility":10, + "ozone":300.7 + }, + { + "time":1531332000, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":62.01, + "apparentTemperature":62.01, + "dewPoint":54.98, + "humidity":0.78, + "pressure":1012.69, + "windSpeed":5.58, + "windGust":6.99, + "windBearing":209, + "cloudCover":0.57, + "uvIndex":5, + "visibility":10, + "ozone":300.5 + }, + { + "time":1531335600, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":63.92, + "apparentTemperature":63.92, + "dewPoint":55.06, + "humidity":0.73, + "pressure":1012.52, + "windSpeed":6.24, + "windGust":7.58, + "windBearing":217, + "cloudCover":0.43, + "uvIndex":7, + "visibility":10, + "ozone":300.4 + }, + { + "time":1531339200, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":66.26, + "apparentTemperature":66.26, + "dewPoint":55.12, + "humidity":0.67, + "pressure":1012.21, + "windSpeed":7.14, + "windGust":8.39, + "windBearing":225, + "cloudCover":0.29, + "uvIndex":9, + "visibility":10, + "ozone":300.4 + }, + { + "time":1531342800, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":67.86, + "apparentTemperature":67.86, + "dewPoint":55.17, + "humidity":0.64, + "pressure":1011.9, + "windSpeed":7.95, + "windGust":9.19, + "windBearing":231, + "cloudCover":0.22, + "uvIndex":9, + "visibility":9.92, + "ozone":300.43 + }, + { + "time":1531346400, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":68.57, + "apparentTemperature":68.57, + "dewPoint":55.19, + "humidity":0.62, + "pressure":1011.42, + "windSpeed":8.5, + "windGust":10.01, + "windBearing":235, + "cloudCover":0.21, + "uvIndex":7, + "visibility":9.35, + "ozone":300.56 + }, + { + "time":1531350000, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":68.03, + "apparentTemperature":68.03, + "dewPoint":55.18, + "humidity":0.64, + "pressure":1010.93, + "windSpeed":8.86, + "windGust":10.79, + "windBearing":236, + "cloudCover":0.21, + "uvIndex":5, + "visibility":8.9, + "ozone":300.74 + }, + { + "time":1531353600, + "summary":"Clear", + "icon":"clear-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":66.73, + "apparentTemperature":66.73, + "dewPoint":55.2, + "humidity":0.66, + "pressure":1010.56, + "windSpeed":8.95, + "windGust":11.17, + "windBearing":237, + "cloudCover":0.22, + "uvIndex":3, + "visibility":8.97, + "ozone":300.78 + }, + { + "time":1531357200, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":64.83, + "apparentTemperature":64.83, + "dewPoint":55.23, + "humidity":0.71, + "pressure":1010.35, + "windSpeed":8.34, + "windGust":10.84, + "windBearing":238, + "cloudCover":0.26, + "uvIndex":1, + "visibility":10, + "ozone":300.63 + }, + { + "time":1531360800, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":62.82, + "apparentTemperature":62.82, + "dewPoint":55.28, + "humidity":0.76, + "pressure":1010.4, + "windSpeed":7.51, + "windGust":10.09, + "windBearing":237, + "cloudCover":0.29, + "uvIndex":1, + "visibility":10, + "ozone":300.39 + }, + { + "time":1531364400, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":61.04, + "apparentTemperature":61.04, + "dewPoint":55.31, + "humidity":0.81, + "pressure":1010.63, + "windSpeed":6.82, + "windGust":9.42, + "windBearing":236, + "cloudCover":0.33, + "uvIndex":0, + "visibility":10, + "ozone":300.15 + }, + { + "time":1531368000, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":60, + "apparentTemperature":60, + "dewPoint":55.32, + "humidity":0.85, + "pressure":1011.03, + "windSpeed":6.36, + "windGust":8.97, + "windBearing":234, + "cloudCover":0.38, + "uvIndex":0, + "visibility":10, + "ozone":300.11 + }, + { + "time":1531371600, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":59.33, + "apparentTemperature":59.33, + "dewPoint":55.3, + "humidity":0.87, + "pressure":1011.55, + "windSpeed":6.06, + "windGust":8.6, + "windBearing":231, + "cloudCover":0.44, + "uvIndex":0, + "visibility":10, + "ozone":300.18 + }, + { + "time":1531375200, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":58.49, + "apparentTemperature":58.49, + "dewPoint":55.25, + "humidity":0.89, + "pressure":1011.84, + "windSpeed":5.81, + "windGust":8.3, + "windBearing":229, + "cloudCover":0.47, + "uvIndex":0, + "visibility":10, + "ozone":300.14 + }, + { + "time":1531378800, + "summary":"Partly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":57.95, + "apparentTemperature":57.95, + "dewPoint":55.14, + "humidity":0.9, + "pressure":1011.98, + "windSpeed":5.67, + "windGust":8.14, + "windBearing":231, + "cloudCover":0.53, + "uvIndex":0, + "visibility":10, + "ozone":300 + }, + { + "time":1531382400, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":57.57, + "apparentTemperature":57.57, + "dewPoint":55, + "humidity":0.91, + "pressure":1011.97, + "windSpeed":5.52, + "windGust":8.05, + "windBearing":231, + "cloudCover":0.6, + "uvIndex":0, + "visibility":10, + "ozone":299.83 + }, + { + "time":1531386000, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":57.23, + "apparentTemperature":57.23, + "dewPoint":54.87, + "humidity":0.92, + "pressure":1012.06, + "windSpeed":5.43, + "windGust":7.93, + "windBearing":227, + "cloudCover":0.65, + "uvIndex":0, + "visibility":10, + "ozone":299.52 + }, + { + "time":1531389600, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":56.85, + "apparentTemperature":56.85, + "dewPoint":54.77, + "humidity":0.93, + "pressure":1012.11, + "windSpeed":5.32, + "windGust":7.74, + "windBearing":218, + "cloudCover":0.69, + "uvIndex":0, + "visibility":10, + "ozone":298.81 + }, + { + "time":1531393200, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":56.37, + "apparentTemperature":56.37, + "dewPoint":54.67, + "humidity":0.94, + "pressure":1012.12, + "windSpeed":4.67, + "windGust":7.52, + "windBearing":228, + "cloudCover":0.75, + "uvIndex":0, + "visibility":10, + "ozone":298.05 + }, + { + "time":1531396800, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":56.08, + "apparentTemperature":56.08, + "dewPoint":54.59, + "humidity":0.95, + "pressure":1012.25, + "windSpeed":4.66, + "windGust":7.3, + "windBearing":226, + "cloudCover":0.78, + "uvIndex":0, + "visibility":10, + "ozone":297.47 + }, + { + "time":1531400400, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-night", + "precipIntensity":0, + "precipProbability":0, + "temperature":55.94, + "apparentTemperature":55.94, + "dewPoint":54.55, + "humidity":0.95, + "pressure":1012.44, + "windSpeed":4.09, + "windGust":7.06, + "windBearing":228, + "cloudCover":0.82, + "uvIndex":0, + "visibility":10, + "ozone":297.48 + }, + { + "time":1531404000, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":56.13, + "apparentTemperature":56.13, + "dewPoint":54.52, + "humidity":0.94, + "pressure":1012.88, + "windSpeed":4.21, + "windGust":6.82, + "windBearing":220, + "cloudCover":0.86, + "uvIndex":0, + "visibility":10, + "ozone":297.86 + }, + { + "time":1531407600, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":56.97, + "apparentTemperature":56.97, + "dewPoint":54.53, + "humidity":0.92, + "pressure":1013.28, + "windSpeed":4.11, + "windGust":6.63, + "windBearing":227, + "cloudCover":0.84, + "uvIndex":1, + "visibility":10, + "ozone":298.32 + }, + { + "time":1531411200, + "summary":"Mostly Cloudy", + "icon":"partly-cloudy-day", + "precipIntensity":0, + "precipProbability":0, + "temperature":58.79, + "apparentTemperature":58.79, + "dewPoint":54.58, + "humidity":0.86, + "pressure":1013.74, + "windSpeed":4.41, + "windGust":6.4, + "windBearing":229, + "cloudCover":0.72, + "uvIndex":1, + "visibility":10, + "ozone":298.79 + } + ] + }, + "daily":{ + "summary":"No precipitation throughout the week, with high temperatures falling to 68°F on Thursday.", + "icon":"clear-day", + "data":[ + { + "time":1531206000, + "summary":"Partly cloudy overnight.", + "icon":"partly-cloudy-night", + "sunriseTime":1531227460, + "sunsetTime":1531280088, + "moonPhase":0.91, + "precipIntensity":0, + "precipIntensityMax":0, + "precipProbability":0, + "temperatureHigh":73.88, + "temperatureHighTime":1531256400, + "temperatureLow":54.96, + "temperatureLowTime":1531314000, + "apparentTemperatureHigh":73.88, + "apparentTemperatureHighTime":1531256400, + "apparentTemperatureLow":54.96, + "apparentTemperatureLowTime":1531314000, + "dewPoint":51.8, + "humidity":0.62, + "pressure":1015.37, + "windSpeed":6.26, + "windGust":19.67, + "windGustTime":1531263600, + "windBearing":254, + "cloudCover":0.06, + "uvIndex":11, + "uvIndexTime":1531252800, + "visibility":10, + "ozone":307.46, + "temperatureMin":59.24, + "temperatureMinTime":1531288800, + "temperatureMax":73.88, + "temperatureMaxTime":1531256400, + "apparentTemperatureMin":59.24, + "apparentTemperatureMinTime":1531288800, + "apparentTemperatureMax":73.88, + "apparentTemperatureMaxTime":1531256400 + }, + { + "time":1531292400, + "summary":"Partly cloudy throughout the day.", + "icon":"partly-cloudy-day", + "sunriseTime":1531313899, + "sunsetTime":1531366465, + "moonPhase":0.95, + "precipIntensity":0.0004, + "precipIntensityMax":0.0013, + "precipIntensityMaxTime":1531317600, + "precipProbability":0.01, + "precipType":"rain", + "temperatureHigh":68.57, + "temperatureHighTime":1531346400, + "temperatureLow":55.94, + "temperatureLowTime":1531400400, + "apparentTemperatureHigh":68.57, + "apparentTemperatureHighTime":1531346400, + "apparentTemperatureLow":55.94, + "apparentTemperatureLowTime":1531400400, + "dewPoint":55.07, + "humidity":0.83, + "pressure":1011.98, + "windSpeed":6.36, + "windGust":11.17, + "windGustTime":1531353600, + "windBearing":225, + "cloudCover":0.51, + "uvIndex":9, + "uvIndexTime":1531339200, + "visibility":10, + "ozone":300.94, + "temperatureMin":54.96, + "temperatureMinTime":1531314000, + "temperatureMax":68.57, + "temperatureMaxTime":1531346400, + "apparentTemperatureMin":54.96, + "apparentTemperatureMinTime":1531314000, + "apparentTemperatureMax":68.57, + "apparentTemperatureMaxTime":1531346400 + }, + { + "time":1531378800, + "summary":"Mostly cloudy until afternoon.", + "icon":"partly-cloudy-day", + "sunriseTime":1531400339, + "sunsetTime":1531452841, + "moonPhase":0.99, + "precipIntensity":0.0002, + "precipIntensityMax":0.0003, + "precipIntensityMaxTime":1531389600, + "precipProbability":0.08, + "precipType":"rain", + "temperatureHigh":68.09, + "temperatureHighTime":1531432800, + "temperatureLow":56.86, + "temperatureLowTime":1531483200, + "apparentTemperatureHigh":68.09, + "apparentTemperatureHighTime":1531432800, + "apparentTemperatureLow":56.86, + "apparentTemperatureLowTime":1531483200, + "dewPoint":54.76, + "humidity":0.81, + "pressure":1013.5, + "windSpeed":6.26, + "windGust":13.38, + "windGustTime":1531440000, + "windBearing":239, + "cloudCover":0.46, + "uvIndex":10, + "uvIndexTime":1531425600, + "visibility":10, + "ozone":298.73, + "temperatureMin":55.94, + "temperatureMinTime":1531400400, + "temperatureMax":68.09, + "temperatureMaxTime":1531432800, + "apparentTemperatureMin":55.94, + "apparentTemperatureMinTime":1531400400, + "apparentTemperatureMax":68.09, + "apparentTemperatureMaxTime":1531432800 + }, + { + "time":1531465200, + "summary":"Mostly cloudy throughout the day.", + "icon":"partly-cloudy-day", + "sunriseTime":1531486779, + "sunsetTime":1531539214, + "moonPhase":0.03, + "precipIntensity":0.0001, + "precipIntensityMax":0.0004, + "precipIntensityMaxTime":1531494000, + "precipProbability":0.04, + "precipType":"rain", + "temperatureHigh":68.29, + "temperatureHighTime":1531530000, + "temperatureLow":54.97, + "temperatureLowTime":1531569600, + "apparentTemperatureHigh":68.29, + "apparentTemperatureHighTime":1531530000, + "apparentTemperatureLow":54.97, + "apparentTemperatureLowTime":1531569600, + "dewPoint":55.01, + "humidity":0.79, + "pressure":1016.15, + "windSpeed":5.79, + "windGust":12.43, + "windGustTime":1531526400, + "windBearing":246, + "cloudCover":0.59, + "uvIndex":9, + "uvIndexTime":1531512000, + "visibility":10, + "ozone":291.77, + "temperatureMin":56.86, + "temperatureMinTime":1531483200, + "temperatureMax":68.29, + "temperatureMaxTime":1531530000, + "apparentTemperatureMin":56.86, + "apparentTemperatureMinTime":1531483200, + "apparentTemperatureMax":68.29, + "apparentTemperatureMaxTime":1531530000 + }, + { + "time":1531551600, + "summary":"Mostly cloudy until afternoon.", + "icon":"partly-cloudy-day", + "sunriseTime":1531573221, + "sunsetTime":1531625586, + "moonPhase":0.06, + "precipIntensity":0.0002, + "precipIntensityMax":0.0004, + "precipIntensityMaxTime":1531634400, + "precipProbability":0.01, + "precipType":"rain", + "temperatureHigh":70.12, + "temperatureHighTime":1531605600, + "temperatureLow":55.96, + "temperatureLowTime":1531656000, + "apparentTemperatureHigh":70.12, + "apparentTemperatureHighTime":1531605600, + "apparentTemperatureLow":55.96, + "apparentTemperatureLowTime":1531656000, + "dewPoint":54.38, + "humidity":0.78, + "pressure":1014.47, + "windSpeed":5.3, + "windGust":11.83, + "windGustTime":1531612800, + "windBearing":249, + "cloudCover":0.45, + "uvIndex":11, + "uvIndexTime":1531602000, + "visibility":10, + "ozone":288.79, + "temperatureMin":54.97, + "temperatureMinTime":1531569600, + "temperatureMax":70.12, + "temperatureMaxTime":1531605600, + "apparentTemperatureMin":54.97, + "apparentTemperatureMinTime":1531569600, + "apparentTemperatureMax":70.12, + "apparentTemperatureMaxTime":1531605600 + }, + { + "time":1531638000, + "summary":"Partly cloudy overnight.", + "icon":"partly-cloudy-night", + "sunriseTime":1531659663, + "sunsetTime":1531711955, + "moonPhase":0.1, + "precipIntensity":0, + "precipIntensityMax":0, + "precipProbability":0, + "temperatureHigh":71.35, + "temperatureHighTime":1531692000, + "temperatureLow":56.29, + "temperatureLowTime":1531742400, + "apparentTemperatureHigh":71.35, + "apparentTemperatureHighTime":1531692000, + "apparentTemperatureLow":56.29, + "apparentTemperatureLowTime":1531742400, + "dewPoint":55.37, + "humidity":0.79, + "pressure":1012.27, + "windSpeed":5.17, + "windGust":10.62, + "windGustTime":1531695600, + "windBearing":238, + "cloudCover":0.1, + "uvIndex":11, + "uvIndexTime":1531684800, + "visibility":10, + "ozone":285.99, + "temperatureMin":55.96, + "temperatureMinTime":1531656000, + "temperatureMax":71.35, + "temperatureMaxTime":1531692000, + "apparentTemperatureMin":55.96, + "apparentTemperatureMinTime":1531656000, + "apparentTemperatureMax":71.35, + "apparentTemperatureMaxTime":1531692000 + }, + { + "time":1531724400, + "summary":"Mostly cloudy throughout the day.", + "icon":"partly-cloudy-day", + "sunriseTime":1531746107, + "sunsetTime":1531798324, + "moonPhase":0.14, + "precipIntensity":0, + "precipIntensityMax":0, + "precipProbability":0, + "temperatureHigh":71.6, + "temperatureHighTime":1531778400, + "temperatureLow":58.02, + "temperatureLowTime":1531828800, + "apparentTemperatureHigh":71.6, + "apparentTemperatureHighTime":1531778400, + "apparentTemperatureLow":58.02, + "apparentTemperatureLowTime":1531828800, + "dewPoint":54.98, + "humidity":0.76, + "pressure":1012.5, + "windSpeed":5.46, + "windGust":11.95, + "windGustTime":1531782000, + "windBearing":232, + "cloudCover":0.6, + "uvIndex":7, + "uvIndexTime":1531771200, + "visibility":10, + "ozone":291.72, + "temperatureMin":56.29, + "temperatureMinTime":1531742400, + "temperatureMax":71.6, + "temperatureMaxTime":1531778400, + "apparentTemperatureMin":56.29, + "apparentTemperatureMinTime":1531742400, + "apparentTemperatureMax":71.6, + "apparentTemperatureMaxTime":1531778400 + }, + { + "time":1531810800, + "summary":"Mostly cloudy throughout the day.", + "icon":"partly-cloudy-day", + "sunriseTime":1531832551, + "sunsetTime":1531884690, + "moonPhase":0.18, + "precipIntensity":0.0002, + "precipIntensityMax":0.0008, + "precipIntensityMaxTime":1531836000, + "precipProbability":0.04, + "precipType":"rain", + "temperatureHigh":71.85, + "temperatureHighTime":1531864800, + "temperatureLow":58.53, + "temperatureLowTime":1531918800, + "apparentTemperatureHigh":71.85, + "apparentTemperatureHighTime":1531864800, + "apparentTemperatureLow":58.53, + "apparentTemperatureLowTime":1531918800, + "dewPoint":54.7, + "humidity":0.73, + "pressure":1014.04, + "windSpeed":5.71, + "windGust":11.94, + "windGustTime":1531868400, + "windBearing":242, + "cloudCover":0.5, + "uvIndex":7, + "uvIndexTime":1531854000, + "visibility":10, + "ozone":293.92, + "temperatureMin":58.02, + "temperatureMinTime":1531828800, + "temperatureMax":71.85, + "temperatureMaxTime":1531864800, + "apparentTemperatureMin":58.02, + "apparentTemperatureMinTime":1531828800, + "apparentTemperatureMax":71.85, + "apparentTemperatureMaxTime":1531864800 + } + ] + }, + "flags":{ + "sources":[ + "nearest-precip", + "nwspa", + "cmc", + "gfs", + "hrrr", + "icon", + "isd", + "madis", + "nam", + "sref", + "darksky" + ], + "nearest-station":1.839, + "units":"us" + }, + "offset":-7 +} \ No newline at end of file diff --git a/JavaScript/weather-api-resolver/index.js b/JavaScript/weather-api-resolver/index.js new file mode 100644 index 0000000..e217661 --- /dev/null +++ b/JavaScript/weather-api-resolver/index.js @@ -0,0 +1,59 @@ +const express = require('express'); +const request = require('snekfetch'); +const bodyParser = require('body-parser'); +const fs = require('fs'); + +let port = 8080; +let app = express(); + +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: true })); +app.use(express.static('./client')); + +let apiKey = '8787dcc902ae16212b6325ad5628b4c1' +let lat; +let long; +let units = 'auto'; + +app.get('/', function (req, res) { + res.sendFile( __dirname + '/client'); +}); + +app.get('/weather', async function (req, res) { + console.log('New Request from ' + req.connection.remoteAddress); + let ext = ['°C', '°F']; + let chos; + lat = req.query.lat; + long = req.query.long; + if (!req.query.celsius) { + units = 'si'; + chos = 0; + } else { + units = 'us'; + chos = 1; + } + + let weather = await startreq(); + + if (weather.toString() != -1) { + res.end(weather.toString() + ext[chos]); + } else { + res.end('Invalid Coordinates'); + } + +}); + +async function startreq() { + try { + let req = request.get(`https://api.darksky.net/forecast/${apiKey}/${lat},${long}`) + req.query('units', units) + let res = await req.send(); + + return res.body.currently.summary + ', ' + res.body.currently.temperature; + } catch (e) { + return -1; + } +} + +let server = app.listen(port); +console.log(`App listening at ${port}`); diff --git a/JavaScript/weather-api-resolver/package-lock.json b/JavaScript/weather-api-resolver/package-lock.json new file mode 100644 index 0000000..a13087b --- /dev/null +++ b/JavaScript/weather-api-resolver/package-lock.json @@ -0,0 +1,433 @@ +{ + "name": "weather-api-resolver", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "1.6.16" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.3", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.4.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "snekfetch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-4.0.4.tgz", + "integrity": "sha512-dyycG9fvwtSJqKPfMVOpXt+60qvMGe7vWLwOJDiSJaiAx+hs2EnFChG2bXCWn7ulz+zGzrHdN9/yeEb0YqEPww==" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + } + } +} diff --git a/JavaScript/weather-api-resolver/package.json b/JavaScript/weather-api-resolver/package.json new file mode 100644 index 0000000..b1c8bb3 --- /dev/null +++ b/JavaScript/weather-api-resolver/package.json @@ -0,0 +1,17 @@ +{ + "name": "weather-api-resolver", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Ben (plane000)", + "license": "MIT", + "dependencies": { + "body-parser": "^1.18.3", + "express": "^4.16.3", + "fs": "0.0.1-security", + "snekfetch": "^4.0.4" + } +} diff --git a/JavaScript/weather-api-resolver/resources/images/weather/clear-day.png b/JavaScript/weather-api-resolver/resources/images/weather/clear-day.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd166ef59b41b5ec14b04e5dfd6e94557d5c689 GIT binary patch literal 1514 zcmVm5dQl32%fn|C0 zaDiR{rlbV+Hc4MeI-j>Syn%ny7r>x|GFJf?oV+XZ26zkqrM113H4u2+Bj*fIkvG6i z0e~+8^J2=W0zUJ}Ihe<7sWkxbd7u%fj1im;2guo+#J0)|gI2esCP_Ob?U(emnVl~Y z>>Np3C5;Std?;_;HDDz$Jb{cV;1S?xfQJ_*vCqo!0wmQ-x?a*GNwty+FXObNW0HPw zv*3`K;rZ?$N%u;6R?;vxJl4!kki9_E5wOOsh`y&+Z1_l&7 zTLRc_x29JBb-+-Mo}q4R1+dHU76UyxE6^JQ6#fca;aRf>BaFKUyah~%p>qQ8Hqa9x zw>ixX@B_1#%A{u`i$E!uW{ar-# zo|;Lf1x%LIENP9IJ@3YLO1dS0{gkBHW_C2C7d}DK=OH=uhi10O@jWK#2}zxjx+HZ- zI_W-ldOmlQs(1lV?eT6;$eO(=gIP8=L|+e3@5#N31-$mS|k0go}gS7N$q6-e5?eUZZ)%>G#l|l1IA99S$EcG&FrkCUjiNt^YHW(lM@%Pg?RXX zLq!4m8UcR^(ih@6|t0C+*jcw5q`GdZBno#md@hiv|zlwnFYhUl(KB6PV+$NcnQ-c!rC0>>0d zz8gKfFNW~En<3z>Av)LhM%a8;Iz`dnz{nhyhtnKS4X~i3ebu#QYa~@k8m&v$6$+mV z3O@mptqaiR`U;1pKAX$Zf!om@;OC6e4@`2DTD7 z>#0qj?(Ld$-}Tcwc>_Gf8TMC_EBT(6x8Dc&r9SCPM^L>kovhC@vn`4CMzaf&?)LS) zJM#v(LedRp)|^U0VD_V=RapbhV<0U2`@o|90(iJ<*<7doLhcgH_$*}q14N)dIxT{F Qi~s-t07*qoM6N<$g5TZCMgRZ+ literal 0 HcmV?d00001 diff --git a/JavaScript/weather-api-resolver/resources/images/weather/clear-night.png b/JavaScript/weather-api-resolver/resources/images/weather/clear-night.png new file mode 100644 index 0000000000000000000000000000000000000000..16813d0dc08facb06ef4e8c428d05c608d2d82bc GIT binary patch literal 1143 zcmV--1c>{IP) z6nUi=ffR)01_c%ELg7auW?|w=MVPDJ^r4oneY~~n`}4vHmgSt8d1vO`ouPT)z4@Py zXP$G;obx}=J5q@fB}$YiksH`#kN_=`IwdWVG+WZF;5QK;o7v$)jwG-c=mWk4t`Uus zKy%SVP6xICC#VfqfXc8J;MT(7C`zB*z;?61x;QmqP3}z)eLFyArsXLhL`l zeMJ&mi6QDBFyJZMRTQy3z(|D9f&XR?7<8160Sk*Dwl!iWz5uKnSHBtf+fna8QD!%6 zH~tP-FroemPu*=r5W6-+>~UbWqs>-N{S{NCqakhvCFwO!@vx*`GyC09*5+yRQ?3O| z+9;{R5g(QGn3?_TX?Ke!ekt#QU+~0VH?xx=?JA!5ZMhW;bW6J5QS^(XzKG^mJn=j7 zJi{A2@!e+jS47)kPyFsY@6N{@yX?O}Tg*GL3;Xgac4m+jO~lcd?Hht*WFkg@raUg` zE=i4!_`z8Iky%yJprh#4kXL0&1^ZlxuWR7g>xuUPH|I@ot0(?z4IG1>&Fd~nFXm0~ zOi%nmTmmy2lk}>m_!VGPo&@`B+|e3&-jsC85pR_AF3^(~!B;);mRd-HS$;;+HBVoM zfVFuL?8|vOY9$H`_LoC)?)QP6z`TS<=zQR%z;I|#!cLZY5{K;x`!nF32)ASe*a6%d zqrW!bS>OmzjpKq^RN^7&vg0iN+{{)c6x}4LU()Ir)z3)UFX_Cbvy#RnwM$wk>0wFt zINCg9W=GOwTVFY5p#scF(dTqv582}!U}-N8`yH_+Nt==iHnUMP+al>{Nq=UzC-s{d zY4hnNp3yu5Ov@l&pAURE?j1~nY>qcz$V2d4h8LA?;O&@xw+n}|yftn1kX#1ZGrpnC z1)c)l15U^Ms}*2PmJcy4Aa~(F7E3#Xdj`-I@gLT=iO=2;;?*I9d!ly76ueEqry<-` z;E{Tb_6H%vZv}R4*0cLb#8Tc}PY0wGI3GfO80g4|tKDNSjmM9`ta{r%%YZ*3Qp4xd z%r>wQxELY!63{hSUe~I?$cq~Ntw3uH{@0_yDv3fR>3eG_ME3?canzSLqmqtE`a;rB zkRM-^gl>Go)FtUbNoyqC8H0L6(t0x+m0kJOXG0Hh8X-wV(=o20RWlX8DX(NAcZ~o|Lp)Qjgq*{&-X*9SyFd`^@b7 zdOX);eO%hC8>W6|;B~i1ss^6fZ-LK!+{`K}QKCeN5+(jWxDNLf93cNs_>lkr002ov JPDHLkV1j;X7RLYp literal 0 HcmV?d00001 diff --git a/JavaScript/weather-api-resolver/resources/images/weather/cloudy.png b/JavaScript/weather-api-resolver/resources/images/weather/cloudy.png new file mode 100644 index 0000000000000000000000000000000000000000..0365126279408c6d4d7ae1c26d041a4b0b4a9db1 GIT binary patch literal 693 zcmV;m0!safP)8Y1ndENvY!@!Iba5O6cJAfyMk(mISc9P(PU4lPhCAf)GO-x zyo>g!w`?BI)%|&u-K)N``FvMT=S_B(I%n&ss-t<4?axxL)hwz9+Fq8_o51)Qt?vt9 z6zI&#*~f_ZwPwQV2r${k1giqmKn1uR5${@=%AHx=%nM8ERkgoW!Y9lp^Xl+Q|G#4u z&S!Jl4r~M_)RRry!&%yV0J?JA2Q31JB4VZ)5k8!AS+Wbt9d$!9gbx;^t=|S*T(z*; ztsVo87U(W>P969!VYN#=54;8@vU_b&=mEwWKD4scxeE*yc);;6B8FEK&Q9ZLV0XbM zI#r-MBC0E;^tBSml2w!~b@y=At&CD0239(>E>JF(Ywlrn9q<|GEs^l%h?uVx;q4`p zT>w7SOX>cSrSoJ&SWozC$%OCKZ9LRI;7c}2DLU_goe{BAGr|$E08Eu6x|jZytyPw8 zlt6Y0xZcnJK<(nsBiFuy%Dw>x|1L#!Bb@b}W5Blp%Dx0fYRT5@r6b}Qa6D^5ib4e# ziip`&e?i@$R?Ih#v*AQTM1$f(z!_i!*b21kIdd6!o9)vFK&8-+>4`)lkw_#Gi9{li bXcxZ$71d%|->()RE>cay>- zqoyz=rJL;!*mPV9MD-4^W~^;0bud@dJLspAqarq~X>n`cakW;zg*$y_8ULKe$`beP z{2XZmV+eRHwe@dfhXhkLXViR^yDL-Qa2CwSXzahu7JeXT(SudF1u52t_g3!SA`|mM zH!}aK*$$tOv4RiC6>@wBN z^-rvAJob5p+hkh)C@+}1XQ3YNK2N!t*edVujm;{L6E8o0GVR}|hQwm8|2=bUA8_1Y z6PvtsFN63bJ@2OPje(C?|FT?D?OiTwV>bEy1J;DaDVKt-_pMET`ONU$p~?GIEPl_A zlRx16IpF`#9c*EZb6alzm$mp`={$QT5S+bWK7;wcr;*XIbHK1<@O1TaS?83{1OV4n BtZe`Q literal 0 HcmV?d00001 diff --git a/JavaScript/weather-api-resolver/resources/images/weather/partialy-cloudy-day.png b/JavaScript/weather-api-resolver/resources/images/weather/partialy-cloudy-day.png new file mode 100644 index 0000000000000000000000000000000000000000..13fbbe9ba3d575982660c1cf283fa7d7bc024d0c GIT binary patch literal 1597 zcmV-D2EzG?P)%Z6STmQ92N&rAFV2rL70Hc8#pi80EttcV8T_lxDT6(n*E_a`g0#jq|J$-@6h1kL= zyaNn~iR?p?c1da|v@yJxEAc(hHlocrK%=vFOQ8||kpE&~3vHDE?|JN;2Z{=f@D?A! zO~BY3?UVsq)9mal#ARuZ58(!26HuJPYlkk@TaPHDpP4 zjHK0)I{RerF0|G)U>49Zf{ilZdEk&w3*Q%|ewL3HAZf6qyCn6K)KgOGWt@_9RMG+0 z3wE0sp5L~WG+olmk~+BLZf16(5XbQdUyKpL+md|s+BvsZUk^RwZ#L5hRnvl} z=VDKp$`Gg^AMwN2=G0` z<&R8D-{7}q=c)~j4oFX&aEOmoovI`?IYo1xq=)@N(Oeae{sHNm^FVl0Se?wQ9{60+ zJTu!Fm&D^2%OdGW9ta=JqE6$@tT|30zSJk}l$q5h&DP8=NczJktAnRZbKD}HpTWjF z>I<_a?UVGI`+l9Ic5%;+MH$w^hJq8uTiT_8QIa;Kg^qr`r1$@YaB%?9HZC@ONs<92 zPE)Q5uyePhgL%@-u9eh7()E%qN;+X?r=l3_4Qxy6wj*5LtpSVw+Js4V1Lgud0wS(I zfz`lNufULv;VCX0OUGS@NP5^kzRcNK8Nj`P0l{7kv0N}*;Zv%pymSCTxJI(BDlose2BD3yo=~fYF z7jV=X6>H+?b}xiDI0-!10-N(m4&$Q|Hegi-C#y1DXaTwdPXlkd<`g*$!9};ACQ2+36Wh7Lvr5 zaYsf|fYU)YZh%o44(gJ|{y0cZP93hf?_GhnfeXO2w6b5(x;PgH;X2?8;AWqIzrE-C zFj^m{iz1S}Nz#pyDkN0_&jQytx#hT-{pBhCKmlxrk404~2B&FDizOX&0YtheFsJ|s zABvN33f(0=CFzE=^s)jVTp5+{5TCTIl7^buuC(+stxOh4>*8+V<&wsknVdJrr$p+`$a<^a7XOh-uT6+Eg8}x{ZT`up000000NkvXXu0mjfBjN9e literal 0 HcmV?d00001 diff --git a/JavaScript/weather-api-resolver/resources/images/weather/partialy-cloudy-night.png b/JavaScript/weather-api-resolver/resources/images/weather/partialy-cloudy-night.png new file mode 100644 index 0000000000000000000000000000000000000000..37a82d0865f71b4bb7d3db7eefdd83f1554650e5 GIT binary patch literal 1199 zcmV;g1W@~lP)lq1UyMZ zK~!ko?V4YR6;&L^zrSm%wruLAmRX^txmng~|DnJVUlNKCH4Bk^DaZ(-hl+@7K`L0I zrxNNVh#)Y^v|0npMT3-RL&$O$Sw(8iUCOrB%H8(U%LupOoVj;q?%kPz`-Oej-#NeE zIiERmesktGS8AxCh8k+9q1?zOVh~`Oq(zdhk<=<_dhi$4ZZkVj$SVmf0Xl$#z`s=1 zVW7EakWIiQ;5*{!cVJP`VAlZ0Nv5?$0-XiyBDr2K66`I&i4?Fsz~rL9t_1!_0s9Yd zW07G0t^%qX=<>9^SrpitfZ+)#Cg<>l&p*T9k< zk~H68AC>fgnVs_Z`Od~ec?W*VV}H%e4oCR?8S_G94-B+RTIy)}MN&rv_g_8snR#B} z^&b0nGdo+s_h*m2JU*>+2XX1|0rFz?3}R($`9w zYkBJlke3urd$8zBBJ7 zaR)N9qY-GgTvMoF<+`sEg1l=i142ZECg-_t_LozCGb>F#iBc9 z+)fYdDDbeO|6Jg?;48*Chu<);19&9$9TF7cTouRJDdRp7I>n8L3-Z84z^lP{)#_AG zcxXyGu?|n*r)zKr-2)tRZIhtp-It;ad;qvK$)wsn0s9hP#s9}|1~vne%4~N7XGyOU zKwFYY?eheDwhoDMNy-9$SU&>O<4$6I#8PVo!s__fV+STW5j9$c2@c8fLdu;T;LhN zk%)l%fvc*Bvnl4YwN~1av90xU#eB4U|-)L z>3&IHND6;ZoSg&UuDbo!5}09TXUhJ6U(&h^VUaYiRIljeuz`+eyt*Hm*~!ub4)|Gy zu%nWmsitaKOMR8$DtDS$Ulvu+2QxTbeGHVc%N+351jDvunmK}E!h3ZF9Rs#zy0Rf? z3reYjb%6a4SnPdzWDGt{(gsOuB`uZ|x2!r6B*I=vpG*40%%Was^dD9*?yW8*9RL6T N002ovPDHLkV1fpxI!6Ei literal 0 HcmV?d00001 diff --git a/JavaScript/weather-api-resolver/resources/images/weather/rain.png b/JavaScript/weather-api-resolver/resources/images/weather/rain.png new file mode 100644 index 0000000000000000000000000000000000000000..95ce09dbf41ce257fe40a44b4a9623d52f69a227 GIT binary patch literal 1013 zcmVwB=*mwjs0%@;=)#X~Tm%FW z>Y@wVF02S{#8oMNhFT0n)S@&Siwf@A(zIBuZA`66e=c$tA-wzU%lpW?_nQB9=AApg zH)rOYnKMC~q^<(C01pA1fc3!2r1=7H1~>*B1wM<2Qxs9^pn5?4+xm4y9aHZw5@?^g zSN+H4bXeVxci7w2pKYBksn6vVcDs7f_UO&L!ERBfZLdc10(+f>tEJN9S*wgQ|0`f{|Ld<(o75kF>i z>}tUH(>a3$*bIE9zSItP{=t0fjh4BzdNc4_-jhDysfhTf6)t^m0kYfx-dAsF1@KTo zQu|fF?uK1j9Ri*Jo(0wwCL#qOKWMHv@-&eu}H( z5pi24uzCkD4y>m5x+Wr~Q#UR3D&WJCzyjQmwM*{+Hc}o9WC1@S#V9nH0y&CwvBq8Y-FdPwAQfD|KE(4<_ zncY_x!ls3#eI z%*M7+UHgB5U8hc}U#mT3hwV|nnHM77E<5nT8u6?;TvphA^<0%iV05Okw)YtL? z{7Q}NXSfCSyVcRe-mW|VA8E8cTc`b9^X&br-qUH|UuppFZ_@T)m8VcYwJHj9HTb); zHQLTJIi`^+x%v=uPc1q&!#is{65Z5<-D}m$DYlPxItGtd8Pr=%+I^tLQkhj(G&}Z& z)I=#7YrDP8(Amfu?7bdlosJ4tr7BBlNAj9ZQFBEdd0 zZ}9J>c|giiQQcD{*a7vA1pr%9`rfLZTF`e)?JW}U2UTY5cv5_?)_-;45wEM;)UG1I zu1|K@wmu7PcjB=aJyPR4kCqX5LxXLF1-?|HZMuxWU({$jT-FPN(JC9(q&iSm;EK90 jDUD32htgiVwp;%JQ7)8loAw~L00000NkvXXu0mjfQ8m>Z literal 0 HcmV?d00001 diff --git a/JavaScript/weather-api-resolver/resources/images/weather/sleet.png b/JavaScript/weather-api-resolver/resources/images/weather/sleet.png new file mode 100644 index 0000000000000000000000000000000000000000..46784b74b80d1a9333caa5e42c5d50a92e1baa10 GIT binary patch literal 1266 zcmVv3n4|yz1b<0H zK~!ko?V3$&RAm%~pVL+uY72!TR7Ag&P=EGmOEG9?e{bH zo$q|-ocEm1hzODv0-J#?Ks#^^kn-WbfKi|yI0$@hX2Vn?B(+J}Eh(e&aY0hAq`Rw$ z=psqGBu#2=_*&BHxRbp>(k}`R6Ox{eE7`4*&MF$b9yhX^C1n*YcEpA3dP#q3e$W}# zch^-&wieh8G|toi+bwAYQ0w9BIB>ws{+_SXeNh)5SxH|=dRUT``|VZ%*+$?Puqa0E zqz`z`%zh{}v8IB}ACDPXfQ`U@NiRfU&fhEEcr7%OmUJ!fd)$*g;88Q%6NX9OQ3YA9 z0q;m!6$aroRg&5-1a?+z(vsEyj{r{rE2~A%02|C~pzOp$(v`q2U|S_2EC#0i5HL{I z2}{}td<-n3dhwH)tu0Ad(mLQfpn>W~y_sbLotC6afcFwY7T}6fUV1xlBgw(?QiPu+ zSr`wz!;%&OV=lvzf+jN?4?5wi6GnC=(xt%ZgoLDi zpu@~A1fH;&{R4cNkkfs+kZe#`dMg2B-!!vt%2rE~J|ouzt48zy_nX<&Z1nJxz~CHz zI0L*5+ykugjHd(W0uDt)_I=>NAhM-2aGRuo3hPRJl3Gjb-xWgRZ5n4nDd0)EOwx{7 z_Kx;RTHxzV(n?7kl5Uo?R#JW5{#ztX&4K7iNjoJq&qgGdL%a#N7ue(#k5s_abHFoZ zc0y7Ea67QX6-x>@;ii7b%zpO0Ujptc^Lx*e>pUC-_5!_TcK+hmR-`)bDn4J(MxBuK zuB6VOB3sm`i)i1~Kr`@afgWAp4lx5vN;*=JgP8+rBHFhVxT#Ql=V66A_kXgE3&JNZd~Q_~}>@meee%-Q{4rhnr#;a%a{J zOw5qLbo=;Fth}_x-do5O^PBu`{sEi;j*@#wHWje8SXdeXzKva2l60G^q$hy8@{)&r z07*qoM6N<$f`kf8`2YX_ literal 0 HcmV?d00001 diff --git a/JavaScript/weather-api-resolver/resources/images/weather/snow.png b/JavaScript/weather-api-resolver/resources/images/weather/snow.png new file mode 100644 index 0000000000000000000000000000000000000000..b94c41f672238f38081996a88722c66292beef47 GIT binary patch literal 18317 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 literal 0 HcmV?d00001 diff --git a/JavaScript/weather-api-resolver/resources/images/weather/wind.png b/JavaScript/weather-api-resolver/resources/images/weather/wind.png new file mode 100644 index 0000000000000000000000000000000000000000..aa063ad9cc2e764ec5bc2d35c08d47564a3b58ae GIT binary patch literal 18584 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 literal 0 HcmV?d00001