JeuWeb - Crée ton jeu par navigateur
[PhP]File_get_contents or Regex - 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 : [PhP]File_get_contents or Regex (/showthread.php?tid=4119)



[PhP]File_get_contents or Regex - Florian54 - 21-06-2009

Bonjour,

J'ai crée un script PhP qui a pour but de récuperer des valeurs boursieres.
Seulement, je n'arrive pas à récuperer les valeurs sur un certain site.

Pourriez-vous m'aider ?

Voici le code PhP en question : (dans le code, figure des commentaires, ainsi que l'url du site où je souhaite recuperer les cours.)

Code PHP :
<?php
// DEBUT DU SYSTEME DE RECUPERATION
// Tu recupere la page où sont affichés les valeurs de la bourse
// Ici, les valeurs sont sur 2 pages
$code = file_get_contents('http://www.boursier.com/vals/FR/index/FR0003500008-composition-cac+40.html');
$code = preg_replace('/\s\s+/', ' ', $code);
// Les variables pattern ont pour but de choisir ce que l'on recherche sur la page selectionné plus haut
$pattern_nom = <<<BEGIN
/<td class="gras"><a rel="rowlink" href="("([^"]+)"\)">("([^"]+)"\)</a></td>/
BEGIN;

$pattern_indice = <<<BEGIN
/([0-9,]+)/
BEGIN;

preg_match_all(trim($pattern_nom), $code, $noms);
preg_match_all(trim($pattern_indice), $code, $indices);
echo
'<table>';
echo
'<tr>';
echo
'<td><b>Libellé </b></td>';
echo
'<td><b>Cours </b></td>';
echo
'</tr>';
$o = 1;
// Tu affiche un tableau avec ce que tu veux dedans
for($i = 0; $i < count($noms[1]); $i++)
{
echo
'<tr>';
echo
'<td>' . $noms[1][$i] . '</td>';
echo
'<td>' . $indices[1][$i] . '</td>';
}
echo
'</table>';
// FIN DU SYSTEME DE RECUPERATION
?>

Merci de bien vouloir m'aider, je ne sais plus comment faire.

Cordialement, Florian


RE: [PhP]File_get_contents - My Hotel - 21-06-2009

C'est sûrement ta regex qui est mal construite, je vais regarder ça plus en détail, mais je ne suis pas moi même un cador en regex. Sinon, il existe des API's pour récupérer les cours très simples à utiliser qui ont des multiples avantages.
En tout cas, le problème ne doit pas venir de file_get_contents(), tu devrais changer le titre du sujet, et penser à mettre le PHP en mode code PHP, pour la coloration syntaxique.


RE: [PhP]File_get_contents or Regex - jo_link_noir - 22-06-2009

Pour être sûr fait un echo du file_get_contents.
Et sinon peut-être que ce sera plus simple avec DOMDocument. À testé, mais je pense que la méthode loadHTMLFile peut chargé directement une url.


Pour les regex j'suis pas très bon non plus mais
- pattern_nom sera vide car <td class="grass"> n'existe pas
- pattern_indice va retourne trop de numéros...

pas testé mais un truc du genre :
#<td><a href="/vals/FR/([^.]).html">([^<])</a></td><td class="value">([0-9,]+)#


RE: [PhP]File_get_contents or Regex - Florian54 - 22-06-2009

En faite, c'est justement les regex dont j'ai besoin...

Je voudrais savoir ce que je dois mettre dans pattern_nom et pattern_indice car j'ai beau tester tout ce que je peux, je n'y arrive pas...


RE: [PhP]File_get_contents or Regex - jo_link_noir - 22-06-2009


<?php
$code = file_get_contents('http://www.boursier.com/vals/FR/index/FR0003500008-composition-cac+40.html');

preg_match_all(
'#<td><a href="/vals/FR/([^.]+).html">([^<]+)</a></td><td class="value">([0-9,]+)#',
$code,
$a,
PREG_PATTERN_ORDER
);

echo "<pre>";
var_dump($a);



RE: [PhP]File_get_contents or Regex - Florian54 - 22-06-2009

Arf, sa m'aide pas vraiment, car je ne récupère pas les valeurs...
Il m'aurait fallu avoir dans une variable les noms des actions, et dans une autre les cours, sauf qu'avec boursorama, je n'arrive pas à récuperer les cours de la bourse avec les regex...


RE: [PhP]File_get_contents or Regex - Latouss - 22-06-2009

Ben avec ce qu'il t'avait fait tu pouvais.

J'ai un peu modifier son code mais ça devrait marcher comme ça.

Code :
<?php

$code = file_get_contents('http://www.boursier.com/vals/FR/index/FR0003500008-composition-cac+40.html');

preg_match_all(
    '#<td><a .*>([^<]+)</a></td><td .*>(.*)</td>#U',
    $code,
    $a
);

$noms = $a[1];
$cours = $a[2];

?>

$noms et $cours sont donc deux tableaux différents comme tu le voulais