JeuWeb - Crée ton jeu par navigateur
Recuperer des données - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Recuperer des données (/showthread.php?tid=3287)



Recuperer des données - Florian54 - 15-11-2008

Bonjour,

Je souhaite créer un jeu en PhP de simulation boursiere.
Cependant, je ne souhaite pas créer un marché virtuel, mais je souhaite utiliser le vrai marché (du monde réel).

Plusieurs sites le font déjà, et j'aurais voulu comprendre comment ils font.

Merci d'avance de votre aide.
Florian


RE: Recuperer des données - Thedeejay - 15-11-2008

oulala!!!!
treeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee [...]eeeeeeeeeeeees compliqué!!!
essaie de voir si un site ne propose pas une API (genre boursorama)


RE: Recuperer des données - Florian54 - 15-11-2008

Justement, sa marche comment les API ?
Quelqu'un peut m'expliquer rapidement ?


RE: Recuperer des données - Melimelo - 15-11-2008

c'est pas spécialement compliqué


plusieurs solution, soit tu trouve un site qui permet l'utilisation libre de son api (une api cherche googlechart sur google c'est une api de graphique par google tu comprendra mieux), tu peux tenter de nouer un partenariat avec un site du genre ou alors faire un script qui récupère les données (je sais pas si c'est legal).

Le script un file_get_contents qui te donne la source html d'une page web et tu parse a grand coup de regex pour obtenir les informations nécessaires.


RE: Recuperer des données - Ekilio - 15-11-2008

Je pense qu'il existe plusieurs solutions.

La plus simple est de trouver un site qui utilise un flux RSS ou une api pour indiquer les cours de la bourse ; dans ce cas, il suffit d'utiliser leur api pour récupérer les cours.

Sinon, une autre solution est basée sur l'html. Prenons par exemple les cours du site des échos : ici pour le CAC40 par exemple.

En observant la source html de la page, on note qu'elle est de cette forme :

Bla bla de départ
Liste des cours
Bla bla bla de fin.

Ce qui va nous interesser va être de récupérer la liste des cours. Bon, pour récupérer la page elle-même, si ton hébergeur accepte php5, rien de plus simple :

Code PHP :
<?php
$code
= file_get_contents('http://bourse.lesechos.fr/bourse/indices/composition.jsp?Code=FR0003500008&Place=00025-TR&Codif=ISI');
?>

Maintenant il va nous falloir trouver toutes les valeurs bourières. On va s'occuper ici de leur nom et de leur dernier indice, mais l'idée est exactement la même pour le reste.

D'abord, définissons clairement ce qu'on cherche. Le nom est une suite de chiffres, lettres, tirets et apostrophes simples. La valeur, des chiffres avec une virgule.

En étudiant dans ce cas précis le code html, on note que le tableau qui affiche ces valeurs est de cette forme :

Citation : <tr class="TABLEAU-DATA-11" onclick="javascript:document.location='/bourse/cours.jsp?Code=FR0000120404&amp;Place=00025-TR&amp;Codif=ISI';" style="cursor: pointer;">
<td align="left" nowrap="nowrap">&nbsp;<a target="_top" href="/bourse/cours.jsp?Code=FR0000120404&amp;Place=00025-TR&amp;Codif=ISI"><b><script>writeUpper("NOM DE LA VALEUR");</script>NOM DE LA VALEUR</b></a></td>
<td nowrap="nowrap"><b>INDICE&nbsp;</b></td>

Suivi d'une suite de trucs qui ne nous interessent pas. Ci-dessus, en gras les choses qui nous interessent, en italique les choses variables. Notez que le Place est surement variable aussi, mais il est fixe pour une même url. A vous d'étudier plus en détails ensuite.

Donc, première chose, afin d'avoir des expressions régulières plus simples ensuite, on va virer tous les espaces en trop. C'est pas forcément nécessaire, mais ça évitera d'avoir à s'en soucier ensuite.

Code PHP :
<?php
$code
= file_get_contents('http://bourse.lesechos.fr/bourse/indices/composition.jsp?Code=FR0003500008&Place=00025-TR&Codif=ISI');

$code = preg_replace('/\s\s+/', ' ', $code);
?>

Le code que nous recherchons aura alors cet aspect :

Citation :<tr class="TABLEAU-DATA-11" onclick="javascript:document.location='/bourse/cours.jsp?Code=FR0000120404&amp;Place=00025-TR&amp;Codif=ISI';" style="cursor: pointer;"> <td align="left" nowrap="nowrap">&nbsp;<a target="_top" href="/bourse/cours.jsp?Code=FR0000120404&amp;Place=00025-TR&amp;Codif=ISI"><b><script>writeUpper("NOM DE LA VALEUR");</script>NOM DE LA VALEUR</b></a></td> <td nowrap="nowrap"><b>INDICE&nbsp;</b></td>

Le plus simple va alors être de séparer en deux :

- Notre valeur est toujours notée dans une fonction javascript nommée writeUpper, et cette fonction n'apparait que là.
- Notre indice est toujours dans ce code : <b>INDICE&nbsp;</b>. C'est le seul chiffre à être en gras (et c'est un chiffre, ce qui a son importance).

Ces deux choses se trouvent en observant le code html, donc il faudra les adapter à la page d'où tu veux tirer tes informations.

Ce qui nous donne finalement ce code :


Code PHP :
<?php
$code
= file_get_contents('http://bourse.lesechos.fr/bourse/indices/composition.jsp?Code=FR0003500008&Place=00025-TR&Codif=ISI');

$code = preg_replace('/\s\s+/', ' ', $code);

$pattern_nom = <<<BEGIN
/writeUpper\("([^"]+)"\);/
BEGIN;

$pattern_indice = <<<BEGIN
/<b>([0-9,]+)&nbsp;<\/b>/
BEGIN;

preg_match_all(trim($pattern_nom), $code, $noms);
preg_match_all(trim($pattern_indice), $code, $indices);

echo
'<table>';
for(
$i = 0; $i < count($noms[1]); $i++)
{
echo
'<tr>';
echo
'<td>' . $noms[1][$i] . '</td>';
echo
'<td>' . $indices[1][$i] . '</td>';
echo
'</tr>';
}
echo
'</table>';
?>

Voila, c'était un exemple avec le site des échos de la méthode à employer, maintenant il faut encore l'appliquer sur le site où tu trouveras ton propre code...


RE: Recuperer des données - Florian54 - 16-11-2008

Bonjour,

Tout d'abord, merci pour vos explications.
La méthode qui consiste à copier le code HTML puis à y faire un tri est très interessante.

Seulement, elle affiche toutes les valeurs, alors que j'aurais souhaité pouvoir appelé les noms et actions quand je le souhaitais.

Pour les API, j'ai effectivement fait des recherches, et je n'ai rien trouvé. Donc si vous avez une idée sur quel site pourrait partager son API, je suis preneur.

Merci encore pour votre patience.
Florian


RE: Recuperer des données - Adrien A. - 16-11-2008

Bonsoir,

je me permet de donnée mon avis. Le premier problème que je vois dans se genre de projet, c'est que si la synchronisation entre les valeurs du marché, n'est pas en temps réel, la triche est très facile...

Un autre problème plus ludique cette fois, c'est que la vente ou l'acquisition de valeur n'a aucun impacte sur les marchés, ce qui est déstabilisant...

Sinon, rien ne t'oblige à afficher toutes les valeurs récupéré sur le site en question. Et avec un petit système de cache pour éviter de surcharger de requêtes le site tiers et de limiter parsing gourmand en performance.

Après, niveau législatif, je me demande comment réagirait le site sur le quel tu récupéreras ces informations, surtout sans autorisation.