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="jdocument.location='/bourse/cours.jsp?Code=FR0000120404&Place=00025-TR&Codif=ISI';" style="cursor: pointer;">
<td align="left" nowrap="nowrap"> <a target="_top" href="/bourse/cours.jsp?Code=FR0000120404&Place=00025-TR&Codif=ISI"><b><script>writeUpper("NOM DE LA VALEUR");</script>NOM DE LA VALEUR</b></a></td>
<td nowrap="nowrap"><b>INDICE </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="jdocument.location='/bourse/cours.jsp?Code=FR0000120404&Place=00025-TR&Codif=ISI';" style="cursor: pointer;"> <td align="left" nowrap="nowrap"> <a target="_top" href="/bourse/cours.jsp?Code=FR0000120404&Place=00025-TR&Codif=ISI"><b><script>writeUpper("NOM DE LA VALEUR");</script>NOM DE LA VALEUR</b></a></td> <td nowrap="nowrap"><b>INDICE </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 </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,]+) <\/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...