获取银行货币汇率的

这个主要公司做外贸的每天都需要更新汇率,本来以前有一个服务可以调用,但是那个连接用不了 所以就写了一个这样的东西 套取网页显示信息

 

class ExchangeRate
    {

        private const string _BASEURL = "网页地址";
        
public  const string CURRENCYCODE = "货币类型以'|'隔开";//货币类型

        
public Hashtable GetValues()
        {
            Hashtable htReturn 
= new Hashtable();

            
string url = _BASEURL; //+ HttpUtility.UrlEncode(tmSet.ToString("yyyy/MM/dd", DateTimeFormatInfo.InvariantInfo));

            WebClient wc 
= new WebClient();
            
string sHtml = wc.DownloadString(url);
            
string sXml = string.Empty;
            
int iValueCnt = CURRENCYCODE.Split(new char[] { '|' }, 10, StringSplitOptions.RemoveEmptyEntries).Length;
            
string[] sTBody = sHtml.Split(new string[] { "<tbody>""</tbody>" }, StringSplitOptions.RemoveEmptyEntries);
            
foreach (string ss in sTBody)
            {
                
if (ss.Contains("Currency Name"))
                {
                    
string[] sbrs = ss.Split(new string[] { "</tr>" }, StringSplitOptions.RemoveEmptyEntries);
                    
foreach (string sbr in sbrs)
                    {
                        
string scur = string.Empty;
                        
double dRate = GetCurrencyRate(sbr, out scur);

                        
if (dRate != 0.0 && !string.IsNullOrEmpty(scur))
                        {
                            htReturn.Add(scur, dRate 
* 0.01);
                            
if (htReturn.Count >= iValueCnt)
                                
break;
                        }
                    }
                    
break;
                }
            }


            
return htReturn;
        }

        
private double GetCurrencyRate(string source, out string sCurrency)
        {
            sCurrency 
= string.Empty;

            
string sPattern = @"<td.+?>(.+?)</td>";
            
foreach (Match m in Regex.Matches(source, sPattern))
            {
                
string ss = m.Groups[1].Value;
                
if (IsNumeric(ss))
                    
return double.Parse(ss);
                
else
                {
                    
if (CURRENCYCODE.Contains(ss))
                        sCurrency 
= ss.Trim();
                    
else
                        
break;
                }
            }

            
return 0.0;
        }

        
public static bool IsNumeric(string str)
        {
            
if (string.IsNullOrEmpty(str)) return false;

            System.Text.RegularExpressions.Regex reg 
= new System.Text.RegularExpressions.Regex(@"^[-]?\d+[.|,]?\d*$");
            
return reg.IsMatch(str);
        }
    }
posted @ 2010-06-17 19:05  SESSION MODE  阅读(1122)  评论(4编辑  收藏  举报