web-dev-qa-db-ja.com

通貨換算用のAPIが必要

JSONまたは小さなサイズのhtmlを返す通貨変換用のAPIをアドバイスしてください。 11-kbのHTMLを返す http://www.google.com/finance/converter?a=1&from=RUB&to=USD を使用します。 iOSアプリで使用しています。

前もって感謝します!

12
kastet

free.currencyconverterapi.com は、結果をJSON形式で返します。

WebサービスはJSONPもサポートします。このAPIは非常に使いやすく、通貨を別の通貨に変換できます。

免責事項、私はウェブサイトの作者です。

サンプルの変換URLは次のとおりです: http://free.currencyconverterapi.com/api/v6/convert?q=USD_PHP&compact=ultra&apiKey=sample-api-key json形式で値を返します。例: {"USD_PHP":51.459999}

17
Manny

コメントに記載されているように、このサービスは2013年11月にシャットダウンされました。

Googleのcalulator APIはこれを行うことができます。

リクエスト:

http://www.google.com/ig/calculator?hl=en&q=100EUR=?USD

応答:

{lhs: "100 Euros",rhs: "145.67 U.S. dollars",error: "",icc: true}

詳細

12
Alex K.

Yahooはもう機能していません。以下のコメントを参照してください

Yahoo Finance通貨コンバーター

このURL形式は、さまざまな形式でコンバージョン率を取得するために使用できます。

http://download.finance.yahoo.com/d/quotes.csv?s=AUDUSD=X&f=nl1d1t1

Quotes.csvを適切なフォーマットに置き換え、パラメーターを必要なコードに置き換えます。

編集:サンプルURL形式を追加

11
suhair

IGoogleが終了したため、Alex Kのソリューションは悲しく機能しなくなりました。 PHPでは、これは同じように機能し、同じように効果的な代替手段です:

$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]);
10
hobailey

更新:Yahoo APIはもう機能していません。これが機能しないという情報を提供するためだけにこのレガシーの回答を残します。


yahoo apiを使用してください:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22USDLTL%22)&format=json&env=store://datatables.org/alltableswithkeys&callback=

それは次のようなjson形式を返します:

{
  query: {
  count: 1,
  created: "2013-12-04T13:52:53Z",
  lang: "en-US",
  results: {
    rate: {
        id: "USDLTL",
        Name: "USD to LTL",
        Rate: "2.5485",
        Date: "12/4/2013",
        Time: "8:52am",
        Ask: "2.5486",
        Bid: "2.5485"
      }
    }
  }
}

現在USDLTLがあるURLを確認してください。必要なものに変更してください。

また、レートが非常に低いため、4つの数値が表示されない場合もあります。

レート:0.0006

逆転クエリを作成し、通貨を入れ替えて簡単な計算を行うだけで慌てる必要はありません。

例えばレートはKRWからEUR 0.0006であることがわかりましたが、実際のレートは0.00000125のようなものなので、APIにもう一度質問し、通貨を入れ替えるだけです。EURからUSDへの比率は何ですか。次に、12500000.xxxのような巨大な数値が得られるので、計算して必要な比率を取得します:1/12500000とすると、比率= 0.00000125になります。

それが役に立てば幸い;)

追伸読みやすいデコードされたURLは次のようになります。

http://query.yahooapis.com/v1/public/yql
?q=select * from yahoo.finance.xchange where pair in ("USDLTL")
&format=json
&env=store://datatables.org/alltableswithkeys
&callback=
8
Lukas

多くのサーバーではデフォルトでfopenがオフになっているため、fopenの代わりにcurlを使用するというFelix Geenenの答えを簡単に変更したものを次に示します。

(私はいくつかのコードをクリーンアップし、再試行するためにデクリメント値を追加しました。)

(また、たとえばstatic ::または$ this->に関数をドロップするスコープに応じて、再試行自己参照を更新することを忘れないでください)

function convert($from, $to, $retry = 0)
{
    $ch = curl_init("http://download.finance.yahoo.com/d/quotes.csv?s=$from$to=X&f=l1&e=.csv");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_NOBODY, false);
    $rate = curl_exec($ch);
    curl_close($ch);
    if ($rate) {
        return (float)$rate;
    } elseif ($retry > 0) {
        return convert($from, $to, --$retry);
    }
    return false;
}
5
Dieter Gribnitz

私はphpクラスを使用して通貨レートを変換します。

/**
 * Yahoo currency rate import class
 *
 * @author     Felix Geenen (http://www.geenen-it-systeme.de)
 * @version    1.0.3
 */
class Yahoofinance
{
    public static $_url = 'http://download.finance.yahoo.com/d/quotes.csv?s={{CURRENCY_FROM}}{{CURRENCY_TO}}=X&f=l1&e=.csv';
    public static $_messages = array();

    /*
     * converts currency rates
     *
     * use ISO-4217 currency-codes like EUR and USD (http://en.wikipedia.org/wiki/ISO_4217)
     *
     * @param currencyFrom String base-currency
     * @param currencyTo String currency that currencyFrom should be converted to
     * @param retry int change it to 1 if you dont want the method to retry receiving data on errors
     */
    public static function _convert($currencyFrom, $currencyTo, $retry=0)
    {
        $url = str_replace('{{CURRENCY_FROM}}', $currencyFrom, self::$_url);
        $url = str_replace('{{CURRENCY_TO}}', $currencyTo, $url);

        try {
            $handle = fopen($url, "r");

            if($handle !== false) {
                $exchange_rate = fread($handle, 2000);

                # there may be spaces or breaks
                $exchange_rate = trim($exchange_rate);
                $exchange_rate = (float) $exchange_rate;

                fclose($handle);

                if( !$exchange_rate ) {
                    echo 'Cannot retrieve rate from Yahoofinance';
                    return false;
                }
                return (float) $exchange_rate * 1.0; // change 1.0 to influence rate;
            }
        }
        catch (Exception $e) {
            if( $retry == 0 ) {
                # retry receiving data
                self::_convert($currencyFrom, $currencyTo, 1);
            } else {
                echo 'Cannot retrieve rate from Yahoofinance';
                return false;
            }
        }
    }
}
5
Felix Geenen

私はそれがちょうど腹が立つまでiGoogleを使用していました、私に正しく役立ちます。

上記のhobaileyのコメントに応じたコメントでのNerfair thoのおかげで、これは素晴らしい作品です。私はそれをここに投稿して、あなたがそれがどのように機能するかを完全に見ることができると思いました!

http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in( "USDCNY")&format = json&env = store://datatables.org/ alltableswithkeys&callback =

エンコードされたリンクのURLは次のとおりです。 http://query.yahooapis.com/v1/public/yql?q=select%2 *%20from%20yahoo.finance.xchange%20where%20pair%20in %20%28%22USDCNY%22%29&format = json&env = store://datatables.org/alltableswithkeys&callback=

スーパーニース、通貨ペアを変更するだけです。ネアフェア、ありがとう!

4
c0d3p03t