1

我需要雅虎 API,它将根据我通过的国家/地区返回所有国家/地区的汇率。

例如,我将通过美元作为基础,然后雅虎 API 应该返回所有其他国家的汇率。

我在谷歌上搜索我发现以下 Yahoo API

http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange
       where pair in ( "USDEUR", "USDJPY", "USDBGN", "USDCZK",
                       "USDDKK", "USDGBP", "USDHUF", "USDLTL",
                       "USDLVL", "USDPLN", "USDRON", "USDSEK",
                       "USDCHF", "USDNOK", "USDHRK", "USDRUB",
                       "USDTRY", "USDAUD", "USDBRL", "USDCAD",
                       "USDCNY", "USDHKD", "USDIDR", "USDILS",
                       "USDINR", "USDKRW", "USDMXN", "USDMYR",
                       "USDNZD", "USDPHP", "USDSGD", "USDTHB",
                       "USDZAR", "USDISK"
                       )&env=store://datatables.org/alltableswithkeys

在这个 API 中,我必须为每个国家一个一个地编写货币对。

我不想一一写货币对。

我想通过美元并返回所有其他国家的所有汇率。

请向我发送符合我要求的 Yahoo API 查询字符串。

4

1 回答 1

0

最简单的方法是准备一个静态转换器,负责返回预组装列表,它将返回(发送给您)Yahoo API 查询字符串。

一个简单的模型示例是:

string sendMeTheYahooApiQuerySTRING(  const string aCurrency1 = "USD",
                                            bool  &ErrorFLAG  = True
                                      ){
       switch( aCurrency1 ){
         case "USD":   ErrorFLAG = False; return( "https://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in ( "USDEUR", "USDJPY", "USDBGN", "USDCZK", "USDDKK", "USDGBP", "USDHUF", "USDLTL", "USDLVL", "USDPLN", "USDRON", "USDSEK", "USDCHF", "USDNOK", "USDHRK", "USDRUB", "USDTRY", "USDAUD", "USDBRL", "USDCAD", "USDCNY", "USDHKD", "USDIDR", "USDILS", "USDINR", "USDKRW", "USDMXN", "USDMYR", "USDNZD", "USDPHP", "USDSGD", "USDTHB", "USDZAR", "USDISK" )&env=store://datatables.org/alltableswithkeys" );
         case "GBP":   ErrorFLAG = False; return( "https://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in ( "GBPEUR", "GBPJPY", "GBPBGN", "GBPCZK", "GBPDKK", "USDGBP", ...  )&env=store://datatables.org/alltableswithkeys" );
         case "JPY":   ErrorFLAG = False; return( "https://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in ( "GBPJPY", "JPYBGN", ...  )&env=store://datatables.org/alltableswithkeys" );
         case  ... :   ErrorFLAG = False; return( ... );
         case default:                    return( "" );
       }

设计以便以后使用它:

 bool   anErrorFLAG  = False;
 ...
 string aQuerySTRING = sendMeTheYahooApiQuerySTRING( "DKK", anErrorFLAG );
 assert( !anErrorFLAG );
 ...

这种方法依赖于 Y! 边处理,详见 API 规范:

       <execute>
                var pairs = [];

                for each (var p in pair.toString().replace(/\s+/g,'').split(','))
                    pairs.push(p.toUpperCase() + '=X');

                var q = "select * from csv where url='http://download.finance.yahoo.com/d/quotes.csv?s="+ pairs.join(',') +
                    "&f=snl1d1t1ab'" + " and columns='Symbol,Name,Rate,Date,Time,Ask,Bid'",
                    results = y.query(q),
                    rates = <rates/>,
                    rows=results.results.row;

                for each (var row in rows) {
                    for each (var item in row.*) 
                        row[item.localName()]=item.text().toString().replace(/"/g, '');

                    var tag = row.Symbol.text().toString().substr(0,6);
                    delete row.Symbol;
                    rates.rate += <rate id={tag}>{row.*}</rate>;
                }
                response.object = rates;
                </execute>

另一种方法是构建一组重用 Y 的直接访问迭代器!直接访问查询语法,用于为每个相应的货币对返回单个 csv 记录,不带 Y!将结果聚合到一个公共容器中:

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

它返回的简单数据如下:

 "GBPJPY=X","GBP/JPY",146.7220

没有Y!方重新包装个别汇率。

于 2017-05-12T01:26:34.527 回答