朋友做網站需要根據城市展示天氣預報,找了一圈沒有找到靠譜的介面,今天在中央氣象臺的官網查詢某個城市找到了介面,先用postman試了一下居然可以使用,可以查詢某個城市7天的天氣預報等信息。但是查詢編碼是氣象臺自己的編碼,在網上搜索了一下居然有這個編碼。本文使用HttpClient方法查詢這個介面。 ...
朋友做網站需要根據城市展示天氣預報,找了一圈沒有找到靠譜的介面,今天在中央氣象臺的官網查詢某個城市找到了介面,先用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開發跳槽❀