JeuWeb - Crée ton jeu par navigateur

Version complète : [PhP]File_get_contents or Regex
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
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
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.
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,]+)#
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...
    Code PHP
<?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);
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...
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
URLs de référence