bonjour,
je bosse sur un projet processing/arduino.
arduino ok ça je connais.
processing vachement moins
pour le moment j ai récupéré un flux rss de météo (ben avec comme variable la température mes moteurs ne s'affolent pas trop )
j 'aimerai récupéré un flux plus rapide tel que les flux boursiers ex :
http://finance.yahoo.com/q;_ylt=Aodjo50 … 2&s=GS
mais je ne vois pas comment faire pour jouer avec les flux de yahoo finance
un petit tuto m'sieurs m'dames ...
a+
Hors ligne
Un possibilité est de décortiquer la page html pour extraire la balise qui te convient :
String[] lignes; String indice; void setup() { noLoop(); } void draw() { lignes = loadStrings("http://finance.yahoo.com/q;_ylt=Aodjo50Oeevvu0HbU4Vy8Lonv7gF;_ylc=X1MDMjE0MjQ3ODk0OARfcgMyBGZyA3VoM19maW5hbmNlX3dlYl9ncwRmcjIDc2EtZ3AEZ3ByaWQDBG5fZ3BzAzEwBG9yaWdpbgNmaW5hbmNlLnlhaG9vLmNvbQRwb3MDMQRwcXN0cgMEcXVlcnkDR1MsBHNhYwMxBHNhbwMx?p=http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3DGS%26ql%3D0&type=2button&fr=uh3_finance_web_gs&uhb=uhb2&s=GS"); for (int i = 0; i < lignes.length; i++) { if (lignes[i].contains("yfs_l84_gs")) { indice = lignes[i].substring(lignes[i].indexOf("yfs_l84_gs") + 12, lignes[i].indexOf("</span></span>")); } } println("Indice GS : " + indice); }
Hors ligne
merci pour ton retour.
c'est trés éléguant ce script qui parcourt seul la page (je ne montrerai pas le mien avec mes testes météorologique :s )
tu peux me faire une petite explication sur cette partie de ton script...
pourquoi"+12" et ceci "lignes[i].indexOf("</span></span>")" a quelle fonction?
sinon chez moi ça ne marche pas :
java.net.UnknownHostException: finance.yahoo.com at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.<init>(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at java.net.URL.openStream(Unknown Source) at processing.core.PApplet.createInputRaw(PApplet.java:7100) at processing.core.PApplet.createInput(PApplet.java:7068) at processing.core.PApplet.loadStrings(PApplet.java:7405) at sketch_140506a.draw(sketch_140506a.java:25) at processing.core.PApplet.handleDraw(PApplet.java:2306) at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:237) at processing.core.PApplet.run(PApplet.java:2177) at java.lang.Thread.run(Unknown Source) The file "http://finance.yahoo.com/q;_ylt=Aodjo50Oeevvu0HbU4Vy8Lonv7gF;_ylc=X1MDMjE0MjQ3ODk0OARfcgMyBGZyA3VoM19maW5hbmNlX3dlYl9ncwRmcjIDc2EtZ3AEZ3ByaWQDBG5fZ3BzAzEwBG9yaWdpbgNmaW5hbmNlLnlhaG9vLmNvbQRwb3MDMQRwcXN0cgMEcXVlcnkDR1MsBHNhYwMxBHNhbwMx?p=http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3DGS%26ql%3D0&type=2button&fr=uh3_finance_web_gs&uhb=uhb2&s=GS" is missing or inaccessible, make sure the URL is valid or that the file has been added to your sketch and is readable.
a+
Dernière modification par superdz (2014-05-06 23:45:51)
Hors ligne
En fait je cherche dans la page une balise précise :
<span id="yfs_l84_gs">154.54</span>
indexOf("yfs_l84_gs") me donne l'emplacement de cette balise, c'est à dire l'emplacement du premier caractère de la chaine, c'est-à-dire la position du caractère 'y'. Comme je veux le premier chiffre son emplacement est l'emplacement de 'y' + 12.
Comme j'ai voulu être rapide, j'ai été imprécis, j'aurais du écrire ceci :
int pos = lignes[i].indexOf("yfs_l84_gs"); indice = lignes[i].substring(pos + 12, lignes[i].indexOf("</span>", pos));
La deuxième partie donne la position du premier "</span"> après l'indice recherché.
Ainsi, nous pouvons extraire l'indice sou forme de chaîne de caractère.
http://processing.org/reference/String_indexOf_.html
L'erreur indique une URL inaccessible, pourtant, c'est l'adresse que tu nous a fournie.
Hors ligne
ok mon pb ne venait pas de mon code de mon PC:P reste a savoir quoi... je vais pas lancer un nouveau post mais si quelqu'un a une idée
donc voici le code pour processing2
String lignes[]; String indice; void setup() { size(600, 360); } void draw() { background(255); fill(0); lignes = loadStrings("http://finance.yahoo.com/q;_ylt=Aodjo50Oeevvu0HbU4Vy8Lonv7gF;_ylc=X1MDMjE0MjQ3ODk0OARfcgMyBGZyA3VoM19maW5hbmNlX3dlYl9ncwRmcjIDc2EtZ3AEZ3ByaWQDBG5fZ3BzAzEwBG9yaWdpbgNmaW5hbmNlLnlhaG9vLmNvbQRwb3MDMQRwcXN0cgMEcXVlcnkDR1MsBHNhYwMxBHNhbwMx?p=http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3DGS%26ql%3D0&type=2button&fr=uh3_finance_web_gs&uhb=uhb2&s=GS"); for (int i = 0; i < lignes.length; i++) { if (lignes[i].contains("yfs_l84_gs")) { indice = lignes[i].substring(lignes[i].indexOf("yfs_l84_gs") + 12, lignes[i].indexOf("</span></span>")); } } text("Indice GS : " + indice, width*0.15, height*0.66); }
merci encore Mushussu pour ton aide
Dernière modification par superdz (2014-05-12 16:57:01)
Hors ligne
Ah ca marche ...
bon faudra tester sur la durée donc au final voici le code processing2+librairie arduino
import processing.serial.*; import cc.arduino.*; String lignes[]; String indice; float oldIndice =0; int pos = 0; float newIndice; Arduino arduino; int ledPin = 13; void setup() { println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[1], 57600);//changer au besoin : [1] arduino.pinMode(ledPin, Arduino.OUTPUT); lignes = loadStrings("http://finance.yahoo.com/q;_ylt=Aodjo50Oeevvu0HbU4Vy8Lonv7gF;_ylc=X1MDMjE0MjQ3ODk0OARfcgMyBGZyA3VoM19maW5hbmNlX3dlYl9ncwRmcjIDc2EtZ3AEZ3ByaWQDBG5fZ3BzAzEwBG9yaWdpbgNmaW5hbmNlLnlhaG9vLmNvbQRwb3MDMQRwcXN0cgMEcXVlcnkDR1MsBHNhYwMxBHNhbwMx?p=http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3DGS%26ql%3D0&type=2button&fr=uh3_finance_web_gs&uhb=uhb2&s=GS"); for (int i = 0; i < lignes.length; i++) { if (lignes[i].contains("yfs_l84_gs")) { pos = i; println(pos);}} } void draw() { lignes = loadStrings("http://finance.yahoo.com/q;_ylt=Aodjo50Oeevvu0HbU4Vy8Lonv7gF;_ylc=X1MDMjE0MjQ3ODk0OARfcgMyBGZyA3VoM19maW5hbmNlX3dlYl9ncwRmcjIDc2EtZ3AEZ3ByaWQDBG5fZ3BzAzEwBG9yaWdpbgNmaW5hbmNlLnlhaG9vLmNvbQRwb3MDMQRwcXN0cgMEcXVlcnkDR1MsBHNhYwMxBHNhbwMx?p=http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3DGS%26ql%3D0&type=2button&fr=uh3_finance_web_gs&uhb=uhb2&s=GS"); indice = lignes[pos].substring(lignes[pos].indexOf("yfs_l84_gs") + 12, lignes[pos].indexOf("</span></span>")); /* text("Indice GS : " + indice, width*0.15, height*0.66); text("oldIndice GS : " + oldIndice, width*0.15, height*0.70); */ println("Indice GS : " + indice+" / oldIndice GS : " + oldIndice); newIndice = float(indice); println("int"+indice); if (oldIndice == newIndice){ delay(1000); oldIndice = newIndice;} else{ println("---"); arduino.digitalWrite(ledPin, Arduino.HIGH); delay(10); arduino.digitalWrite(ledPin, Arduino.LOW); oldIndice = newIndice;} }
Hors ligne
salut,
il faudrait changer le titre de ce post par arduino et golman sachs...
en effet je viens de faire l'achat d'unethernet shield afin de me libérer de mon pc et surtout pour m'amuser.
enfin voilà
je veux passer de mon code processing voir ci-dessus à celui ci-dessous (arduino) mais ça ne fonctionne pas ... :s
un coup de main svp
Dernière modification par superdz (2014-06-26 01:13:52)
Hors ligne
Pages: 1