Как получить обменные курсы с помощью API Yahoo, но без необходимости утомительно перечислять все основные и кросс-курсы?

Мне нужен Yahoo API, который будет возвращать обменные курсы для всей страны в зависимости от страны, которую я прохожу.

Например, я передам доллары США в качестве базы, тогда Yahoo API должен вернуть мне обменные курсы всех других стран.

У меня есть поиск в Google, я нахожу следующий 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 я должен писать одну за другой валютные пары для каждой страны.

Я не хочу писать валютные пары одну за другой.

Я хочу передать доллары и вернуть мне все обменные курсы для всех других стран.

Пожалуйста, пришлите мне строку запроса API Yahoo, которая соответствует моему требованию.


person Kirti Zare    schedule 11.04.2017    source источник
comment
Возможный дубликат Как получить курсы обмена валют через API, например Google Finance?   -  person Brian Rogers    schedule 12.04.2017


Ответы (1)


Самый простой способ — подготовить статический преобразователь, ответственный за возврат предварительно собранного списка, который вернет (отправит вам) строку запроса API Yahoo.

Тривиальный пример мокапа:

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

без буквы Ю! боковая переупаковка отдельных обменных курсов.

person user3666197    schedule 12.05.2017