【问题标题】:Select real-time exchange rates for one currency pair from Yahoo从雅虎选择一个货币对的实时汇率
【发布时间】:2016-01-26 19:40:17
【问题描述】:

我正在使用这个 API 链接:

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

但这似乎不是选择具有特定 id 的元素的方法。

所以检查链接,我的问题是内部结果 - > 汇率元素具有不同的 id,所以现在我只想要 USDEUR 指数,我尝试了类似的东西

<script>
            setInterval(function(){ 
                //somehow convert xml to json
                $.getJSON('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20%28%22USDEUR%22,%20%22USDJPY%22,%20%22USDBGN%22,%20%22USDCZK%22,%20%22USDDKK%22,%20%22USDGBP%22,%20%22USDHUF%22,%20%22USDLTL%22,%20%22USDLVL%22,%20%22USDPLN%22,%20%22USDRON%22,%20%22USDSEK%22,%20%22USDCHF%22,%20%22USDNOK%22,%20%22USDHRK%22,%20%22USDRUB%22,%20%22USDTRY%22,%20%22USDAUD%22,%20%22USDBRL%22,%20%22USDCAD%22,%20%22USDCNY%22,%20%22USDHKD%22,%20%22USDIDR%22,%20%22USDILS%22,%20%22USDINR%22,%20%22USDKRW%22,%20%22USDMXN%22,%20%22USDMYR%22,%20%22USDNZD%22,%20%22USDPHP%22,%20%22USDSGD%22,%20%22USDTHB%22,%20%22USDZAR%22,%20%22USDISK%22%29&env=store://datatables.org/alltableswithkeys', function(data) {
                var USD = 1/data.query.results.rate['USDEUR'].Rate * 1.955
                document.getElementById('output-value').innerHTML = USD * document.getElementById('input-value').value;     
                });
             }, 500);
        </script>

【问题讨论】:

    标签: javascript json ajax


    【解决方案1】:

    如果您通过解码器运行 URL(例如,我所做的 PHP 的 urldecode() 函数,或者在线提供的众多解码器之一),这将更容易理解。 URL 只是它的一个编码版本:

    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
    

    我添加了一些格式以使正在发生的事情一目了然。这是一个带有一对名称列表的 YQL (Yahoo! Query Language) 语句(实际上只是一个 SQL SELECT 语句)。

    要获得您想要的结果,只需从 URL 中删除其他对,如下所示:

    http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20%28%22USDEUR%22%29&env=store://datatables.org/alltableswithkeys

    响应(为便于阅读而格式化):

    <?xml version="1.0" encoding="UTF-8"?>
    <query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2016-01-26T19:43:48Z" yahoo:lang="en-US">
        <results>
            <rate id="USDEUR">
                <Name>USD/EUR</Name>
                <Rate>0.9217</Rate>
                <Date>1/26/2016</Date>
                <Time>7:43pm</Time>
                <Ask>0.9218</Ask>
                <Bid>0.9217</Bid>
            </rate>
        </results>
    </query>
    <!-- total: 14 -->
    <!-- main-4f1bf6c6-c3ce-11e5-a05e-56847afe9799 -->
    

    【讨论】:

    • @dandavis 感谢您指出这一点。自从我使用任何 Yahoo! 以来已经有好几年了。 API,我没听说过。我更新了我的答案。
    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 2011-10-06
    • 2013-12-30
    • 2019-07-16
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 2016-04-27
    相关资源
    最近更新 更多