Featch weather forecast from Apixu
Example: Featch weather forecast from Apixu
Getting API key
Create free account on https://www.apixu.com. Once this is done you will see API key which will be used in the script below.
Scheduled script
Make sure that your script does not fetch data too quickly (not less than once in 5 minutes).
In this example, we will fetch the data every 10 minutes.
In the below script change key variable to your API key, location variable to required location in textual form. This example fetches current weather condition and forecast for today and tomorrow. Fields can be found in apixu documentation: https://www.apixu.com/doc/forecast.aspx (day Element).
- require('json')
- https = require('ssl.https')
- escape = require('socket.url').escape
-
- key = 'my_api_key'
- location = 'my location name'
-
- url = 'https://api.apixu.com/v1/forecast.json?key=%s&q=%s&days=2'
- url = string.format(url, key, escape(location))
-
- res = https.request(url)
-
- data = json.pdecode(res)
- if type(data) ~= 'table' then
- alert('failed to load weather data')
- return
- end
-
- if data.error then
- log('error', data.error)
- return
- end
-
- current = data.current
- today = data.forecast.forecastday[ 1 ].day
- tomorrow = data.forecast.forecastday[ 2 ].day
-
- -- log(current, today, tomorrow)
-
- -- temperature in C
- grp.write('32/1/1', current.temp_c)
- -- "feels like" temperature in C
- grp.write('32/1/2', current.feelslike_c)
- -- humidity as percentage
- grp.write('32/1/3', current.humidity)
- -- wind speed in kilometers per hour
- grp.write('32/1/4', current.wind_kph)
- -- uv index
- grp.write('32/1/5', current.uv)
- -- weather condition text
- grp.write('32/1/6', current.condition.text)
- -- pressure in millibars
- grp.write('32/1/7', current.pressure_mb)
- -- precipitation amount in millimeters
- grp.write('32/1/8', current.precip_mm)
-
- -- minimum temperature in celsius for the day
- grp.write('32/2/1', today.mintemp_c)
- -- maximum temperature in celsius for the day
- grp.write('32/2/2', today.maxtemp_c)
- -- average temperature in celsius for the day
- grp.write('32/2/3', today.avgtemp_c)
- -- average humidity as percentage
- grp.write('32/2/4', today.avghumidity)
- -- maximum wind speed in kilometers per hour
- grp.write('32/2/5', today.maxwind_kph)
- -- uv index
- grp.write('32/2/6', today.uv)
- -- weather condition text
- grp.write('32/2/7', today.condition.text)
- -- total precipitation in millimeters
- grp.write('32/2/8', today.totalprecip_mm)
-
- -- minimum temperature in celsius for the day
- grp.write('32/3/1', tomorrow.mintemp_c)
- -- maximum temperature in celsius for the day
- grp.write('32/3/2', tomorrow.maxtemp_c)
- -- average temperature in celsius for the day
- grp.write('32/3/3', tomorrow.avgtemp_c)
- -- average humidity as percentage
- grp.write('32/3/4', tomorrow.avghumidity)
- -- maximum wind speed in kilometers per hour
- grp.write('32/3/5', tomorrow.maxwind_kph)
- -- uv index
- grp.write('32/3/6', tomorrow.uv)
- -- weather condition text
- grp.write('32/3/7', tomorrow.condition.text)
- -- total precipitation in millimeters
- grp.write('32/3/8', tomorrow.totalprecip_mm)