.NET7使用HttpClient實現查詢天氣預報介面

来源:https://www.cnblogs.com/xbhp/archive/2023/04/14/17317951.html
-Advertisement-
Play Games

朋友做網站需要根據城市展示天氣預報,找了一圈沒有找到靠譜的介面,今天在中央氣象臺的官網查詢某個城市找到了介面,先用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開發跳槽❀                                                    

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Tokio 無疑是 Rust 世界中最優秀的非同步Runtime實現。非阻塞的特性帶來了優異的性能,但是在實際的開發中我們往往需要在某些情況下阻塞任務來實現某些功能。 ...
  • Redis 環境 redis 安裝、配置,啟動:(此處以雲伺服器上進行說明) 下載地址:https://redis.io/download/ 下載後上傳到雲伺服器上,如 /usr/local 中 gcc 環境安裝:yum install -y gcc-c++ 解壓:tar -zxvf xxx 進入解 ...
  • 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如,序列 {1,2,3,4,5} 是某棧的壓棧序列,序列 {4,5,3,2,1} 是該壓棧序列對應的一個彈出序列,但 {4,3,5,1,2} 就不可能是該壓棧序列的彈出序列。 示例 1 ...
  • JVM記憶體分配 先瞭解下JVM中的記憶體分配,此處以hotspot vm為例(官方jdk採用的vm) 程式計數器 棧 1. 虛擬機棧 2. 本地方法棧 Java堆 堆記憶體是各個線程共用的區域 方法區 它用於存儲已經被虛擬機載入的類信息、常量、靜態變數、即編譯器編譯後的代碼等數據。靜態變數、常量在方法區 ...
  • 根據不同的條件,調用不同的 bean 對象,執行對象中的方法 SpringUtils 工具類 package com.vipsoft.web.utils; import cn.hutool.core.util.ArrayUtil; import org.springframework.aop.fra ...
  • 本系列文章導航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知識對您有所提示,同時歡迎交流和指正 作者:aierong出處:https://www ...
  • 本系列文章導航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知識對您有所提示,同時歡迎交流和指正 作者:aierong出處:https://www ...
  • 安裝 NuGet 包:在 Visual Studio 中打開項目,右鍵單擊項目名稱,選擇“管理 NuGet 包”,搜索“Quartz”並安裝。 創建作業:創建一個實現了 IJob 介面的類,該介面包含一個 Execute 方法,該方法將在作業運行時調用。例如: public class MyJob ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...