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