谷歌货币转换器api用于大量数据

时间:2017-05-06 08:21:57

标签: php

我正在使用谷歌金融计算器转换货币。我必须转换至少= 2000个数字才能立即转换。下面我在数组中只设置了10个数字。当我运行此代码时,它工作正常,但它花费了太多时间。当我尝试使用大约5000个数字时,它有时会超时错误。任何人都可以帮助我如何使用我的代码修改大量数据。谢谢。以下是我目前使用的代码。

$amounts= array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
$from_Curr ='USD';
$to_Curr = 'THB';
$convertedCurrency = convertCurrency($amounts, $from_Curr, $to_Curr);
print_r($convertedCurrency);

function convertCurrency($amounts= array(), $from, $to){
    $convertedCurrency = array();
    foreach ($amounts as $amount) {
        $url  = "https://www.google.com/finance/converter?a=$amount&from=$from&to=$to";
        $data = file_get_contents($url);
        preg_match("/<span class=bld>(.*)<\/span>/",$data, $converted);
        $converted = preg_replace("/[^0-9.]/", "", $converted[1]);
        array_push($convertedCurrency, round($converted, 3));
    }
    return $convertedCurrency;
}

2 个答案:

答案 0 :(得分:2)

让我们假设一个请求在50毫秒内得到了答案,您可以自己为5000个请求进行计算......

更改接近问题的方法:汇率是线性的,因此您只需要一个答案,并且您可以在没有API的情况下进行交换计算。乘法运算比API请求快得多。向API询问1美元的计数器值,然后将每个美元金额乘以获得的值:

$amounts = array(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);

$from_Curr = 'USD';
$to_Curr = 'THB';

$convertedCurrency = convertCurrency($amounts, $from_Curr, $to_Curr);
print_r($amounts);
print_r($convertedCurrency);

function convertCurrency($amounts = array(), $from, $to) {
    $convertedCurrency = array();
    $amount = 1;

    $url = "https://finance.google.com/finance/converter?a=$amount&from=$from&to=$to";
    $data = file_get_contents($url);
    preg_match("/<span class=bld>(.*?)<\/span>/", $data, $converted);
    $converted = preg_replace("/[^0-9.]/", "", $converted[1]);

    foreach ($amounts as $amount) {
        $convertedCurrency[] = $amount * $converted;
    }

    return $convertedCurrency;
}

旁注:将正则表达式更改为非贪婪的匹配(。*?),以防在页面中添加了跨度。

答案 1 :(得分:1)

您使用的是免费服务吗?这可能是你收到超时错误的原因。 请求服务响应是有限制的,这就是达到该限制时出错的原因。 e.i在特定时间段内有多少请求

您要么寻找可以满足您要求的付费服务(一次5000个回复)

或者将您的请求更改为次数(小于5000)。

对于代码本身,我知道foreach被认为是缓慢的,尝试另一种循环解决方案。