- A+
所属分类:.NET技术
朋友做网站需要根据城市展示天气预报,找了一圈没有找到靠谱的接口,今天在中央气象台的官网查询某个城市找到了接口,先用postman试了一下居然可以使用,可以查询某个城市7天的天气预报等信息。但是查询编码是气象台自己的编码,在网上搜索了一下居然有这个编码。本文使用HttpClient方法查询这个接口。
天气接口
城市编码
HttpClient是.net core平台最常用的http请求工具,它直接基于Socket开发,提供了异步友好的代码编写方式,它在System.Net.Http命名空间下。
一、新建环境
首先新建一个.NET7 Asp.net core web Api程序。如下选项。
二、在控制器中新建GetWeather
我们这里用get方法请求,通过传入城市名查询天气预报,城市的名称和编码放到Dictionary,单独使用一个方法查询。代码如下:
[HttpGet(Name = "GetWeather")] public async Task<IActionResult> GetWeather(string cityName) { //编码查询单独使用了一个方法 int citycode = publicfun.GetKeys(cityName); using var client = new HttpClient(); //请求的基础地址,一般是域名 client.BaseAddress = new Uri("http://www.nmc.cn"); //在请求标头中,我们指定User-Agent client.DefaultRequestHeaders.Add("User-Agent", "CJAVAPY BOT"); client.DefaultRequestHeaders.Accept.Add( //设置accept标头,告诉JSON是可接受的响应类型 new MediaTypeWithQualityHeaderValue("application/json")); //实际请求地址 var url =$"rest/weather?stationid={citycode}&_=1672315767048"; HttpResponseMessage response = await client.GetAsync(url);//get请求 response.EnsureSuccessStatusCode(); var result= await response.Content.ReadAsStringAsync();//获取结果 return JsonResult(result) ;//返回json }
全国各个城市编码字典方法如下
public static class publicfun { public static int GetKeys(string key) { Dictionary<string, int> dic = new Dictionary<string, int>(); dic.Add("澳门", 45011); dic.Add("大兴安岭", 50442); dic.Add("黑河", 50468); dic.Add("齐齐哈尔", 50745); dic.Add("伊春", 50774); dic.Add("鹤岗", 50775); dic.Add("绥化", 50853); dic.Add("佳木斯", 50873); dic.Add("双鸭山", 50884); dic.Add("白城", 50936); dic.Add("哈尔滨", 50953); dic.Add("七台河", 50973); dic.Add("鸡西", 50978); dic.Add("阿勒泰", 51076); dic.Add("塔城", 51133); dic.Add("博州", 51238); dic.Add("克拉玛依", 51243); dic.Add("石河子", 51356); dic.Add("昌吉", 51368); dic.Add("伊宁", 51431); dic.Add("乌鲁木齐", 51463); dic.Add("吐鲁番", 51573); dic.Add("阿克苏", 51628); dic.Add("巴州", 51656); dic.Add("克州", 51704); dic.Add("喀什", 51709); dic.Add("和田", 51828); dic.Add("哈密", 52203); dic.Add("酒泉", 52533); dic.Add("张掖", 52652); dic.Add("金昌", 52675); dic.Add("武威", 52679); dic.Add("西宁", 52866); dic.Add("平安县", 52875); dic.Add("兰州", 52889); dic.Add("白银", 52896); dic.Add("同仁县", 52974); dic.Add("临夏", 52984); dic.Add("定西", 52995); dic.Add("包头", 53446); dic.Add("呼和浩特", 53463); dic.Add("大同", 53487); dic.Add("乌海", 53512); dic.Add("石嘴山", 53518); dic.Add("朔州", 53578); dic.Add("吴忠", 53612); dic.Add("银川", 53614); dic.Add("榆林", 53646); dic.Add("忻州", 53674); dic.Add("石家庄", 53698); dic.Add("太原", 53772); dic.Add("阳泉", 53782); dic.Add("邢台", 53798); dic.Add("固原", 53817); dic.Add("延安", 53845); dic.Add("临汾", 53868); dic.Add("长治", 53882); dic.Add("邯郸", 53892); dic.Add("安阳", 53898); dic.Add("平凉", 53915); dic.Add("铜川", 53947); dic.Add("运城", 53959); dic.Add("晋城", 53976); dic.Add("济源", 53978); dic.Add("焦作", 53982); dic.Add("新乡", 53986); dic.Add("鹤壁", 53990); dic.Add("牡丹江", 54094); dic.Add("通辽", 54135); dic.Add("四平", 54157); dic.Add("长春", 54161); dic.Add("吉林", 54172); dic.Add("赤峰", 54218); dic.Add("阜新", 54237); dic.Add("铁岭", 54249); dic.Add("辽源", 54260); dic.Add("锦州", 54337); dic.Add("盘锦", 54338); dic.Add("鞍山", 54339); dic.Add("沈阳", 54342); dic.Add("本溪", 54346); dic.Add("辽阳", 54347); dic.Add("通化", 54363); dic.Add("白山", 54371); dic.Add("张家口", 54401); dic.Add("承德", 54423); dic.Add("秦皇岛", 54449); dic.Add("葫芦岛", 54453); dic.Add("营口", 54471); dic.Add("丹东", 54497); dic.Add("北京", 54511); dic.Add("廊坊", 54515); dic.Add("天津", 54527); dic.Add("唐山", 54534); dic.Add("保定", 54602); dic.Add("沧州", 54616); dic.Add("大连", 54662); dic.Add("衡水", 54702); dic.Add("德州", 54714); dic.Add("滨州", 54734); dic.Add("东营", 54736); dic.Add("烟台", 54765); dic.Add("威海", 54774); dic.Add("聊城", 54806); dic.Add("济南", 54823); dic.Add("泰安", 54827); dic.Add("莱芜", 54828); dic.Add("淄博", 54830); dic.Add("潍坊", 54843); dic.Add("青岛", 54857); dic.Add("濮阳", 54900); dic.Add("菏泽", 54906); dic.Add("济宁", 54915); dic.Add("临沂", 54938); dic.Add("日照", 54945); dic.Add("噶尔县", 55437); dic.Add("日喀则", 55578); dic.Add("拉萨", 55591); dic.Add("合作", 56080); dic.Add("昌都县", 56137); dic.Add("绵阳", 56196); dic.Add("德阳", 56198); dic.Add("雅安", 56287); dic.Add("成都", 56294); dic.Add("资阳", 56298); dic.Add("林芝县", 56312); dic.Add("乐山", 56386); dic.Add("眉山", 56391); dic.Add("自贡", 56396); dic.Add("宜宾", 56492); dic.Add("昭通", 56586); dic.Add("丽江", 56651); dic.Add("攀枝花", 56666); dic.Add("六盘水", 56693); dic.Add("保山", 56748); dic.Add("大理", 56751); dic.Add("楚雄", 56768); dic.Add("昆明", 56778); dic.Add("曲靖", 56783); dic.Add("玉溪", 56875); dic.Add("临沧县", 56951); dic.Add("思茅", 56964); dic.Add("文山县", 56994); dic.Add("天水", 57006); dic.Add("宝鸡", 57016); dic.Add("西安", 57036); dic.Add("渭南", 57045); dic.Add("咸阳", 57048); dic.Add("三门峡", 57051); dic.Add("洛阳", 57073); dic.Add("郑州", 57083); dic.Add("许昌", 57089); dic.Add("开封", 57091); dic.Add("南阳", 57178); dic.Add("漯河", 57186); dic.Add("周口", 57195); dic.Add("广元", 57206); dic.Add("安康", 57245); dic.Add("襄樊", 57278); dic.Add("驻马店", 57290); dic.Add("信阳", 57297); dic.Add("巴中", 57313); dic.Add("达州", 57328); dic.Add("荆门", 57377); dic.Add("随州", 57381); dic.Add("遂宁", 57405); dic.Add("南充", 57411); dic.Add("广安", 57415); dic.Add("恩施", 57447); dic.Add("宜昌", 57461); dic.Add("荆州", 57476); dic.Add("孝感", 57482); dic.Add("武汉", 57494); dic.Add("鄂州", 57496); dic.Add("黄冈", 57498); dic.Add("重庆", 57516); dic.Add("大庸", 57558); dic.Add("岳阳", 57584); dic.Add("咸宁", 57590); dic.Add("常德", 57662); dic.Add("益阳", 57674); dic.Add("长沙", 57687); dic.Add("毕节", 57707); dic.Add("遵义", 57713); dic.Add("铜仁", 57741); dic.Add("怀化", 57749); dic.Add("娄底", 57763); dic.Add("邵阳", 57766); dic.Add("湘潭", 57773); dic.Add("株洲", 57780); dic.Add("萍乡", 57786); dic.Add("宜春", 57793); dic.Add("新余", 57796); dic.Add("安顺", 57806); dic.Add("贵阳", 57816); dic.Add("凯里", 57825); dic.Add("都匀", 57827); dic.Add("衡阳", 57872); dic.Add("桂林", 57957); dic.Add("郴州", 57972); dic.Add("赣州", 57993); dic.Add("商丘", 58005); dic.Add("枣庄", 58024); dic.Add("徐州", 58027); dic.Add("连云港", 58044); dic.Add("亳州", 58102); dic.Add("淮北", 58116); dic.Add("宿州", 58122); dic.Add("宿迁", 58131); dic.Add("淮安", 58145); dic.Add("盐城", 58151); dic.Add("阜阳", 58203); dic.Add("蚌埠", 58221); dic.Add("淮南", 58224); dic.Add("滁州", 58236); dic.Add("南京", 58238); dic.Add("扬州", 58245); dic.Add("泰州", 58246); dic.Add("镇江", 58248); dic.Add("南通", 58259); dic.Add("六安", 58311); dic.Add("合肥", 58321); dic.Add("巢湖", 58326); dic.Add("芜湖", 58334); dic.Add("马鞍山", 58336); dic.Add("常州", 58343); dic.Add("无锡", 58354); dic.Add("苏州", 58357); dic.Add("上海", 58362); dic.Add("黄石", 58407); dic.Add("安庆", 58424); dic.Add("池州", 58427); dic.Add("铜陵", 58429); dic.Add("宣城", 58433); dic.Add("湖州", 58450); dic.Add("嘉兴", 58452); dic.Add("绍兴", 58453); dic.Add("杭州", 58457); dic.Add("舟山", 58477); dic.Add("九江", 58502); dic.Add("景德镇", 58527); dic.Add("金华", 58549); dic.Add("南昌", 58606); dic.Add("抚州", 58617); dic.Add("鹰潭", 58627); dic.Add("衢州", 58633); dic.Add("丽水", 58646); dic.Add("温州", 58659); dic.Add("台州", 58660); dic.Add("三明", 58828); dic.Add("南平", 58834); dic.Add("宁德", 58846); dic.Add("福州", 58847); dic.Add("龙岩", 58927); dic.Add("莆田", 58946); dic.Add("河池地区", 59023); dic.Add("柳州", 59046); dic.Add("贺州地区", 59065); dic.Add("韶关", 59082); dic.Add("漳州", 59126); dic.Add("泉州", 59131); dic.Add("厦门", 59134); dic.Add("百色", 59211); dic.Add("来宾", 59242); dic.Add("贵港", 59249); dic.Add("梧州", 59265); dic.Add("肇庆", 59278); dic.Add("清远", 59280); dic.Add("广州", 59287); dic.Add("佛山", 59288); dic.Add("东莞", 59289); dic.Add("河源", 59293); dic.Add("潮州", 59312); dic.Add("揭阳", 59315); dic.Add("汕头", 59316); dic.Add("崇左", 59425); dic.Add("玉林", 59453); dic.Add("云浮", 59471); dic.Add("中山", 59485); dic.Add("珠海", 59488); dic.Add("深圳", 59493); dic.Add("汕尾", 59501); dic.Add("高雄", 59554); dic.Add("钦州", 59632); dic.Add("防城港", 59635); dic.Add("北海", 59644); dic.Add("湛江", 59658); dic.Add("茂名", 59659); dic.Add("阳江", 59663); dic.Add("海口", 59758); dic.Add("三亚", 59948); dic.Add("西沙", 59981); var rel = dic[key]; return rel; } }
查询效果如下:
数据全部都有了,大家可以根据实际需求情况建个对象来获取所需要的数据,这里就不实现了。
三、结语
本文讲述了使用.NET7通过HttpClient的get方法查询天气预报,时间关系未实现全部功能,仅供参考。如果对样式没有要求的话,网上有js的接口,直接粘贴到网页上就可以了。你有啥好的天气预报API吗?欢迎大家留言讨论。
来源公众号:DotNet开发跳槽❀