2010-05-15 11 views
0

J'ai écrit l'extrait de php suivant pour récupérer le taux de conversion de devises de Yahoo Finance. J'utilise curl pour récupérer les données. Supposons que je souhaite convertir des dollars américains (USD) en roupies indiennes (INR), l'URL est http://in.finance.yahoo.com/currency/convert?amt=1&from=USD&to=INR&submit= et la valeur de la roupie indienne est 45.225. Cependant, si je cours mon code, la valeur que j'obtiens est 452,25. Pourquoi cette divergence?PHP et curl pour aller chercher le taux de change de Yahoo Finance

<?php 

    $amount = $_GET['amount']; 
    $from = $_GET['from']; 
    $to = $_GET['to']; 
    $url = "http://in.finance.yahoo.com/currency/convert?amt=".$amount."&from=".$from."&to=".$to; 
    $handle = curl_init($url); 
    curl_setopt ($handle, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($handle); 
    if(preg_match_all('/<td class="yfnc_tabledata1"><b>(?:[1-9]\d+|\d)(?:\.\d\d)?/',$data,$matches)) 
    { 
    print_r($matches[0][1]); 
    } 
    else 
    { 
    echo "Not found !"; 
    } 
    curl_close($handle); 

?> 

Y at-il un problème avec mon regex?

+0

réponse obligatoire: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self -contenant-tags/1732454 # 1732454 –

Répondre

1

Yahoo Finance (presque) a certainement une API correspondante, donc vous n'avez pas besoin d'analyser du HTML au hasard pour la conversion de devises.

En outre, je présume d'utiliser quelque chose comme http://www.google.com/ig/calculator?q=1 EUR IN USD de Google et l'analyse de cette réponse est beaucoup plus stable que l'analyse de la page HTML de Yahoo.

0

Vous pouvez accéder à Yahoo Monnaie via les fichiers .csv il est donc beaucoup plus facile d'analyser ceux-ci. Exemple: http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s= 'EURUSD' = x

Et code simple:

function currencyImport($from,$to) 
{ 
$url = 'http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s='. $from . $to .'=X'; 
$handle = @fopen($url, 'r'); 

if($handle) 
{ 
    $result = fgets($handle, 4096); 
    fclose($handle); 
} 

$currencyData = explode(',',$result); 
return $currencyData[1]; 
}