Code: Select all
--[[
name : script_time_horoscope.lua
auteur : papoo
Mise à jour : 30/03/2020
Création : 26/06/2016 =>V1.x https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_time_horoscope.lua
https://pon.fr/dzvents-horoscope-v2
https://easydomoticz.com/forum/
github : https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/horoscope.lua
Principe :
Ce script vérifie toutes les x heures les horoscopes du site <a href="https://astro.rtl.fr/horoscope-jour-gratuit">astro.rtl.fr</a> signe par signe et mets à jour les éventuels devices texte associés sur domoticz
]]--
local les_horoscopes = {
{ device = 'Horoscope 1', signe = 'belier'},
{ device = 'Horoscope 2', signe = 'capricorne'},
{ device = 'Horoscope 3', signe = 'vierge'},
{ device = 'Horoscope 4', signe = 'balance'},
}
local horoscope = ''
local device = ''
local signe = ''
local site_url = 'https://astro.rtl.fr/horoscope-jour-gratuit' -- url
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local scriptName = 'Horoscope'
local scriptVersion = '2.0'
return {
active = true,
on = {
timer = { 'every 6 hours' },--https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting#timer_trigger_rules
httpResponses = { 'belier','taureau','gemeaux','cancer','lion','vierge','balance','scorpion','sagittaire','capricorne','verseau','poissons' } -- Trigger
--httpResponses = { 'cancer','capricorne' } -- Trigger
},
logging = {
level = domoticz.LOG_DEBUG, -- Seulement un niveau peut être actif; commenter les autres
-- level = domoticz.LOG_INFO, -- Only one level can be active; comment others
-- level = domoticz.LOG_ERROR,
-- level = domoticz.LOG_MODULE_EXEC_INFO,
marker = scriptName..' v'..scriptVersion },
execute = function(dz, item)
local function logWrite(str,level) -- Support function for shorthand debug log statements
dz.log(tostring(str),level or dz.LOG_DEBUG)
end
--------------------------------------------
local function TronquerTexte(texte, nb) -- texte à tronquer, Nb maximum de caractère
local sep ="[?;!.]"
local DernierIndex = nil
texte = string.sub(texte, 1, nb)
local p = string.find(texte, sep, 1)
DernierIndex = p
while p do
p = string.find(texte, sep, p + 1)
if p then
DernierIndex = p
end
end
return(string.sub(texte, 1, DernierIndex))
end
--------------------------------------------
function unescape(str)--remplace le code html
if (str) then
str = string.gsub( str, ' ', ' ')
str = string.gsub( str, '¡', '¡')
str = string.gsub( str, '¢', '¢')
str = string.gsub( str, '£', '£')
str = string.gsub( str, '¤', '¤')
str = string.gsub( str, '¥', '¥')
str = string.gsub( str, '¦', '¦')
str = string.gsub( str, '§', '§')
str = string.gsub( str, '¨', '¨')
str = string.gsub( str, '©', '©')
str = string.gsub( str, 'ª', 'ª')
str = string.gsub( str, '«', '«')
str = string.gsub( str, '¬', '¬')
str = string.gsub( str, '­', '')
str = string.gsub( str, '®', '®')
str = string.gsub( str, '¯', '¯')
str = string.gsub( str, '°', '°')
str = string.gsub( str, '±', '±')
str = string.gsub( str, '²', '²')
str = string.gsub( str, '³', '³')
str = string.gsub( str, '´', '´')
str = string.gsub( str, 'µ', 'µ')
str = string.gsub( str, '¶', '¶')
str = string.gsub( str, '·', '·')
str = string.gsub( str, '¸', '¸')
str = string.gsub( str, '¹', '¹')
str = string.gsub( str, 'º', 'º')
str = string.gsub( str, '»', '»')
str = string.gsub( str, '¼', '¼')
str = string.gsub( str, '½', '½')
str = string.gsub( str, '¾', '¾')
str = string.gsub( str, '¿', '¿')
str = string.gsub( str, 'À', 'À')
str = string.gsub( str, 'Á', 'Á')
str = string.gsub( str, 'Â', 'Â')
str = string.gsub( str, 'Ã', 'Ã')
str = string.gsub( str, 'Ä', 'Ä')
str = string.gsub( str, 'Å', 'Å')
str = string.gsub( str, 'Æ', 'Æ')
str = string.gsub( str, 'Ç', 'Ç')
str = string.gsub( str, 'È', 'È')
str = string.gsub( str, 'É', 'É')
str = string.gsub( str, 'Ê', 'Ê')
str = string.gsub( str, 'Ë', 'Ë')
str = string.gsub( str, 'Ì', 'Ì')
str = string.gsub( str, 'Í', 'Í')
str = string.gsub( str, 'Î', 'Î')
str = string.gsub( str, 'Ï', 'Ï')
str = string.gsub( str, 'Ð', 'Ð')
str = string.gsub( str, 'Ñ', 'Ñ')
str = string.gsub( str, 'Ò', 'Ò')
str = string.gsub( str, 'Ó', 'Ó')
str = string.gsub( str, 'Ô', 'Ô')
str = string.gsub( str, 'Õ', 'Õ')
str = string.gsub( str, 'Ö', 'Ö')
str = string.gsub( str, '×', '×')
str = string.gsub( str, 'Ø', 'Ø')
str = string.gsub( str, 'Ù', 'Ù')
str = string.gsub( str, 'Ú', 'Ú')
str = string.gsub( str, 'Û', 'Û')
str = string.gsub( str, 'Ü', 'Ü')
str = string.gsub( str, 'Ý', 'Ý')
str = string.gsub( str, 'Þ', 'Þ')
str = string.gsub( str, 'ß', 'ß')
str = string.gsub( str, 'à', 'à')
str = string.gsub( str, 'á', 'á')
str = string.gsub( str, 'â', 'â')
str = string.gsub( str, 'ã', 'ã')
str = string.gsub( str, 'ä', 'ä')
str = string.gsub( str, 'å', 'å')
str = string.gsub( str, 'æ', 'æ')
str = string.gsub( str, 'ç', 'ç')
str = string.gsub( str, 'è', 'è')
str = string.gsub( str, 'é', 'é')
str = string.gsub( str, 'ê', 'ê')
str = string.gsub( str, 'ë', 'ë')
str = string.gsub( str, 'ì', 'ì')
str = string.gsub( str, 'í', 'í')
str = string.gsub( str, 'î', 'î')
str = string.gsub( str, 'ï', 'ï')
str = string.gsub( str, 'ð', 'ð')
str = string.gsub( str, 'ñ', 'ñ')
str = string.gsub( str, 'ò', 'ò')
str = string.gsub( str, 'ó', 'ó')
str = string.gsub( str, 'ô', 'ô')
str = string.gsub( str, 'õ', 'õ')
str = string.gsub( str, 'ö', 'ö')
str = string.gsub( str, '÷', '÷')
str = string.gsub( str, 'ø', 'ø')
str = string.gsub( str, 'ù', 'ù')
str = string.gsub( str, 'ú', 'ú')
str = string.gsub( str, 'û', 'û')
str = string.gsub( str, 'ü', 'ü')
str = string.gsub( str, 'ý', 'ý')
str = string.gsub( str, 'þ', 'þ')
str = string.gsub( str, 'ÿ', 'ÿ')
str = string.gsub( str, '€', '€')
str = string.gsub( str, '&#(%d+);', function(n) return string.char(n) end )
str = string.gsub( str, '&#x(%d+);', function(n) return string.char(tonumber(n,16)) end )
str = string.gsub( str, '&', '&' ) -- Be sure to do this after all others
end
return (str)
end
--------------------------------------------
if (item.isTimer) then
for index,record in pairs(les_horoscopes) do-- On parcourt chaque horoscope
device = record.device
if device ~= nil and device ~= '' and dz.devices(device).name ~= nil then
logWrite('--- --- --- traitement '..device..' --- --- --')
signe = record.signe
dz.openURL({--https://www.domoticz.com/wiki/DzVents:_next_generation_LUA_scripting#httpResponses
url = site_url..'/'..signe,
callback = signe
})
end
end --for
end
if (item.isHTTPResponse and item.ok) then
logWrite('--- --- --- traitement --- --- --')
for index,record in pairs(les_horoscopes) do-- On parcourt chaque horoscope
device = record.device
if dz.utils.deviceExists(record.device) then
logWrite('--- --- --- traitement '..device..' --- --- --')
signe = record.signe
if item.trigger == signe then
logWrite('--- --- --- traitement signe '..item.trigger..' --- --- --')
for instance in item.data:gmatch("<body>(.-)</body>") do
div, horoscope=instance:match('<h2>En résumé</h2>(.-)<p class="text">(.-)</p>')
end
horoscope = TronquerTexte(unescape(horoscope), 240)
logWrite(horoscope)
dz.devices(record.device).updateText(horoscope or 'Pas d\'horoscope aujourd\'hui')
end
end
end --for
end
end
}