Самый простой способ — подготовить статический преобразователь, ответственный за возврат предварительно собранного списка, который вернет (отправит вам) строку запроса 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