2014-11-23 4 views
0

Я пытаюсь преобразовать валютные данные с помощью Google API и PHP curl. к сожалению, у меня есть следующая проблема, и я не могу ее решить. Кто-нибудь может мне помочь. вот моя функция PHP.Конвертация валюты с Google и CURL php

function currency($from_Currency,$to_Currency,$amount) { 
    $amount = urlencode($amount); 
    $from_Currency = urlencode($from_Currency); 
    $to_Currency = urlencode($to_Currency); 
    $url = "http://www.google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency"; 
    $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('"', $rawdata); 
    $data = explode(' ', $data['3']); 
    $var = $data['0']; 
    return round($var,2); 
} 

// вот мой вызов функции

$usd= currency("USD","ETB",1); 
echo "270 USD= ".$usd."ETB"; 

, но я имею follwing ошибку

Примечание: Undefined смещение: 3 ... на линии .... (14 из эта функция)

+0

'var_dump ($ rawdata)', чтобы увидеть, что вы на самом деле получаете. – Passerby

+0

Igoogle закрыт И ваша структура Url также неверна –

+0

@ Passerby, он извлекает false! что это значит – Mehari

ответ

1

Кажется, что ваш API URL неправильно, потому что, когда $rawdata эхо-редактор, Google возвращения Ошибка 404. В настоящее время, доступное решение (если вы настаиваете, чтобы использовать Google) для преобразования с помощью Google Finance. Например, используя GET запрос, вы можете отправить запрос в следующем формате:

$url = "https://www.google.com/finance/converter?a=" . $amount . "&from=" . $from . "&to=" . $to; 

К сожалению, Google возвращает полную страницу HTML, так что вам нужно разобрать результат вручную. Только сейчас я пытаюсь получить к нему доступ с помощью https://www.google.com/finance/converter?a=1&from=IDR&to=USD, а результат преобразования прилагается в <div>, как это:

<div id=currency_converter_result>1 IDR = <span class=bld>0.0001 USD</span> 

Итак, если вы сохраните результат в $rawdata переменной, вы можете использовать регулярные выражения в PHP для получения результата преобразования. Поскольку это не формальный API, вам необходимо активно следить за структурой страницы в следующий раз, если код не работает.

Это ваш код, обновляется с помощью теста:

function convertCurrency($amount, $from_Currency, $to_Currency) { 
    $url = "https://www.google.com/finance/converter?a=" . $amount . "&from=" . $from_Currency . "&to=" . $to_Currency; 
    $ch = curl_init(); 
    $timeout = 0; 

    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

    $rawdata = curl_exec($ch); 

    curl_close($ch); 

    preg_match("/<span class=bld>(.*)<\/span>/", $rawdata, $converted); 
    $converted = preg_replace("/[^0-9.]/", "", $converted); 

    return round($converted[0], 3); 
} 

$usd = currency("USD", "ETB", 270); 
echo "270 USD = " . $usd . " ETB"; 

Мое предложение: найти другой API для конвертации валют. Вы можете искать альтернативу, например, https://openexchangerates.org/. К сожалению, это платная услуга.

0

Google изменил свой адрес на

https://www.google.com/finance/converter?a 

Попробуйте как этот

function currency($from_Currency,$to_Currency,$amount) { 
      $amount = urlencode($amount); 
      $from_Currency = urlencode($from_Currency); 
      $to_Currency = urlencode($to_Currency); 
      $get = file_get_contents("https://www.google.com/finance/converter?a=$amount&from=$from_Currency&to=$to_Currency"); 
      $get = explode("<span class=bld>",$get); 
      $get = explode("</span>",$get[1]); 
      $converted_amount = preg_replace("/[^0-9\.]/", null, $get[0]); 
      return round($converted_amount,2); 

      } 

    echo currency("USD","INR",2);