Débutant télécharger les cours de bourse sur yahoo - Java - Programmation
Marsh Posté le 01-08-2005 à 00:05:43
Vu le merdier qu'est leur code source je crois que tu peux y renoncer tout de suite Ou alors tu vas vraiment devoir t'amuser avec les regex
Marsh Posté le 01-08-2005 à 00:32:05
bonsoir esox_ch,
tu me conseilles donc d'orienter mes recherches sur java.util.regex ??
mais on ne peut pas trouver un tutorial complet sur le téléchargement??
je croyais java plus performant que vba sur excel, j'ai l'impression qu'il faut ramer...
merci the real m oins moins pour ton adresse, je l'ai essayée dans "simple browser", il n'apprécie pas plus : "unable to retrieve url"
Marsh Posté le 01-08-2005 à 06:59:43
Bonjour,
Sans répondre à ta question, je te signale que certains logiciels boursiers téléchargent leurs bases de cours depuis les pages de téléchargement gratuit de Bousorama ou des Echos, apparemment par simples requêtes GET/POST.
Tu peux essayer de faire de même...
Nicolas
Marsh Posté le 01-08-2005 à 11:20:36
bonjour Nicolas_75,
je vais étudier la question;
Citation : |
,
jai fait quelques recherches rapides, il semble quil soit nécessaire de maîtriser le html, cest une contrainte supplémentaire pour moi.
Cest quand même extraordinaire que java demande autant de complexité. Je sais bien que le vba sur excel est un langage interprété, mais il suffit de quelques lignes pour obtenir le résultat recherché, voici un exemple de téléchargement sur euronext :
Citation : |
On ne peut pas trouver la même chose en java ???
cordialement
albert
Marsh Posté le 01-08-2005 à 11:34:40
albert95 a écrit :
|
Fort heureusement, la réponse est non.
Marsh Posté le 01-08-2005 à 20:43:16
Pour ce post, je vais être un peu long, parce que le sujet me paraît complexe et il me semble quil nécessite quelques explications sur ma démarche.
Je remercie par avance ceux et celles qui voudront bien prendre le temps de lire et essayer de mapporter des solutions.
Jai deux questions à poser :
A/ comment fonctionne
_datere = new RE("^([\\d]+)-([\\w]+)-([\\d]+)" );
stringbuffer.append("http://chart.yahoo.com/table.csv?s=" );
B/ comment créer une interopérabilité avec un package non standard ?
A/ comment fonctionne la chaîne de caractères
suite à la recommendation de esox_ch, j'ai travaillé sur regex.
Je commence à comprendre lutilisation de regex avec la liste des classes prédéfinies et les Méta caractères
_datere = new RE("^([\\d]+)-([\\w]+)-([\\d]+)" );
http://cyberzoide.developpez.com/java/regex/regex.pdf
Jai un code en exemple où il est écrit (1/YahooUSHistoricLoader)
:
Citation : |
Quoique, il semble quen principe, il devrait y avoir
Citation : |
Il ny a rien de tout cela dans
Citation : |
Dans ce code qui me sert dexemple, tiré dun.jar décompilé qui fonctionne, je ne comprends pas le fonctionnement de
Citation : |
Si StringBuffer.append() Ajoute à la fin une chaîne représentant la valeur de l'argument
et si ladresse URL est une chaîne de caractères, alors ce code 1/YahooUSHistoricLoader devrait fonctionner avec sa super classe 2/BaseYahooLoader
B/ comment créer une interopérabilité avec un package non standard ?
je ne peux pas vérifier cette procédure, parce que 2/ BaseYahooLoader fait appel à un package non standard : import robotrader.market.HistoricData;
je ne sais pas comment les rendre inter-opérables.
Il nest pas nécessaire de créer un CLASSPATH puisque le .jar fonctionne sans rien ajouter au CLASSPATH, mais alors, comment ça marche ??
http://robotrader.sourceforge.net/
Robotrader est une petite merveille, à la fois pour la programmation java, mais aussi pour lapplication en back-test des stratégies de trading
1/YahooUSHistoricLoader
Citation : |
2/ BaseYahooLoader
Citation : |
Voilà, j'espère ne pas avoir été trop long et si vous pouviez maider, je vous en serais très reconnaissant
albert
Marsh Posté le 01-08-2005 à 20:54:39
Désolé de ne faire que survoler ton post, mais qq remarques malgré tout :
A/
Dans le code qui t'interpelle, les deux lignes n'ont aucun rapport direct entre elles... Il faudrait voir leur usage dans le reste du code. Mais isolées, comme ça, tu ne peux rien en tirer.
B/
Citation : puisque le .jar fonctionne sans rien ajouter au CLASSPATH |
A beh si, tu dois l'ajouter explicitement au CLASSPATH.
Ensuite, tu pourras faire :
Code :
|
De là, à toi de lire la doc pour savoir pour où commencer : quelle classe vas-tu instancier, ou quelle factory vas-tu appeler, et comment.
Si cette librairie est prévue pour interagir, tu trouveras logiquement la doc qui va bien, et en tout cas la javadoc.
HTH.
Marsh Posté le 02-08-2005 à 14:50:22
Merci sircam,
Je reprends ma quête dans lespoir dy arriver un jour
Je peux savoir si les résultats que jobtiens sont les bons et si je peux continuer à travailler de cette manière, en interopérabilité avec dautres classes ?
Mais peut-être me trompe-je et alors jai tout faux ???
Merci davance pour tout conseil
La création manuelle du CLASSPATH, cest mon cauchemar. Heureusement, sur JCreator LE, le travail est simplifié (merci benou)
http://forum.hardware.fr/hardwaref [...] 1088-1.htm
Citation : |
jai donc créé un dossier robotrader, dans lequel jai rangé
- YahooFRHistoricLoader.jad
- YahooUSHistoricLoader.jad
- BaseYahooLoader.jad
- HistoricData.jad
A partir de JCreator , je compile, puis jexécute BaseYahooLoader :
- pour la compilation, jobtiens en output :
Citation : |
Quest-ce que cela signifie ?
javac: invalid flag => je suppose que javac ne prend pas en charge C:\robotrader\BaseYahooLoader.jad, cest normal, mais jai utilisé . Add Path pour ajouter un dossier. Alors ??
Faut-il en plus créer un classpath dans la variable denvironnement des propriétés systeme ???
Ou bien encore, faut-il réunir tous les .jad dans winzip, lui donner une extension .jar, puisque à lexécution, loutput fait référence à « path of directories and zip/jar files » ??
- pour lexécution, jobtiens :
Citation : |
Citation : |
c'est bien la démarche que je compte suivre.
cordialement
albert
Marsh Posté le 02-08-2005 à 15:00:24
Albert,
Tu tentes d'utiliser des fichiers .JAD ??? Ce sont des classes décompilées ?!
Je faisais référence à des JAR, Java archives.
J'ai l'impression que tu t'attaques à gros morceau sans y être suffisamment préparé. Tu devrais peut-être te fixer un objectif intermédiaire plus à ta portée ?
Je ne peux te conseiller, pour commencer, que d'utiliser jEdit ou Notepad ou Ultra-Edit -- non, ce n'est pas une blague. C'est un moyen dur mais efficace pr maitriser le CLASSPATH, les JAR etc. On en parle sur le famaux topic "passage-obligé".
N'essaye pas de courir avant de marcher, ça pourrait vraiment te dégoûter de Java.
Marsh Posté le 02-08-2005 à 15:09:50
j'ai une question déplacée sans doute mais...
connais tu perl ?
j'imagine - enfin je me doute - que tu as de très bons arguments pour programmer en Java, sans doutes les meilleurs arguments au monde, menfin le perl est un langage parfaitement adapté à ton problème ...
EDIT: Loin de moi l'envie de troller sur un topic Java bien entendu ...||
Marsh Posté le 02-08-2005 à 15:41:17
pour sircam,
Jai commencé par NetBeans, il présente lavantage davoir des objets qui se déplacent, mais je me perds un peu dans les modalités dutilisation. On ma conseillé éclipse, je msuis pris un peu la tête avec
JCreator ma semblé plus simple, je suis à laise.
Les .jad, je les ai obtenus en décompilant de .jar avec DJ Java Decompiler 3.5
[url] http://www.zdnet.fr/telecharger/wi [...] 66s,00.htm [/url]
jai pensé que reconstituer un programme décompilé était le le meilleur moyen dapprendre, faire du code
(cest comme cela que jai appris le vba)
jEdit ou Notepad ou Ultra-Edit, je veux bien essayer, mais ça suppose de laisser tomber ma démarche originaire.
Citation : |
je peux travailler en parallèle, je vais chercher des tutoriaux.
Ce qui me semble être le plus casse-pieds (« chiant », même), cest le CLASSPATH
En fait, pour la question du post précédent, cest bien dun problème de classpath quil sagit, non ?
Citation : |
Jai eu des monents de crise, en effet, mais java cest tout de même plus « pro » quexcel
je pense qu'on apprend vite de ses propres erreurs. j'imagine que les pros du forum, vous répondez mêmes à des "daubes" comme moi, c'est comme ça qu'on progresse, et tous ceux qui débutent, peuvent profiter des échanges, sans avoir à se mouiller en posant des question qui paraissent anodines (c'est vrai que ça énerve un peu les pros)
pour mcjoedassin, je ne connais pas perl. c'est plus simple que java ?
bon, mais j'avais envisagé de travailler java en prélude à C++. il faut peut-être que j'évite de me disperser
cordialement
albert
Marsh Posté le 02-08-2005 à 15:48:05
perl n'est pas "plus simple" que Java. C'est un autre langage, simple, que tu peux maitriser rapidement, et qui une fois maitrisé est un régal pour parser des pages web comme tu le veux... c'est un régal pour les expressions régulières ...
Marsh Posté le 02-08-2005 à 15:50:25
joe > C'est à envisager.
Maintenant, tout cela a l'air plus didactique qu'autre chose; pq ne pas commencer par Java ? Je ne sais pas si Perl est bien indiqué pour débuter, par sa syntaxe compacte et centrée sur l'efficacité.
Java me semble plus "didactique" (pas autant que Pascal, mais bon, ce dernier n'est plus à la mode).
Marsh Posté le 02-08-2005 à 15:59:11
sircam a écrit : joe > C'est à envisager. |
oui... disons que l'application en question n'est pas non plus l'appli rêvée pour débuter en programmation ... toutefois est-ce là le cas (je pose la question) ? Il est complètement envisageable de faire ce programme en Java (ou en Pascal - ou en Ada - kasdedi à Florence M.) Après tout tu es parti sur Java, tu peux y arriver ... mais c'est un choix très discutable ...
Marsh Posté le 02-08-2005 à 16:06:04
Boah, avec de la pratique, tu peux malgré tout torcher ça vite fait en Java. Tu auras toujours inévitablement le double de lignes de code, mais c'est pas vraiment le critère décisif.
Finalement, ce qui conditionne souvent ton choix, ce sont tes connaissances pratiques et tes petites habitudes. Voire même parfois de l'OS (AWK et bash sous Win, c'est pas top).
Marsh Posté le 02-08-2005 à 16:15:09
tout à fait. De toutes façon il faut rester très ouvert sur les langages de programmation et ne pas hésiter à programmer en de multiples langages ... même s'il faut y passer des heures en plus
Marsh Posté le 03-08-2005 à 20:00:54
bonsoir sircam, mcjoedassin,the real moins moins,esox_ch,Nicolas_75, bonsoir à tous et à toutes, forumiens et forumiennes,
Citation : N'essaye pas de courir avant de marcher, ça pourrait vraiment te dégoûter de Java |
Maintenant je marche, je vais arriver à savoir où je mets les pieds. Jai déjà compris ce que signifient les messages en output de JCrator
http://tecfa2.unige.ch/guides/java [...] javac.html
mais, pour le CLASSPATH, cest dun confus
.
Il y aurait une procédure différente par type de système dexploitation. Finalement, pour windows xp (dans mon computer), sil ny a pas de variable CLASSPATH configurée, il ne serait pas nécessaire den ajouter une ?? http://www.a525g.com/programmation [...] n-java.htm
Citation : « Remarque : Si votre système n'a pas de variable CLASSPATH de configurée, vous pouvez ignorer le paragraphe suivant
Notez aussi que depuis le JDK 1.2, cette variable n'est plus à configurer « |
Vrai ou faux ??? jai passé des heures à travailler cette histoire de classpath !!!
(pour jEdit ou Notepad ou Ultra-Edit, c'est pas gagné)
- Je crois que je vais devoir changer de fil pour poser des questions dordre général sur lutilisation des différentes procédures java (faudrait pas que je pollue)
albert
Marsh Posté le 03-08-2005 à 20:04:51
On a un topic CLASSPATH sur ce forum, lancé par notre très estimé co-forumeur benou, et que je ne peux qui VIVEMENT te conseiller.
Marsh Posté le 03-08-2005 à 20:06:48
sircam a écrit : notre très estimé co-forumeur benou |
Après cette couche de crème et mes réponses serviables, je pourrais bien me permettre un petit HS, qu'en pensez-vous ?
Merci
Marsh Posté le 03-08-2005 à 21:19:44
ah! on peut mettre des gifs, pas mal ton chat disk jockey
j'avais déjà travaillé le topic benou, très bien fait, mais lui, au contraire de ce que j'ai trouvé dans ma question précédente, préconise de créer un classpath pour xp...
"créer une variable CLASSPATH (si elle n'existe pas)"
c'est ce qui a jeté le trouble dans mon esprit.
apparamment, c'est cette solution qu'il faut suivre
cordialement
albert
Marsh Posté le 03-08-2005 à 21:28:33
il n'est pas nécessaire de créer de variable classpath, et je déconseille fermement de le faire, et ce sous tous les OS.
si ça aide, tu fais une variable temporaire genre
export POUET=truc.jar:machin.jar
puis
java -cp $POUET com.machin.Bidule
Mais une CLASSPATH définie au niveau du systeme, c'est la porte ouverte à toutes les fenetres
Marsh Posté le 03-08-2005 à 22:22:39
the real moins moins a écrit : Mais une CLASSPATH définie au niveau du systeme, c'est la porte ouverte à toutes les fenetres |
Tout à fait mon cher mwin mwin.
Marsh Posté le 05-08-2005 à 13:06:40
bonjour à tous,
j'ai donc mis de côté ma fixation sur CLASSPATH
Jai trouvé un tutorial qui pourrait, semble-t-il, constituer une bonne démarche pour lobjectif que je me suis fixé.
Il y a un ppt http://euro.ecom.cmu.edu/program/c [...] -intro.ppt
Qui donne des informations, succinctes mais utiles (page 32 et suite), et des codes exemples http://euro.ecom.cmu.edu/program/c [...] 3/utc/?N=A
Je me suis donc précipité dessus.
Mais :
1/ ça ne marche pas et je ne sais pas pourquoi
- la compilation de Stockquote.java indique quil manque « . » à import CSVReader; et si jajoute un « . » à la fin, la compilation demande un « identifier ».
- il y a bien un package CSVReader.java, mais je ne sais quen faire.
Si lun dentre vous pouvait me donner un coup dmain sur cette procédure
.
Citation : |
Citation : |
2/ Quoiquil en soit, même si ça fonctionnait, je ne peux pas récupérer le résultat du téléchargement.
Jexamine donc:
- ToDoSwingGUI.java, il fonctionne, cest un éditeur de texte, Il est peut-être conçu pour inscrire une liste de titres à télécharger, mais je ne sais quen faire.
- ToDoApplet.java
La compilation sexécute convenablement, mais lexécution échoue, je ne comprends pas pourquoi : java.lang.NoSuchMethodError: main
Exception in thread "main"
Citation : |
3/ il y a des appels de procédures :
StockQuoteSwingGUI.java lors de la compilation, jobtiens le message destine à StockQuote.java : « identifier » sur import CSVReader.;
Bref, je tourne en rond, aussi, si un spécialste du java peut maider à délier cet écheveau, jarriverai à comprendre comment ça marche tout ça.
Merci davance
Citation : |
Marsh Posté le 31-07-2005 à 22:21:02
Bonsoir,
Bonsoir à tous et à toutes, forumiens,forumiennes,
Je débute avec lutilisation du langage java, je ne suis pas informaticien, ce qui fait que je patauge un peu beaucoup
Je cherche à télécharger les cours de bourse sur yahoo http://fr.finance.yahoo.com/q/hp?s [...] f=2005&g=d
Pour les transformer en fichier texte à sauvegarder sur le disque dur.
Jusque là, jai travaillé sur excel, lenregistreur de macro se charge décrire une grande partie du code, ce qui rend plus facile la compréhension et donc lauto-formation. Rien de tel avec java (ou si ça existe, je nai pas trouvé).
Jai parcouru le web pendant une quinzaine de jours, travaillé des tutoriaux, compilé et exécuté exemples sur JCreator LE, mais je nai pas réussi à trouver une solution pour mon projet avec java.
Les deux exemples qui me paraissent les plus proches de ce qu je cherche sont
http://java.sys-con.com/read/39248.htm
et
http://www.smartdataprocessing.com/lessons/l10.htm
mais ces 2 codes ne téléchargent en principe que la donnée du jour et non lhistorique sur plusieurs mois, et, après compilation, je nobtiens pas le résultat du téléchargement. ;
par exemple, si jutilise The Stock Quote Program
import java.net.*;
import java.io.*;
import java.util.StringTokenizer;
class StockQuoter {
String csvString;
URL url = null;
URLConnection urlConn = null;
InputStreamReader inStream = null;
BufferedReader buff = null;
StockQuoter(String symbol){
try{
url = new
URL("http://quote.yahoo.com/d/quotes.csv?s="
+ symbol + "&f=sl1d1t1c1ohgv&e=.csv" );
urlConn = url.openConnection();
inStream = new
InputStreamReader(urlConn.getInputStream());
BufferedReader buff= new BufferedReader(inStream);
// get the quote as a csv string
csvString =buff.readLine();
// parse the csv string
StringTokenizer tokenizer = new
StringTokenizer(csvString, "," );
String ticker = tokenizer.nextToken();
String price = tokenizer.nextToken();
String tradeDate = tokenizer.nextToken();
String tradeTime = tokenizer.nextToken();
System.out.println("Symbol: " + ticker +
" Price: " + price + " Date: " + tradeDate
+ " Time: " + tradeTime);
} catch(MalformedURLException e){
System.out.println("Please check the spelling of the URL:"
+ e.toString() );
} catch(IOException e1){
System.out.println("Can't read from the Internet: " +
e1.toString() );
}
finally{
try{
inStream.close();
buff.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String args[]){
if (args.length==0){
System.out.println(
"Sample Usage: java StockQuoter IBM" );
System.exit(0);
}
StockQuoter sq = new StockQuoter(args[0]);
}
}
Le résultat donne :
--------------------Configuration: <Default>--------------------
Sample Usage: java StockQuoter IBM
Process completed.
Mais le cours dIBM napparaît pas , ni dans une fenêtre dapplet, ni sur C:
Il y a peut-être une procédure qui méchappe ??
Jai également tenté de faire apparaître les historiques dans une fenêtre dapplet, sans plus de succès, il naccepte pas mon adresse : http://fr.finance.yahoo.com/q/hp?s [...] f=2005&g=d
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
public class GetWebPage extends JFrame
implements ActionListener
{
private JLabel prompt; //Cues user to enter a URL.
private JTextField sourceName; //Holds URL string.
private JPanel requestPanel; //Contains prompt and
//URL string.
private JEditorPane contents; //Holds displayed page.
public static void main(String[] args)
{
GetWebPage app = new GetWebPage();
app.setSize(700,500);
app.setVisible(true);
app.addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
public GetWebPage()
{
setTitle("Simple Browser" );
Container pane = getContentPane();
requestPanel = new JPanel();
prompt = new JLabel("Required URL: " );
sourceName = new JTextField(25);
sourceName.addActionListener(this);
requestPanel.add(prompt);
requestPanel.add(sourceName);
pane.add(requestPanel, BorderLayout.NORTH);
contents = new JEditorPane();
//We don't want the user to be able to alter the
//contents of the Web page display area, so...
contents.setEditable(false);
//Create object that implements HyperlinkListener
//interface..
LinkListener linkHandler = new LinkListener();
//Make the above object a HyperlinkListener for
//our JEditorPane object...
contents.addHyperlinkListener(linkHandler);
//'Wrap' the JEditorPane object inside a
//JScrollPane, to provide scroll bars...
pane.add(new JScrollPane(contents),
BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e)
//Called when the user presses <Enter>
//after keying a URL into the text field
//and also when a hyperlink is clicked.
{
showPage(sourceName.getText());
}
private class LinkListener
implements HyperlinkListener
{
public void hyperlinkUpdate(HyperlinkEvent e)
{
if (e.getEventType() ==
HyperlinkEvent.EventType.ACTIVATED)
showPage(e.getURL().toString());
//Other hyperlink event types ignored.
}
}
private void showPage(String location)
{
try
{
//Reset page displayed on JEditorPane...
contents.setPage(location);
//Reset URL string in text field...
sourceName.setText(location);
}
catch(IOException e)
{
JOptionPane.showMessageDialog(this,
"Unable to retrieve URL",
"Invalid URL",
JOptionPane.ERROR_MESSAGE);
}
}
}
Merci davance pour toute aide qui me sortira de ce mauvais pas
albert