2017-05-06 11 views
2

私は通貨を変換するためにGoogle Finance計算機を使用しています。私はatleast = 2000の数字を一度に変換する必要があります。以下では、配列内に10個の数値しか設定していません。このコードを実行するとうまくいきますが、時間がかかりすぎます。約5000個の数字で試してみると、時々エラーが出ることがあります。どのように私は多くのデータのために私のコードで変更することができます誰も助けてくれますか?ありがとうございました。以下は私が現在使っているコードです。大量のデータを扱うGoogle通貨コンバータapi

$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

はの要求が50ミリ秒でanweredます、あなたは5000の要求について計算を自分で行うことができます想像してみましょう...

変更問題にアプローチする方法:為替レートは直線的であるので、あなただけの1つの答えを必要とし、 APIなしで交換計算後に行うことができます。乗算操作はAPI要求よりもはるかに高速です。 1 USDのカウンタ値に対してAPIを掲載し、次いで得られた値により各USD量を乗算:

$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; 
} 

追記:(。*?)非貪欲一致するように正規表現を変更し、場合スパンに添加しますこのページの

+0

をご了承致します。ありがとうございました – nas

+1

@nas喜んで助けました。 APIに1回のリクエストを行うには、まだ時間が必要です。通常は100〜150ms程度です。あなたはこれのために多くをすることはできません。その後、5000回の計算が高速に行われます。あなたのページを設定し、ブラウザにデータを送信するなど、他の操作に費やされる時間は... – Zimmi

1

無料サービスを利用していますか?おそらくタイムアウトエラーが発生しているのでしょう。 サービスからの応答を要求する制限があります。その制限に達したときにエラーが発生するのはなぜですか。 EIどのように多くの要求時間

の特定の期間にわたって

次のいずれかの有料サービスを探している摂取することができ、あなたの要件(一度に5000件の回答)

または小さいより5000倍より少ない数の(にあなたの要求を変更します)。

コード自体については、私はforeachが遅いと考えられていることを知っています、別のループソリューションを試してください。

+0

はい私は無料のものを使用しています。私はリストを使って試してみましたが、処理に若干の改善がありましたが、応答時間がまだそこにあります – nas

+0

遅延が応答時間かコードかどうかを判断するのは難しいです。 あなたはこの無料のAPIを試して、それが違いを生むかどうかを確認することができます http://www.currencyconverterapi.com/pricing 1時間あたり最大100リクエスト。 –

+0

ありがとうございます。今回は応答時間がありませんが、お時間はかかりますが、 – nas

関連する問題