从互联网上获取汇率

时间:2012-07-08 15:58:31

标签: c# windows winforms visual-studio-2010 visual-studio

我想做的是,从互联网上获取汇率。 经过长时间的研究,我发现了这个功能。

protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
        string xmlResult = null;
        string url;
        url = "http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?FromCurrency=" + TextBox1.Text + "&ToCurrency=" + TextBox2.Text + "";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader resStream = new StreamReader(response.GetResponseStream());
        XmlDocument doc = new XmlDocument();
        xmlResult = resStream.ReadToEnd();
        doc.LoadXml(xmlResult);
        Label1.Text = "Current Exchange Rate for " + TextBox1.Text.ToUpper() + " ---> " + TextBox2.Text.ToUpper() + " value " + doc.GetElementsByTagName("double").Item(0).InnerText;
        }
        catch(Exception ex)
        {
            Label1.Text="Not a valid Currency or Try again later";
        }
    } 

http://www.webservicex.net/不支持AZN(阿塞拜疆马纳特)对usd,反之亦然。我想做的是,如果它可以连接到互联网并获得费率。否则使用书面函数进行转换(我已经写过了)。

您有什么建议,如何获得美元和AZN的当前汇率(或者通过发送美元或AZN获得结果)?无论如何从Windows窗体应用程序中获取它?

3 个答案:

答案 0 :(得分:4)

这个简单的算法会在键值对列表中为您提供所需的一切。

public static List<KeyValuePair<string, decimal>> GetCurrencyListFromWeb(out DateTime   currencyDate)
    {
        List<KeyValuePair<string, decimal>> returnList = new List<KeyValuePair<string, decimal>>();
        string date = string.Empty;
        using (XmlReader xmlr = XmlReader.Create(@"http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"))
        {
            xmlr.ReadToFollowing("Cube");
            while (xmlr.Read())
            {
                if (xmlr.NodeType != XmlNodeType.Element) continue;
                if (xmlr.GetAttribute("time") != null)
                {
                    date = xmlr.GetAttribute("time");
                }
                else returnList.Add(new KeyValuePair<string, decimal>(xmlr.GetAttribute("currency"), decimal.Parse(xmlr.GetAttribute("rate"), CultureInfo.InvariantCulture)));
            }
            currencyDate = DateTime.Parse(date);
        }
        returnList.Add(new KeyValuePair<string, decimal>("EUR", 1));
        return returnList;
    }

答案 1 :(得分:0)

  

但是http://www.webservicex.net/不支持AZN(阿塞拜疆马纳特)对usd反之亦然

所以?计算通过另一种货币的交叉汇率。

AZN可能是一种流量货币,其交易量或风险非常有限。问OANDA(http://www.oanda.com)我得到一些报价,包括美元转换(http://www.oanda.com/currency/cross-rate/result?quotes=GBP&quotes=EUR&引号= JPY&安培;引述= CHF&安培;引号= USD&安培;引号= AZN&安培;去=获取+我+表+%3E)

可能webservicesx.net对主要货币以外的东西没有价格。

使用其他报价。 FXCM和Oanda可能有您可以订阅的API - 可能是价格。

备选方案,您可以查看是否可以计算交叉 - 从AZN到另一种货币,如果有价格,从那里到美元。这虽然在外汇中经常进行 - 但同意 - 美元主要不需要交叉汇率计算。

  

无论如何从Windows窗体应用程序中获取它?

当您在互联网上询问API时,无论是winforms,webforms,powershell还是vb脚本都是无关紧要的,API是否支持它,并且您使用的UI技术无关紧要。< / p>

答案 2 :(得分:0)

也许这会有所帮助。我谷歌和我确实看到了一些替代的网络服务,但我看到的那些不支持AZN。但我没有花太多时间做这件事,那是你的工作。我确实发现了这个:
http://www.transfermate.com/en/free_currency_converter.asp

您可以添加到应用程序中,也可以添加浏览器控件并将其嵌入自定义页面并将结果检索到主表单。但最终,你自己回答了这个问题:

  

否则使用书面函数进行转换(我已经写过)。

如果您无法找到解决方案,请自行构建。

还尝试: https://developers.google.com/finance/http://openexchangerates.org/