Attention : Suite à l’arrêt de l’API YAHOO, cet article est obsolète. Rien ne fonctionne.
Si vous connaissez une API qui permette d’interroger le marché boursier Français et qui est gratuite, faites en part dans les commentaires. Merci
J’ai eu l’idée de suivre les cours de mes actions boursières dans Domoticz.
Hein, quoi, c’est n’importe quoi ! Aller mettre des cours de la bourse dans Domoticz !!
Ben je dirais que c’est pratique à plusieurs titres (!) : on peut placer des alertes/notifications sur un cours à atteindre (au plus haut, au plus bas) , il y a les courbes qui s’affichent et l’affichage sur une custom page dédiée c’est bien pratique, et puis c’est amusant.
L’idée est de récupérer les valeurs de cours via l’API de Yahoo finance et de l’afficher dans un widget.
Yahoo Finance
Depuis le site https://fr.finance.yahoo.com/ on retrouve les codes de nos actions à suivre ORA.PA pour Orange, ENGI.PA pour ENGIE ….
L’API Yahoo nous renverra les cours de bourse, en temps réel, au travers d’un fichier csv contenant le nom, la valeur et le % d’évolution (+ ou – X %). Infos https://code.google.com/p/yahoo-finance-managed/wiki/csvQuotesDownload
J’ai choisi d’utiliser et de suivre la valeur instantanée du cours.
Coté Domoticz
Le meilleur widget que j’ai réussi à trouver est le Voltage (Tension) car il supporte 3 chiffres après la virgule et les notifications dont j’ai besoin pour la suite.
Il faut donc créer autant de widgets virtuel de type « Tension »‘ que d’actions boursières à suivre. Ils apparaissent dans l’onglet « Mesures »
Notez soigneusement les noms que vous avez attribués à vos capteurs virtuels pour la suite et relevez les idx Domoticz depuis la page « Matériel »
J’ai également crée un Widget interrupteur nommé « Bourse » qui passe à On à l’ouverture de la bourse (7h30) et à Off à la fermeture (17h30) via son propre planning. Cela permet de démarrer et arrêter les scripts Lua en dehors de ces horaires.
Un peu de code
Bien sur il nous faut interroger yahoo finance pour chaque action et valoriser le widget correspondant.
Le petit bout de Lua ci dessous fait le job pour une action et un widget, on l’enregistrera soit en tant que script_device_XXX.lua ou script_variable_xxxxx.lua (voir plus bas).
Le tableau taction contient l’emplacement du fichier csv, l’IDX du widget à valoriser et le code de cette action chez yahoo (ORA.PA, ACA.PA…).
Quelques print peuvent aider au débogage.
La valeur (val) est retirée du fichier csv par un
nom, val = v:match("([^,]+),([^,]+)")
car le fichier contient « CREDIT AGRICOLE »,10.62, »-2.39% », ces informations sont obtenues grâce au
&f=nl1p2
de l’interrogation de l’API Yahoo (c.f ci-dessous), n renvoyant le nom, l1 le cours instantané et p2 le % instantané.
local taction={ {"/home/pi/domoticz/scripts/lua/ca.csv",205,"ACA.PA"} } function lines_from(file) --if not file_exists(file) then return {} end lines = {} for line in io.lines(file) do lines[#lines + 1] = line end return lines end commandArray = {} if (otherdevices['Bourse'] == 'On') then for i, v in pairs(taction) do file=v[1] codeidx=v[2] codebourse=v[3] --print('ligne '..i..' : '..file..','..codeidx..','..codebourse) os.execute ('wget "http://finance.yahoo.com/d/quotes.csv?s=' .. codebourse .. '&f=nl1p2" -q -O ' .. file ) local lines = lines_from(file) for k,v in pairs(lines) do --print('line[' .. k .. ']', v) nom, val = v:match("([^,]+),([^,]+)") end end commandArray['UpdateDevice'] = codeidx .. "|0|" .. val end return commandArray
Pour éviter le lancement de X scripts toutes les minutes, on peut aussi transformer ces scripts en script_variable_XXX.lua , scripts qui ne seront déclenchés qu’au changement d’une variable Domoticz que l’on pourra modifier via un script shell qui la met à jour à intervalles définis dans crontab.
commandArray = {} if(uservariablechanged['go_yahoo']) then...
Les notifications
Maintenant nous pouvons indiquer des valeurs de cours au dessus/en dessous desquelles nous devons être alertés par une simple notification Domoticz.
L’affichage
Bon d’accord ça surcharge un peu l’affichage de la page des « Mesures » dans Domoticz, mais franchement qui l’utilise ?
Faites donc une jolie custom page comme décrite ici https://easydomoticz.com/forum/viewtopic.php?f=17&t=331
et avec cette mise en page
//page 2 ['204','Euro','cell2_1','Cours EDF','','','color:green;font-size:50%;font-weight:bold','x < 9 || x > 11'], ['205','Euro','cell2_2','Cours CA','','','color:green;font-size:50%;font-weight:bold','x < 9 || x > 12'], ['208','Euro','cell2_3','Cours ENGIE','','','color:green;font-size:30%;font-weight:bold',''], ['206','Euro','cell2_5','Cours ORANGE','','','color:green;font-size:50%;font-weight:bold',''], ['210','Euro','cell2_6','Cours VIVENDI','','','color:green;font-size:50%;font-weight:bold',''], ['207','Euro','cell2_7','Cours VEOLIA','','','color:green;font-size:50%;font-weight:bold',''], ['0','Hide', 'cell2_8', '','','','',''], ['0','Hide', 'cell2_9', '','','','',''], ['0','Hide', 'cell2_10', '','','','',''], ['0','Hide', 'cell2_11', '','','','',''], ['0','Hide', 'cell2_12', '','','','',''], ['0','Hide', 'cell2_13', '','','','',''], ['0','Hide', 'cell2_14', '','','','',''], ['0','Hide', 'cell2_15', '','','','',''], ['0','Hide', 'cell2_16', '','','','',''], ['0','Hide', 'cell2_17', '','','','',''], ['0','Hide', 'cell2_18', '','','','',''], ['0','Hide', 'cell2_19', '','','','',''], ['0','Hide', 'cell2_20', '','','','',''], ['0','Hide', 'cell2_21', '','','','',''], ['0','Hide', 'cell2_22', '','','','',''], ['0','Hide', 'cell2_23', '','','','',''], ['0','Hide', 'cell2_24', '','','','',''], ['0','Hide', 'cell2_25', '','','','',''],
on obtient quelque chose comme cela
Remarquez que certains cours sont colorés en fonction des paramètres ‘x < 9 || x > 11’
L’affichage des courbes au sein des interrupteurs montre un plateau durant les heures de fermeture de la bourse, pas très joli, mais je n’ai pas trouvé mieux.
Voila, c’est pas plus ridicule de gérer ça que de récupérer les horaires de marées, la qualité de l’air ou si le roomba vient de décoller de sa station.
Salut,
malheureusement l’API Yahoo est arrêtée. « It has come to our attention that this service is being used in violation of the Yahoo Terms of Service. As such, the service is being discontinued. For all future markets and equities data research, please refer to finance.yahoo.com. »
Une idée de quelle autre API pourrait être utilisée