Конвертер валют Google Финансы

Я работаю над конвертером валют Google, и он отлично работает для всех валют, но не показывает результаты конвертации ZAR - BTC.

Код конвертера валют Google:

<?php
function convertCurrency($amount, $from, $to){
    $data = file_get_contents("https://finance.google.com/finance/converter?a=$amount&from=$from&to=$to");
    preg_match("/<span class=bld>(.*)<\/span>/",$data, $converted);
    $converted = preg_replace("/[^0-9.]/", "", $converted[1]);
    return number_format(round($converted, 3),2);
}
echo convertCurrency("1000000", "ZAR", "BTC");

Ожидаемый результат должен быть 8.26 от Google, но он показывает сообщение Could not convert


person Coffee    schedule 24.02.2018    source источник
comment
Эти ссылки Google говорят одно и то же для нескольких разных валют в биткойнах. Как задается вопрос по программированию? Вы не пробовали ссылку через веб-браузер?   -  person James Z    schedule 24.02.2018
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что SO не может сказать вам, почему вы получаете определенные результаты для веб-страницы.   -  person James Z    schedule 24.02.2018
comment
сначала проверьте мой ответ.   -  person Coffee    schedule 24.02.2018
comment
это не из-за веб-браузера #James..   -  person Coffee    schedule 24.02.2018
comment
Я не могу сначала проверить то, что вы написали потом, но тем не менее, это вообще не связано с программированием.   -  person James Z    schedule 24.02.2018
comment
Буду признателен, если вы сможете решить этот вопрос с помощью finance.google.api.   -  person Coffee    schedule 24.02.2018
comment
Это потому, что страница говорит, что не может конвертировать. Я не говорил, что это из-за веб-браузера. Я сказал проверить страницу в веб-браузере   -  person James Z    schedule 24.02.2018


Ответы (4)


Я нашел способ сделать это ... просто вставив свой ответ для тех, кто понадобится в будущем.

<?php
function convertCurrency($amount, $from, $to){
    $data = file_get_contents("https://finance.google.com/finance/converter?a=$amount&from=$from&to=$to");
    preg_match("/<span class=bld>(.*)<\/span>/",$data, $converted);
    $converted = preg_replace("/[^0-9.]/", "", $converted[1]);
    return number_format(round($converted, 3),2);
}
 convertCurrency("1", "BTC", "ZAR");



function ZARtoBTC($amount){
      $BTC = convertCurrency("1", "BTC", "ZAR");
       $f_amount = number_format($amount, 3);

        $val = $f_amount / $BTC ;

       return  number_format($val, 2);
}
echo ZARtoBTC("100000");
person Coffee    schedule 24.02.2018

Когда вы получаете сообщение от Google Converter "Не удалось преобразовать" - это означает, что преобразование
1 CURRENCY_A --> CURRENCY_B приводит к слишком малой сумме. В этом случае нужно сделать обратное преобразование CURRENCY_A_AMOUNT / (1 CURRENCY_B --> CURRENCY_A)

person Agnius Vasiliauskas    schedule 06.03.2018

Наконец, я нашел решение для этого с обновленным URL-адресом Google для конвертера валют.

Нажмите здесь чтобы прочитать полное решение и поблагодарить меня позже

person iamal    schedule 22.03.2018

finance.google.com больше не поддерживается, попробуйте эти:

// google API - Load time: 558 ms
function google_money_convert($from, $to, $amount)
{
    $url = "https://www.google.com/search?q=".$from.$to;
    $request = curl_init();
    $timeOut = 0;
    curl_setopt($request, CURLOPT_URL, $url);
    curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($request, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36");
    curl_setopt($request, CURLOPT_CONNECTTIMEOUT, $timeOut);
    $response = curl_exec($request);
    curl_close($request);

    preg_match('~<span [^>]* id="knowledge-currency__tgt-amount"[^>]*>(.*?)</span>~si', $response, $finalData);
    $finalData=str_replace(',', '.', $finalData);
    return (float)$finalData[1]*$amount;
}


// free.currencyconverter API - Load time: 95ms
function money_convert($from, $to, $amount)
{
    $url = "http://free.currencyconverterapi.com/api/v5/convert?q=$query&compact=ultra";
    $request = curl_init();
    $timeOut = 0;
    curl_setopt($request, CURLOPT_URL, $url);
    curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($request, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36");
    curl_setopt($request, CURLOPT_CONNECTTIMEOUT, $timeOut);
    $response = curl_exec($request);
    curl_close($request);
    $response = json_decode($response, true);
    $responseOld=$response;
    // print_r($response);
    return $response[$query]*$amount;
}
person But Jao    schedule 17.10.2018