Récupération de cours en PHP

Zone d'échange de sources C, C++, Java, VB, VBA et autres...

Modérateur : webmaster

un isafien
Messages : 56
Enregistré le : 15/04/2006 20:04

Récupération de cours en PHP

Message par un isafien » 14/08/2006 12:52

Salut,

je voudrais télécharger les cours de bourse sur yahoo en php pour pouvoir les mettre dans mon site. En fait, je crée un portefeuille avec des valeurs que je suis meme en intraday, et je voudrais avoir les cotations sur mon site sans avoir besoin d'aller sur un site pour regarder les cours.

Merci.

Avatar du membre
webmaster
Messages : 769
Enregistré le : 14/06/2003 15:21
Contact :

Message par webmaster » 15/08/2006 23:10

Bonsoir,

Sur Yahoo Finance, on pouvait demander à afficher directement sa liste de valeurs, juste en passant les bons paramètres dans l'URL mais je ne sais pas si la personnalisation fonctionne toujours sans passer par une ouverture de session. A voir dans l'aide de Yahoo.

Pour ce qui est de télécharger les cours, c'est à priori très simple, il suffit d'ouvrir la page souhaitée, comme un fichier, par exemple pour le CAC, accéder à l'URL : http://fr.finance.yahoo.com/q?s=^FCHI, puis de chercher dans le flux HTML lu la chaine qui va bien pour en extraire le dernier cours.

Webmaster

un isafien
Messages : 56
Enregistré le : 15/04/2006 20:04

Message par un isafien » 16/08/2006 12:01

Merci webmaster.

En fait je débute en PHP, je ne sais comment faire que vous me conseillez :cry:

Avatar du membre
webmaster
Messages : 769
Enregistré le : 14/06/2003 15:21
Contact :

Message par webmaster » 16/08/2006 20:46

Bonjour,

Vous pouvez partir de cela par exemple :

Code : Tout sélectionner

// Telecharger la page
//--------------------
$fp = fopen('http://fr.finance.yahoo.com/q?s=^FCHI', 'r'); 
$ligne = 0; 
$page = array(); 
//on recupere toutes les lignes
while (!feof($fp))
  {
    // lecture du contenu de la ligne
    $page [$ligne]= fgets($fp);  
    $ligne=$ligne+1; 
  }

// Chercher la partie intéressante
//--------------------------------
foreach( $page as $val ) 
  {
    // Chercher la chaine ">Dern. Cours&#58;</td>", puis prendre ce qui est contenu entre "<big><b>" et " </b></big>"
    // Là il suffit de lire une doc PHP...
  &#125;
Ensuite encapsuler cela dans une fonction qui prenne le code de la valeur en parametre.

Webmaster

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

Message par 20StylZ » 22/08/2006 13:31

Vous vous prenez la tête à vouloir analyser le html alors que Yahoo fournit ses cours en CSV !

Code : Tout sélectionner

function get_quote&#40;$ticker&#41;
&#123;
	$fd = fopen &#40;"http&#58;//quote.yahoo.com/d/quotes.csv?s=".$ticker."&f=sl1d1t1c1ohgv&e=.csv", "r"&#41;;
	$contents = fread&#40;$fd, 200&#41;;
	fclose&#40;$fd&#41;;
	$contents = str_replace&#40;"\"", "", $contents&#41;;
	$contents = explode&#40;",", $contents&#41;;			
	return $contents&#91;1&#93;;
&#125;
Il suffit d'appeller la fonction avec le ticker souhaité et on récupere le cours.

Code : Tout sélectionner

$quote = get_quote&#40;"CGE.PA"&#41;;

un isafien
Messages : 56
Enregistré le : 15/04/2006 20:04

Message par un isafien » 22/08/2006 14:14

ouahouh!!!

De la balle ton code!!! Mais tu peux m'expliquer ta fonction stp??? merci

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

Message par 20StylZ » 22/08/2006 14:38

Code : Tout sélectionner

function get_quote&#40;$ticker&#41;
&#123;
   $fd = fopen &#40;"http&#58;//quote.yahoo.com/d/quotes.csv?s=".$ticker."&f=sl1d1t1c1ohgv&e=.csv", "r"&#41;;
   //Création d'un objet file qui pointe vers le CSV
   $contents = fread&#40;$fd, 200&#41;; // Lecture de 200 octets du CSV
   fclose&#40;$fd&#41;; // Fermeture du flux
   $contents = explode&#40;",", $contents&#41;; // Création d'un  tableau qui contient chaque info du CSV
   return $contents&#91;1&#93;; // Renvoi de la case qui contient la cotation
&#125;
La ligne str_replace n'a pas d'importance ici

un isafien
Messages : 56
Enregistré le : 15/04/2006 20:04

Message par un isafien » 22/08/2006 14:56

je voudrais insérer donc ce code dans une boucle pour l'afficher sous forme de tableau, et j'ai un peu du mal...

Code : Tout sélectionner

<? $req=mysql_query&#40;"SELECT*FROM cac ORDER BY nom"&#41;;
$odd=0;
while &#40;$res=mysql_fetch_array&#40;$req&#41;&#41;

 	&#123;$odd++;
   ?>

 	<tr >
 	 
		<td  style="background-color&#58;<?=$odd%2?'#368EBE'&#58;'white';?>"><? echo $res&#91;'nom'&#93;;?></td>
		<td style="background-color&#58;<?=$odd%2?'#368EBE'&#58;'white';?>"><? echo $res&#91;'ticker'&#93;;?></td>
		<td style="background-color&#58;<?=$odd%2?'#368EBE'&#58;'white';?>"><? echo $res&#91;'secteur'&#93;;?></td>
		<td align="right"style="background-color&#58;<?=$odd%2?'#368EBE'&#58;'white';?>"><? echo $res&#91;'nbaction'&#93;;?></td> 
		<td style="background-color&#58;<?=$odd%2?'#368EBE'&#58;'white';?>"><? echo $quote=get_quote&#40;"&#91;'ticker'&#93;"&#41; ;?></td> 
	</tr>
<? &#125;  
en fait je sais pas ou mettre le $quote=get_quote("cge.pa")

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

Message par 20StylZ » 22/08/2006 15:06

Non en fait si tu fais directement un echo pas besoin de stocker le resultat dans une variable $quote.

Donc 2 solutions :

Code : Tout sélectionner

$quote = get_quote&#40;"cge.pa"&#41;;
echo $quote;
Ou

Code : Tout sélectionner

echo get_quote&#40;"cge.pa"&#41;;
Sinon pour mettre en argument le ticker contenu dans ton tableau il ne faut pas mettre de "" car la variable contenue dans ton tableau est deja un string.
Et tu as oublié le nom du tableau $res.

Code : Tout sélectionner

get_quote&#40;$res&#91;'ticker'&#93;&#41;;

un isafien
Messages : 56
Enregistré le : 15/04/2006 20:04

Message par un isafien » 22/08/2006 15:10

encore un pb: la focntion je l'ai mise dans un script javascript, c bon?? car il me dis" Fatal error: Call to undefined function: get_quote()"

un isafien
Messages : 56
Enregistré le : 15/04/2006 20:04

Message par un isafien » 22/08/2006 15:12

mon code:

Code : Tout sélectionner

<td style="background-color&#58;<?=$odd%2?'#368EBE'&#58;'white';?>"><? echo get_quote&#40;$res&#91;'ticker'&#93;&#41;;?></td> 

20StylZ
Messages : 28
Enregistré le : 11/04/2006 19:17

Message par 20StylZ » 22/08/2006 15:23

Ha ben non javascript c'est pas php. Php est un langage coté serveur tandis que le javascript est executé directement sur ta machine.

Soit tu mets la fonction dans ta page soit tu crée un fichier fonctions.php par exemple et dans les pages où tu as besoin des fonctions tu mets au debut de la page :

Code : Tout sélectionner

include&#40;"fonctions.php"&#41;;

un isafien
Messages : 56
Enregistré le : 15/04/2006 20:04

Message par un isafien » 22/08/2006 17:43

merci bcp!!!
y aurait-il un moyen d'accélerer l'affichage de ma page car c un peu long pour afficher 40 ligne?? bon je suis en localhost

un isafien
Messages : 56
Enregistré le : 15/04/2006 20:04

Message par un isafien » 22/08/2006 17:46

et pour afficher la variation depuis la veille, il faut stocker les cours de la veille et faire la division ou alors on va chercher dans le csv de yahoo?? si oui comment??(pour les 2, ou la meilleure des 2)

Merci

un isafien
Messages : 56
Enregistré le : 15/04/2006 20:04

Message par un isafien » 22/08/2006 18:43

webmaster a écrit :Bonjour,

Vous pouvez partir de cela par exemple :

Code : Tout sélectionner

// Telecharger la page
//--------------------
$fp = fopen&#40;'http&#58;//fr.finance.yahoo.com/q?s=^FCHI', 'r'&#41;; 
$ligne = 0; 
$page = array&#40;&#41;; 
//on recupere toutes les lignes
while &#40;!feof&#40;$fp&#41;&#41;
  &#123;
    // lecture du contenu de la ligne
    $page &#91;$ligne&#93;= fgets&#40;$fp&#41;;  
    $ligne=$ligne+1; 
  &#125;

// Chercher la partie intéressante
//--------------------------------
foreach&#40; $page as $val &#41; 
  &#123;
    // Chercher la chaine ">Dern. Cours&#58;</td>", puis prendre ce qui est contenu entre "<big><b>" et " </b></big>"
    // Là il suffit de lire une doc PHP...
  &#125;
Ensuite encapsuler cela dans une fonction qui prenne le code de la valeur en parametre.

Webmaster
Merci quand meme Webmaster mais je prefere la methode 20stylz

Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité