This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Weather Apixu
#1
Hello, I created this scrip in several Logic Machine to know meteorological data and they worked correctly until a while ago they no longer work, they could help me find out what the error is or why they don't work.

Thank you


*****************************************************************************************************
--  https://www.apixu.com/

require('json')
https = require('ssl.https')
escape = require('socket.url').escape

key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  --API KEY  
location = 'Alcobendas'  -- lugar de clima


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')
  log('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


--INFO UTILIZADA

-- temperature in C
grp.write('15/1/2', current.temp_c)
-- weather condition text
grp.write('15/1/1', current.condition.text)
-- minimum temperature in celsius for the day
grp.write('15/1/4', today.mintemp_c)
-- maximum temperature in celsius for the day
grp.write('15/1/5', today.maxtemp_c)
-- weather condition text
grp.write('15/1/3', today.condition.text)
-- maximum temperature in celsius for the day
grp.write('15/1/8', tomorrow.maxtemp_c)
-- weather condition text
grp.write('15/1/6', tomorrow.condition.text)
-- minimum temperature in celsius for the day
grp.write('15/1/7', tomorrow.mintemp_c)
-- "feels like" temperature in C
grp.write('15/1/9', current.feelslike_c)
-- humidity as percentage
grp.write('15/1/12', current.humidity)
-- wind speed in kilometers per hour
grp.write('15/1/11', current.wind_kph)
-- uv index
grp.write('15/1/15', current.uv)
-- pressure in millibars
grp.write('15/1/14', current.pressure_mb)
-- "wind_dir"
grp.write('15/1/10', current.wind_dir)
-- "sunrise"
Reply
#2
See here: https://forum.logicmachine.net/showthrea...8#pid13858
Reply
#3
Hello
I have changed the scrip as it has told me and now in registers I have no error but in registration error I have this message:

User script:15: attempt to index global 'http' (a nil value)
stack traceback:
User script:15: in main chunk


Could you help me since it is a scrip that I need in several machines.

Thank you

*********************************************************************************************************
-- https://www.apixu.com/

require('json')
https = require('ssl.https')
escape = require('socket.url').escape

key = 'My_Api_Key' --API KEY despues de realizar el registro
location = 'Alcobendas' -- lugar de clima


url = 'http://api.apixu.com/v1/forecast.json?key=%s&q=%s&days=2'
url = string.format(url, key, escape(location))


res = http.request(url)

data = json.pdecode(res)
if type(data) ~= 'table' then
alert('failed to load weather data')
log('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


--INFO UTILIZADA

-- temperature in C
grp.write('15/1/2', current.temp_c)
-- weather condition text
grp.write('15/1/1', current.condition.text)
-- minimum temperature in celsius for the day
grp.write('15/1/4', today.mintemp_c)
-- maximum temperature in celsius for the day
grp.write('15/1/5', today.maxtemp_c)
-- weather condition text
grp.write('15/1/3', today.condition.text)
-- maximum temperature in celsius for the day
grp.write('15/1/8', tomorrow.maxtemp_c)
-- weather condition text
grp.write('15/1/6', tomorrow.condition.text)
-- minimum temperature in celsius for the day
grp.write('15/1/7', tomorrow.mintemp_c)
-- "feels like" temperature in C
grp.write('15/1/9', current.feelslike_c)
-- humidity as percentage
grp.write('15/1/12', current.humidity)
-- wind speed in kilometers per hour
grp.write('15/1/11', current.wind_kph)
-- uv index
grp.write('15/1/15', current.uv)
-- pressure in millibars
grp.write('15/1/14', current.pressure_mb)
-- "wind_dir"
grp.write('15/1/10', current.wind_dir)
-- "sunrise"
Reply
#4
You are missing this line:
Code:
http = require('socket.http')
Reply
#5
(13.09.2019, 17:18)admin Wrote: You are missing this line:
Code:
http = require('socket.http')
Thank you very much that was what was missing to change the code
Reply
#6
Hi Admin,
I use the same API weather service and web response is the following:

{"request":{"type":"City","query":"Turin, Italy","language":"en","unit":"m"},"location":{"name":"Turin","country":"Italy","region":"Piemonte","lat":"45.050","lon":"7.667","timezone_id":"Europe\/Rome","localtime":"2019-10-02 09:58","localtime_epoch":1570010280,"utc_offset":"2.0"},"current":{"observation_time":"07:58 AM","temperature":16,"weather_code":116,"weather_icons":["https:\/\/assets.weatherstack.com\/images\/wsymbols01_png_64\/wsymbol_0002_sunny_intervals.png"],"weather_descriptions":["Partly cloudy"],"wind_speed":0,"wind_degree":288,"wind_dir":"WNW","pressure":1005,"precip":2.8,"humidity":94,"cloudcover":25,"feelslike":16,"uv_index":5,"visibility":10,"is_day":"yes"}}

to show localtime I use

location = data.location
grp.write('7/1/4', location.localtime)

But result is not "2019-10-02 09:58" but only "2019-10-02 09". Response is not complete. How can read evething? 

In order to read "weather_descriptions" between [...] what is the correct instruction?

Thanks.
Reply
#7
Check 7/1/4 data type, it's probably 14 byte string. That's why 2019-10-02 09:58 does not fit there.
Reply
#8
(02.10.2019, 08:20)admin Wrote: Check 7/1/4 data type, it's probably 14 byte string. That's why 2019-10-02 09:58 does not fit there.

Yes, you're right. What do you suggest? 

Thanks.
Reply
#9
You change year to 2 digits by using string.sub() or remove year completely.
Reply
#10
(02.10.2019, 08:42)admin Wrote: You change year to 2 digits by using string.sub() or remove year completely.

Ok thanks.

What about "weather_descriptions":["Partly cloudy"]

How can exactr it? If I use the same command of other information message is blank.

Thanks.
Reply
#11
Like this:
Code:
description = data.current.weather_descriptions[1]
Reply


Forum Jump: