以前在网页中加入过天气的插件,但朋友一直说,为何这一个多月以来,天天的天气怎么都一样的?而且跟实际网上查找到的天气信息不一样。于是我个人就想,是否服务器不能联网更新?但朋友说绝可以,而且还是在服务器上直接打开天气网,发现所以城市的数据根本与网页上的不一致。起初我不太相信,因为数据是从天气网下载下来的。然后每二个小时自动更新一次。于是QQ连过去一看,最新的数据更新是2014.3.4。于是网上一查,发现是天气网停止维护了此数据。想到此,不禁唉的一声,原因你懂得,于是我就跟朋友说,这功能只能取消了。但朋友明显不高兴,说这一功能一直有用,突然不能用了,用户不接受。没办法,只能原本把地址链接过去。但这样一来,每个用户都必须要有上网的权限。这样也不太现实,不知道现在各位采用的方案是? 在此与大家分享一下主要的代码。看各位是否有更好的建议?
原先的方案
public static string getWeather()
{
string path = HttpContext.Current.Server.MapPath("~/weather.txt");
DateTime now = DateTime.Now;
DateTime lastUpdTime = DateTime.Now;
if (File.Exists(path))
{
lastUpdTime= File.GetLastWriteTime(path);
}
else
{
File.Create(path);
}
if (now.Subtract(lastUpdTime).Minutes > 120)
{
string UrlString = "http://m.weather.com.cn/data/101280301.html"
string contents = "";
WebRequest Wrequest = WebRequest.Create(UrlString);
Wrequest.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse Wresponse = (HttpWebResponse)Wrequest.GetResponse();
Stream responseStream = Wresponse.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
contents = reader.ReadToEnd();
reader.Close();
responseStream.Close();
Wresponse.Close();
File.WriteAllText(path, contents);
}
return File.ReadAllText(path);
}
然后把文件内容发送给前台: this.Page.RegisterClientScriptBlock("data", "<script> var jsData=" + getWeather()+ "</script>");
现在的方案只能是在前台直接引用
<iframe id="weather" frameborder="0" src="http://m.weather.com.cn/m/pn11/weather.htm" height="60" width="500" ></iframe>
但这样要求每个客户端都要上网,这显然与要求不一致,请问各位现在有什么好办法呢?