Конвертер валют Google изменил свой URL-адрес, но не получил того же результата

У меня есть следующий код (ниже), и я использовал версию iGoogle.

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

НО, посмотрев, они используют другой URL:

  'http://www.google.com/finance/converter?hl=en&a=' . $amount . '&from=' . $from_Currency . '&to=USD';

Но простое изменение URL-адреса не возвращает требуемый результат, к которому я привык.

Теперь все, что я получил бы, это

 http://www.w3.org/TR/html4/strict.dtd

ТАК кто-нибудь работал над этим последним URL-адресом конвертера валют или имеет какие-либо идеи. Или замена с использованием PHP


person Simon Davies    schedule 07.11.2013    source источник


Ответы (4)


Благодаря более глубокому поиску и переформулировке проблемы нашел этот пост. Так что в некотором роде это дубликат. но вот вопрос:

Нужен API для конвертации валют

Я использовал ответ @hobailey для временного исправления, пока я не смогу обновить его до другой версии или Google не решит сделать правильный API.

  $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]);
person Simon Davies    schedule 07.11.2013
comment
Привет, спасибо, извините, не видя и не используя woocommerce/wordpress, я не могу вам помочь, но я уверен, что скоро вам помогут, или задайте свой вопрос, касающийся вашей проблемы. Извините - person Simon Davies; 06.10.2015
comment
На моем сервере, когда я использую file_get_contents('google.com/finance....'), он ничего не возвращает. Итак, что я могу сделать для работы? - person PlanetHackers; 29.06.2016

Использование XPath:

function currency($from, $to, $amount)
{
   $content = file_get_contents('https://www.google.com/finance/converter?a='.$amount.'&from='.$from.'&to='.$to);

   $doc = new DOMDocument;
   @$doc->loadHTML($content);
   $xpath = new DOMXpath($doc);

   $result = $xpath->query('//*[@id="currency_converter_result"]/span')->item(0)->nodeValue;

   return str_replace(' '.$to, '', $result);
}

echo currency('USD', 'EUR', 1); // returns 0.7216
person ABC    schedule 02.05.2014
comment
На моем сервере, когда я использую file_get_contents('https://www.google.com/finance....'), он ничего не возвращает. Итак, что я могу сделать для работы? - person PlanetHackers; 29.06.2016
comment
@PlanetHackers, пожалуйста, попросите вашего хоста включить allow_url_fopen: stackoverflow.com/questions/3694240/ Если это не сработает, проверьте журналы ошибок, чтобы выяснить, что мешает вам получить доступ к этому ресурсу. Вполне может быть, что эта услуга больше не доступна. - person ABC; 29.06.2016

Я создал класс для более простого подключения к Google здесь.

currency-converter-php

Я надеюсь, что это должно облегчить некоторые аспекты!

Изменить: я только что узнал, что служба Google была закрыта в ноябре 2013 года.

Я собираюсь изменить его!

Редактировать еще раз: я изменил Google Api на Yahoo Api, и он отлично работает!

person Ujjwal Ojha    schedule 07.11.2013
comment
Спасибо за этот хороший класс, буду иметь это в виду, когда буду обновлять сотры. - person Simon Davies; 07.11.2013
comment
к сожалению, забыл упомянуть, что вам нужно немного переработать это, так как он использует СТАРЫЙ URL-адрес Google google.com /ig/calculator... поскольку Google теперь использует 'google.com/finance/converter...', но это не случай простого изменения URL, как я думал :-) - person Simon Davies; 07.11.2013
comment
Спасибо, что рассказали. Я не знал этого раньше! - person Ujjwal Ojha; 07.11.2013
comment
не проблема, клиент это заметит :-) Гугл эй! Помимо ссылки, представленной ниже, это также команды взрыва. - person Simon Davies; 07.11.2013
comment
Я изменил Google Api на Yahoo Api, и он отлично работает! - person Ujjwal Ojha; 07.11.2013

Я нашел другое решение. Это также будет работать, если IP-адрес вашего сервера не может использовать сервис Google.

<?php
    $from_currency    = 'USD';
    $to_currency    = 'INR';
    $amount            = 1;
    $results = converCurrency($from_currency,$to_currency,$amount);
    $regularExpression     = '#\<span class=bld\>(.+?)\<\/span\>#s';
    preg_match($regularExpression, $results, $finalData);
    echo $finalData[0];

    function converCurrency($from,$to,$amount){
        $url = "http://www.google.com/finance/converter?a=$amount&from=$from&to=$to"; 
        $request = curl_init(); 
        $timeOut = 0; 
        curl_setopt ($request, CURLOPT_URL, $url); 
        curl_setopt ($request, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt ($request, CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 
        curl_setopt ($request, CURLOPT_CONNECTTIMEOUT, $timeOut); 
        $response = curl_exec($request); 
        curl_close($request); 
        return $response;
    } 
?>

Ссылка на источник Step Blogging

person PlanetHackers    schedule 29.06.2016
comment
Google Finance API должен был быть закрыт 20 октября 2012 года. Однако с тех пор он продолжал работать, пока не был опубликован ответ. Служба Google Финансы больше не поддерживается и не предлагает никакой поддержки. - person PlanetHackers; 23.08.2019
comment
Не могли бы вы поделиться с нами альтернативным решением. - person Chinmay235; 26.08.2019