ASP.NETC#htmljs全球气候统计资料_第1页
ASP.NETC#htmljs全球气候统计资料_第2页
ASP.NETC#htmljs全球气候统计资料_第3页
ASP.NETC#htmljs全球气候统计资料_第4页
ASP.NETC#htmljs全球气候统计资料_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ASP.NET C#+html+js获取全球气候统计资料 前言本人最近在做一个系统要求可以在网页中的地图上,当鼠标悬浮于地图上的对应国家时可以显示出该国家的气候信息(最高/低温度,降雨量等)。功能性需求基本没啥毛病,但是在气候数据真心不好找。搜索中给出的气候数据下载地址全是英文的,且就算下载下来数据的解析也是相当难的。 解决方案在搜索后发现了“世界天气服务网”:/zh/home.html存在漏洞可以下载到数据。漏洞原因:该网站使用jquery ajax 动态获取国家城市信息,在通过获取到的城市ID再下载城市的气候数据,通过这样的一个获取和一个

2、循环就可以把数据都下载下来了,按该网站的说法“世界气象组织169会员的1901个城市的气候信息,其中135个成员还提供了1927个城市天气预报”。但下载下来还不够,因为下载下来的都是供JS解析的JSON格式的数据,我们还需要解析数据存放至数据库。當前時間:2016/12/13 解析代码(大部分代码)小弟学艺不精请多多包含一、 获取国家城市代码(/zh/json/Country_zh.xml)通过地址下载数据文件文件,将数据文件放入项目中。A. 由于数据必须由JS解析通过WEB Service读取文件WebMethod public string GetC

3、ountry() /return AppCode.CallWebApi.CallWebRequest(); StringBuilder sb = new StringBuilder(); String path = Server.MapPath(./Country_zh.xml); StreamReader sr = new StreamReader(path,System.Text.Encoding.Default); String line; while (line = sr.ReadLine() != null) /Console.WriteLine(line.ToString(); s

4、b.Append(line.ToString(); return sb.ToString(); B. WebService 接收Web页面解析的数据保存数据库 WebMethod public string Addmember(String memId,String memName) DQA.BLL.menber bll = new DQA.BLL.menber(); DQA.Model.menber model = new DQA.Model.menber(); model.memId = memId.Trim(); model.memName = memName.Trim(); bll.A

5、dd(model); return ; WebMethod public string AddmemberCity(String cityId,String memId, String cityName,String enName, String climate,String forecast ,String isCapital) DQA.BLL.menbercity bll = new DQA.BLL.menbercity(); DQA.Model.menbercity model = new DQA.Model.menbercity(); model.cityId = cityId.Tri

6、m(); model.memId = memId.Trim(); model.cityName = cityName.Trim(); model.enName = enName.Trim(); model.climate = climate.Trim(); model.forecast = forecast.Trim(); model.isCapital = Convert.ToBoolean(isCapital.Trim() ? 1 : 0; bll.Add(model); return ; C. Web页面解析逻辑如下: $(function () $(#btnTest).click(fu

7、nction () Test1(); ); ); function Test1() return; var url = ./WebService.asmx/GetCountry; $.ajax( type: POST, async: true, url: url, success: function (data) var obj = eval( + data.text + ); var members = obj.member; /alert(members.length); for (var item in members) if (item != lang) var country = m

8、embersitem; var memId = country.memId; Savemember(country); / break; $.each(country.city, function (i, n) var city = n; SavememberCity(memId, city); ); , error: function () alert(1); ); function Savemember(member) var url = ./WebService.asmx/Addmember; var data = memId: + member.memId + ,memName: +

9、member.memName + ; CallWebServiceWithasync(url, data , function () $(#ulList).append( + member.memId + member.memName + ); , function () /alert(error); ); function SavememberCity(memId, city) var url = ./WebService.asmx/AddmemberCity; var data = cityId: + city.cityId + ,memId: + memId + ,cityName: +

10、 city.cityName + ,enName: + city.enName + ,climate: + city.climate + ,forecast: + city.forecast + ,isCapital: + city.isCapital + ; CallWebServiceWithasync(url, data , function () $(#ulList).append( + city.cityName + ); , function () /alert(error); ); function CallWebServiceWithasync(url, data, calba

11、ckSuccess, calbackError) $.ajax( type: POST, async: false, contentType: application/json, url: url, data: data, dataType: json, success: calbackSuccess, error: calbackError ); 二、 获取城市气候资料城市气候数据的文件地址为:/zh/json/ + cityId.Trim() + _zh.xml;逻辑是通过上面已经获取的cityId拼接成完整的地址,然后把文件下载下来。当

12、然都是通过代码实现的,否则也就不方便人了。以下为代码:1. 下载、解析代码(需要用到JSON工具Newtonsoft.Json.dll)class Program public static int Count = 1; static DQA.BLL.menbercity bllCitys = new DQA.BLL.menbercity(); static DQA.BLL.map_citys_t bllMapCitys = new DQA.BLL.map_citys_t(); static void Main(string args) try List memberList = bllCit

13、ys.GetModelList(); /获取到城市代码select * FROM menber mb JOIN country c on mb.memName=c.Cname DataSet ds = Library.DBUtility.General.GetCountryCodeMaping(); foreach (DQA.Model.menbercity city in memberList) /下载文件时取消注释下面这句代码 /DownLoadCityClimateData(city.cityId, city.cityName);/解析文件时取消注释下面这句代码 /JsonDeSeria

14、lizeData(city.cityId, ds); catch (Exception ex) Console.WriteLine( Error Occored: +ex.Message); Console.ReadLine(); /下载测试方法 public static void DownLoadFile() String url = /zh/json/1342_zh.xml; /建立提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法。 System.Net.WebClient myWebClient = new

15、 System.Net.WebClient(); myWebClient.Credentials = new NetworkCredential(, ); /获取下载 ap code 页面的html源码 string valStr = myWebClient.DownloadString(url); Console.Write(valStr); Console.Read(); /通过cityId cityName下载数据 public static void DownLoadCityClimateData(String cityId,string cityName) if (cityId =

16、) return; try String CilmateFilePath = Library.DBUtility.General.GetRegistryKeyByName(CilmateFile).Trim(); String FilePath = CilmateFilePath + (CilmateFilePath.EndsWith(/) ? : /) + Climate/ + cityId.Trim() + .txt; if (!Directory.Exists(CilmateFilePath) Directory.CreateDirectory(CilmateFilePath); if

17、(!File.Exists(FilePath) FileStream fs1 = File.Create(FilePath); fs1.Flush(); fs1.Close(); String url = /zh/json/ + cityId.Trim() + _zh.xml; /建立提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法。 System.Net.WebClient myWebClient = new System.Net.WebClient(); /myWebClient.Credentials = n

18、ew NetworkCredential(_, #); string valStr = myWebClient.DownloadString(url); /Console.Write(valStr); FileStream fs = new FileStream(FilePath, System.IO.FileMode.Append); StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); sw.WriteLine(valStr); sw.Close(); fs.Close(); Console.WriteL

19、ine(Count + ;DownLoad: + cityName + Success); catch (Exception ex) Console.WriteLine(Count + ;Error DownLoad: + cityName + +ex.Message); Count+; /Console.Read(); /通过cityId 获取数据字符串 public static String ReadCityClimate(String CityId) if (CityId.Trim() = ) return ; String CilmateFilePath = Library.DBUt

20、ility.General.GetRegistryKeyByName(CilmateFile).Trim(); StringBuilder sb = new StringBuilder(); String path = CilmateFilePath+(CilmateFilePath.EndsWith(/) ? : /) + Climate + / + CityId.Trim() + .txt; ; StreamReader sr = new StreamReader(path, System.Text.Encoding.Default); String line; while (line =

21、 sr.ReadLine() != null) /Console.WriteLine(line.ToString(); sb.Append(line.ToString(); return sb.ToString(); /通过cityId获取数据并反串行化成对象实例,ds提供城市名称和国家代码,public static void JsonDeSerializeData(String CityId, DataSet ds) ClimateData modeldata = new ClimateData(); String jsonString = ReadCityClimate(CityId);

22、 modeldata = JsonConvert.DeserializeObject(jsonString);/ modeldata为详细数据按照需要处理 public static void JsonDeSerializeTest() member member = new member(); member.memId = 16; member.memName = u5fb7u56fd; member.url = www.dwd.de; Name = u5fb7u56fdu6c14u8c61u5c40; member.logo = germany_logo.png; me

23、mber.ra = 6; / 串行化为JSON字符串 string _json = JsonConvert.SerializeObject(member); / 反串行化为Person列表对象 member member2 = JsonConvert.DeserializeObject(_json); string _json2 = JsonConvert.SerializeObject(member2); 2. 贴上反串行化使用的到的对象 class ClimateData public city city; class city public String lang; public Str

24、ing cityName; public String cityLatitude; public String cityLongitude; public String cityId; public String isCapital; public String stationName; public String tourismURL; public String tourismBoardName; public String isDep; public String isDST; public member member; public forecast forecast; public climate climate; class climate public String raintype; public String raindef; public String rainunit; public String datab; public String datae; public String tempb; public String tempe; public String rdayb; public St

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论