2012-07-08 7 views
5

Quello che voglio fare è ottenere i tassi di cambio da internet. Ho trovato questa funzione dopo una lunga ricerca.Ottenere i tassi di cambio da Internet

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"; 
     } 
    } 

Ma http://www.webservicex.net/ non supporta AZN (Azerbaijani Manat) per usd e conversione viceversa. Quello che voglio fare è, se è possibile connettersi a Internet e ottenere tariffe. Altrimenti usa la funzione scritta per la conversione (ho già scritto).

Che cosa consigli, come posso ottenere le tariffe correnti per USD e AZN (o semplicemente ottenere risultati inviando USD o AZN)? Esiste comunque il modo per farlo dall'interno dell'applicazione Windows Form?

risposta

0

Ma http://www.webservicex.net/ non supporta AZN (Azerbaijani Manat) per usd e viceversa

Quindi? Calcola un tasso incrociato che attraversa un'altra valuta.

AZN è probabilmente una valuta marginale con volume o esposizione molto limitati. Chiedendo ad OANDA (http://www.oanda.com) ricevo alcune citazioni, tra cui una conversione in USD (http://www.oanda.com/currency/cross-rate/result?quotes=GBP & quotes = EUR & quotes = JPY & quotazioni = & CHF quotazioni = USD & quotazioni = AZN & vanno = Get + mia + Tavola +% 3E)

webservicesx.net probabilmente solo non ci sono prezzi per qualcosa che, delle principali valute.

Utilizzare un altro preventivo. FXCM e Oanda possono avere API a cui puoi iscriverti - probabilmente contro un prezzo.

In alternativa è possibile vedere se è possibile calcolare un cross-go da AZN a un'altra valuta se c'è un prezzo e da lì a USD. Ciò avviene frequentemente nel FOREX sebbene - gradevole - l'USD per lo più non abbia bisogno di un calcolo incrociato.

Esiste comunque l'accesso dall'applicazione Windows Form?

Quando si chiede circa un'API su internet, allora è del tutto irrilevante se si tratta di WinForms, webforms, PowerShell o uno script VB, l'API supporta, o no, e la tecnologia di interfaccia utente si utilizza è irrilevante.

0

Forse questo aiuterà. Io Google e ho visto alcuni servizi web alternativi, ma quelli che ho guardato non supportavano AZN. Ma non ho passato un sacco di tempo a farlo, questo è il tuo lavoro. Ho trovato questo:
http://www.transfermate.com/en/free_currency_converter.asp

cui è possibile aggiungere alla vostra applicazione, forse con l'aggiunta di un controllo del browser e l'incorporamento di questo su una pagina personalizzata e recuperando i risultati al modulo principale. Ma alla fine hai risposto tu stesso alla domanda:

Altrimenti utilizzare la funzione scritta per la conversione (I'VE già scritto).

Se non riesci a trovare una soluzione già disponibile, compila da solo.

Prova anche: https://developers.google.com/finance/ e http://openexchangerates.org/

4

Questo semplice algoritmo vi darà tutto quello che serve in un elenco coppia chiave-valore.

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; 
    } 
+0

per una spiegazione più approfondita lasciare un messaggio. – Freeman

+0

Bel pezzo di codice, ma c'è un motivo per non scegliere il solito 'dizionario <>'? –