PHP и curl для получения курса валюты от Yahoo Finance - PullRequest
0 голосов
/ 16 мая 2010

Я написал следующий фрагмент php, чтобы получить курс конвертации валюты из Yahoo Finance.

Я использую curl для получения данных. Предположим, я хочу пересчитать доллары США (USD) в Индийскую национальную рупию (INR), тогда URL будет http://in.finance.yahoo.com/currency/convert?amt=1&from=USD&to=INR&submit=, а значение индийской рупии будет равно 45,225. Однако, если я запускаю свой код, значение, которое я получаю, составляет 452,25. Почему это несоответствие?

<?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);

?>

Что-то не так с моим регулярным выражением?

Ответы [ 4 ]

1 голос
/ 25 ноября 2010

Вы можете получить тарифы в формате XML или JSON, используя открытую таблицу yahoo.finance.xchange:

Попробуйте в консоли YQL

1 голос
/ 16 мая 2010

Yahoo Finance (почти), безусловно, имеет соответствующий API, поэтому вам не нужно разбирать какой-то случайный HTML для конвертации валюты.

Кроме того, я бы предположил использовать что-то вроде Google http://www.google.com/ig/calculator?q=1 EUR IN USD , и анализ этого ответа гораздо более стабилен, чем анализ HTML-страницы Yahoo.

0 голосов
/ 20 марта 2018

следующий код работает. Дай попробовать

$url = "http://www.xe.com/currencyconverter/convert/?
Amount=1&From=USD&To=INR";

$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt ($ch, CURLOPT_USERAGENT,
 "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

$rawdata = curl_exec($ch);
curl_close($ch);

$data = explode('uccResultAmount', $rawdata);
@$data = explode('uccToCurrencyCode', $data[1]);

$amount = preg_replace('/[^0-9,.]/', '', $data[0]);
0 голосов
/ 27 мая 2013

Вы можете получить доступ к валюте Yahoo через файлы .csv, чтобы их было намного проще разобрать. Пример: http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s='EURUSD'=x

И простой код:

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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...