Aller chercher une valeur numérique

Eléphant du PHP | 54 Messages

19 févr. 2010, 21:57

Bonjour,

En fait je suis en train de me créer un petit portefeuille virtuelle afin de m'amuser avec la bourse.
Comme j'adore coder en PHP j'essaie de le faire dans ce langage.

Il est presque complet, le seul outil qu'il lui manque c'est qu'il ne va pas chercher automatiquement les valeurs des actions seuls.
(Je doit donc aller voir sur un site, récupérer la valeur de l'action et la mettre manuellement das mon portefeuille.) Je connais un site où toutes les actions du TSX et du DowJown sont, mais comment récupérer le prix de celle-ci?

Je pensais à envoyer PHP chercher sur le bon URL...mais une fois rendu sur la page... comment aller chercher le nombre qui correspond au prix actuel? Faut-t-il le faire en Javascript plutôt qu'en PHP? Bref je suis un peu perdu!

J'espère que vous pourrez m'aider!
Myst3ry
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

ViPHP
ViPHP | 2287 Messages

19 févr. 2010, 22:14

Bonjour,

Quand tu vas, en php, récupérer la page web contenant les informations dont tu as besoin, le contenu html de cette page sera disponible dans ton script php comme une variable ordinaire (une chaîne de caractères). Avec un peu de chance tu n'auras besoin que de cette fonction :
$html=file_get_contents('http://google.fr');
A ce niveau, il n'y a pas de javascript qui rentre en jeu, seulement un téléchargement de fichier classique en http.

Une fois ceci fait, il faudra ensuite analyser, découper, torturer, bistouriser, scalpeliser :twisted: ce html pour en extraire uniquement la petite partie qui t'intéresse. Ca peut se faire avec des expressions régulières, mais ce n'est pas obligatoire, c'est juste le meilleur outil pour faire ce job.

PS : ça a l'air intéressant ton logiciel, est-ce que tu envisages de le diffuser en open-source ?
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 54 Messages

19 févr. 2010, 22:24

D'accord, merci beaucoup!

En fait, présentement je le fais seulement pour mon plaisir personnelle.
J'aime aussi le graphisme donc une fois qu'il sera à mon goût côté CODE je vais surement le remanier côté design.

Après tout ca, peut-être que je le mettrai disponible en Open-Source, c'est une très bonne idée!

Merci encore!
Myst3ry
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

ViPHP
ViPHP | 5462 Messages

22 févr. 2010, 14:47

Bonjour,

Quand tu vas, en php, récupérer la page web contenant les informations dont tu as besoin, le contenu html de cette page sera disponible dans ton script php comme une variable ordinaire (une chaîne de caractères). Avec un peu de chance tu n'auras besoin que de cette fonction :
$html=file_get_contents('http://google.fr');
A ce niveau, il n'y a pas de javascript qui rentre en jeu, seulement un téléchargement de fichier classique en http.

Une fois ceci fait, il faudra ensuite analyser, découper, torturer, bistouriser, scalpeliser :twisted: ce html pour en extraire uniquement la petite partie qui t'intéresse. Ca peut se faire avec des expressions régulières, mais ce n'est pas obligatoire, c'est juste le meilleur outil pour faire ce job.

PS : ça a l'air intéressant ton logiciel, est-ce que tu envisages de le diffuser en open-source ?
DomDocument ...

Eléphant du PHP | 54 Messages

25 févr. 2010, 23:12

Bonjour,

Je suis coincé de nouveau.
Voici les infos pour bien comprendre:

J'essaie sur ce lien: http://cxa.marketwatch.com/tsx/en/marke ... symbol=BMO
De trouver la valeur actuelle de l'action.
J'ai donc ouvert le code source et je vois qu'elle se situe entre cecis:
<span id="ctl00_cphQuoteBanner_QuoteBanner1_dataLast" class="up">33.333</span> // Si elle monte;
<span id="ctl00_cphQuoteBanner_QuoteBanner1_dataLast" class="down">33.333</span> // Si elle descend (classe up ou down) 
Je code donc ceci simplement:
$hostpage = 'http://cxa.marketwatch.com/tsx/en/market/quote.aspx?symbol=BMO'; //Adresse
$hostpage_TSX_search = '/<span id="ctl00_cphQuoteBanner_QuoteBanner1_dataLast" class="[up|down]">(.*)<\/span>/i'; //REGEX

$hostcontent = file_get_contents($hostpage); //Contenu HTML
preg_match($hostpage_TSX_search, $hostpage, $match); //Trouver, et mettre dans match

print_r($match); //Affichage de l'array
Résultat: Array ( )
Je suis assez nouveau en REGEX, mais je ne vois pas ou est mon erreur. :oops:

Merci d'avance pour votre précieuse aide!
Maxime
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

ViPHP
ViPHP | 5462 Messages

26 févr. 2010, 00:30

j'ai dis plus haut DomDocument pour parser du html
libxml_use_internal_errors(true);
	
$dom = new DomDocument();
$dom->loadHTMLFile('http://cxa.marketwatch.com/tsx/en/market/quote.aspx?symbol=BMO');
	
$xpath	= new DOMXpath($dom);
$value 	= $xpath->query('//span[@id="ctl00_cphQuoteBanner_QuoteBanner1_dataLast"]/text()')->item(0);
	
echo $value->wholeText;
mais (héhé), c'est pas bien de piquerl es information d'un site, surtout qu'on charge la page juste pour afficher une valeur (pas tres optimisé), et recuperer une donné venant d'un site tout ca, ca s'appelle le WebService, et notre amis google fais ca tres bien, inscris toi sur google Finance et tu pourrais recuperer via leur API la joli page avec toute les données dedan :wink:

http://www.google.com/finance?q=TSE:BMO

Eléphant du PHP | 54 Messages

26 févr. 2010, 02:46

Ouai d'accord...

Merci beaucoup je test de mon côté!

Encore Merci de votre aide,
Maxime :D
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

Eléphant du PHP | 54 Messages

26 févr. 2010, 05:56

Petite question, je n'arrive pas à chercher par name au lieu de id.
Est-ce possible?

Maxime.
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

ViPHP
ViPHP | 5462 Messages

26 févr. 2010, 13:28

Petite question, je n'arrive pas à chercher par name au lieu de id.
Est-ce possible?

Maxime.
ouai c'est @name="lename"

http://www.w3.org/TR/xpath/

apres ta requete depend de ce que tu veux aller chercher

Code : Tout sélectionner

//span[@id="ctl00_cphQuoteBanner_QuoteBanner1_dataLast"]/text()
ira chercher dans tout le document "//" un noeud de type "span" qui comporte l'attribut "id" contenant "ctl00_cphQuoteBanner_QuoteBanner1_dataLast" et dans se noeud on va recuperer uniquement le contenu "text()"

si tu ne met pas texte, la requete va te retourner le noeud complet apres a toi dans faire ce que tu veux (récupérer un attribue par exemple)

http://php.net/manual/fr/class.domxpath.php

Eléphant du PHP | 54 Messages

26 févr. 2010, 16:55

D'accord, merci beaucoup!

Petite question, encore.

LE problème est que il peut y avoir deux span qui on le même name!
Donc est il possible de lui demander de chercher le TD, et ensuite le SPAN (dans ce <td>)

Ex:
<td name="nom_bu_td"><span name="nom_du_span">Texte à trouver</span></td>
Mais ce span (nom_du_span) est présent plusieurs fois dans la page, mais une seule fois lorsqu'il est jumelé au td (nom_du_td).

Je ne sais pas si c'est clair.
En fait ma question est, est-ce qu'il y à un signe comme "OR" ou "AND" comme dans les conditions php.

Je regarde la DOC de mon côté, merci beaucoup!

Maxime
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

ViPHP
ViPHP | 5462 Messages

26 févr. 2010, 17:00

deja il ne devrai pas avoir d'attribut "name" dans span et td (http://www.w3.org/TR/html401/struct/glo ... #edef-SPAN)

mais imaginons que si

tu ferais :
//td[@name="truc"]/span[@name="bidule"]

apres t'a d'autre option comme choisir le premier ou le dernier element (ou le 5eme par exemple),
tu peux le faire aussi en PHP
$xpath->query(//marequete)->item(4);
//va te chercher le 5eme

Eléphant du PHP | 54 Messages

26 févr. 2010, 17:09

Heee oops,

En effet je voulais dire class! au lieu de name.

Donc si j'ai bien compris, le "/" signifie "ET".

Je veux pas abuser, mais j'aurais une autre question. Le problème que je rencontre est que SI il ne trouve rien, par exemple;

Et bien quand j'essaie d'afficher la valeur, il me sort une erreur comme ceci:

Code : Tout sélectionner

Notice: Trying to get property of non-object in...
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.