Page 1 sur 1

Convertir les espaces, points etc...

Publié : 22 déc. 2016, 19:36
par stephdes
Bonsoir à tous !

J'en appel aux pros du LUA et du JSON. Pour faire simple, je cherche à faire parler Domoticz sur la base d'un script de jmleglise. Mon domoticz est sous windows et parle déjà à travers SARAH à l'aide de la commande : http://localhost:8888/?tts=blablabla

Jusqu'ici, pas de problème. Sauf que dans mon cas, le texte que j'ai à lui faire dire comporte des espaces et autre ponctuation et du coup, Domoticz me retourne un : Error: Error opening url: http://localhost:8888/?tts=Risque de pluie

Ma question est, dans le script ci-dessous, comment dois-je faire pour les espaces (et autres) soient encodés genre "%20" pour un espace ?

Merci de votre aide !

Code : Tout sélectionner

commandArray = {}

local timeNow= os.date("*t")

if otherdevices['Libre2'] == 'On' and
timeNow.hour >16
then
local sentence="Hello%20nous%20sommes%20le%20"..tonumber(os.date("%d")) -- Good morning, today we are the ..
local curl = 'C:\\curl\\bin\\curl.exe '

-- #############  TEMPERATURE & WEATHER FORECAST  #################   
   sentence=sentence.."%20La%20température%20extérieure%20est%20de%20"..uservariables['Froid'].."%20degré" -- outdoor temperature

   json = (loadfile "C:\\Program Files (x86)\\Domoticz\\scripts\\lua\\JSON.lua")()
   local city = "Dijon"
   local wuAPIkey = "xxx" -- Your Weather Underground API Key
   local file=assert(io.popen(curl.. 'http://api.wunderground.com/api/'..wuAPIkey..'/forecast/lang:FR/q/France/'..city..'.json'))   
   local raw = file:read('*all')
   file:close()   
   local jsonForecast = json:decode(raw)   
  -- prevision=jsonForecast.forecast.txt_forecast.forecastday[1].fcttext_metric  -- complete prevision
     prevision=jsonForecast.forecast.simpleforecast.forecastday[1].conditions  -- small forecast

print ("<font color='#f3031d'>TESTTESTEST</font>")
commandArray['OpenURL']="http://localhost:8888/?tts="..prevision..""


end

return commandArray

Re: Convertir les espaces, points etc...

Publié : 22 déc. 2016, 20:02
par vil1driver
Salut,

Code : Tout sélectionner

-- encode du texte pour le passer dans une url
function url_encode(str)
  if (str) then
    str = string.gsub (str, "\n", "\r\n")
    str = string.gsub (str, "([^%w %-%_%.%~])",
        function (c) return string.format ("%%%02X", string.byte(c)) end)
    str = string.gsub (str, " ", "+")
  end
  return str	
end

Code : Tout sélectionner

sentence = url_encode(sentence)

Re: Convertir les espaces, points etc...

Publié : 23 déc. 2016, 22:35
par stephdes
Si seulement ça pouvait le faire...

Je teste et je te redis ! En tout cas merci Vil1driver !!!!! ;)

Re: Convertir les espaces, points etc...

Publié : 23 déc. 2016, 22:46
par stephdes
Bingo !!!! Ca marche impec !!!

Merci Vil1driver !!! :D :D :D

Re: Convertir les espaces, points etc...

Publié : 23 déc. 2016, 23:09
par vil1driver
De rien ;)