今天主要講的是快速介接 政府資料開放平臺 上的 政府行政機關辦公日曆表 ... var url = "http://data.ntpc.gov.tw/api/v1/rest/datastore/382000000A-000077-002"; ...
2018iT邦幫忙鐵人賽
DAY
18
0
自我挑戰組
半路出家的工程師重新認識JavaScript系列第
18篇
18.(番外篇)五分鐘實作C#介接OpenData(政府行政機關辦公日曆表)
2018鐵人賽
awws
團隊2018新年快樂
2018-01-0521:06:099370瀏覽
前言
今天主要講的是快速介接政府資料開放平臺上的政府行政機關辦公日曆表
緣由是最近實作一個小型的工作行事曆
主要是讓客戶可以送件時,可以計算交件期限
邏輯蠻簡單的,從送件日根據案件等級往後推N個工作天即是
所以我們需要幾個資訊
送件日期
案件等級
判別工作日與例假日
工作日與例假日的部分,希望每年都可以匯入人事行政處公布的辦公日曆表
之後若遇颱風或其他不可抗拒因素彈性放假時,也要有地方可以手動調整
那我們就開始先接資料吧
先找到資料來源
先到政府行政機關辦公日曆表點選JSON檢視資料
複製資料網址
將網址貼到Chrome上就可以看到要接收的資料了
發送Httprequest&接收response
我們要先建立一個WebRequest
varurl="http://data.ntpc.gov.tw/api/v1/rest/datastore/382000000A-000077-002";
varrequest=WebRequest.Create(url);
//透過Chrome開發者工具可以取得Method,ContentType
request.Method="GET";
request.ContentType="application/json;charset=UTF-8";
取得request的responsestream
varresponse=request.GetResponse()asHttpWebResponse;
varresponseStream=response.GetResponseStream();
varreader=newStreamReader(responseStreaEncoding.GetEncoding("utf-8"));
varsrcString=reader.ReadToEnd();
srcString就是我們要的資料了
建立JSON格式對應的class
感謝Visualstudio提供強大的貼上JSON做為類別功能
先複製在Chrome貼上資料來源後,畫面中的JSON資料
建立一個class
編輯(E)=>選擇性貼上(S)=>貼上JSON做為類別(J)
將剛剛的responsestring轉為class吧
我利用Newtonsoft提供的轉型方法
varjsonData=Newtonsoft.Json.JsonConvert.DeserializeObject(srcString);
整段code看起來就會是
staticvoidMain(string[]args)
{
varurl="http://data.ntpc.gov.tw/api/v1/rest/datastore/382000000A-000077-002";
varrequest=WebRequest.Create(url);
varresponse=request.GetResponse()asHttpWebResponse;
varresponseStream=response.GetResponseStream();
varreader=newStreamReader(responseStream,Encoding.GetEncoding("utf-8"));
varsrcString=reader.ReadToEnd();
varjsonData=Newtonsoft.Json.JsonConvert
.DeserializeObject(srcString);
foreach(varholidayinjsonData.result.records)
{
Console.WriteLine($"Date:{holiday.date},IsHoliday:{holiday.isHoliday},Category:{holiday.holidayCategory}");
}
Console.ReadKey();
}
運行結果如圖
結論
目前用簡單的方式先接資料
看之後要開thread或是採用asyncawait方式都可以
完整的程式碼在Github上https://github.com/ChiYunJai/Day18_OpenData
目前有個小缺點是她日期為string
看之後轉型成DateTime會比較方便處理
接著開一張資料表紀錄某年某月某天是否為工作日即可
匯入步驟也很簡單
先將openData取得所有IsHoliday="是"的日期匯入
剩下的都是為工作日匯入
提供介面讓使用者可以根據情況調整某天為工作日或例假日即可
最後在算交件期限時,用送件日期當query條件去找即可!
留言
追蹤
檢舉
上一篇
17.個人筆記之常複製的方法整理集
下一篇
19.SpeakingJavaScript-Math
系列文
半路出家的工程師重新認識JavaScript
共30篇
目錄
RSS系列文
訂閱系列文
21人訂閱
26
26.SpeakingJavaScript主控台API(待補)
27
27.待補
28
28.待補
29
29.待補
30
30.待補
完整目錄
尚未有邦友留言
立即登入留言
iT邦幫忙鐵人賽
參賽組數
1087組
團體組數
52組
累計文章數
20460篇
完賽人數
572人
鐵人賽最新文章
更新網格交易機器人
STM32的開發生態,Cube、HAL庫、LL庫
閒聊STM32CubeMX和STM32CubeIDE
建立第一個單元測試(golang)-1(Day20)
Day38-在AWSLambda中使用YOLO推估(Inference)
Day37-在AWSLambda建立OpenCVLayer
Day36-使用Container建立AmazonSageMaker端點
Day35-AmazonSageMaker簡介
今天來瞄一眼龍與雀的科技:知覺共享技術Body-sharing
更新網格交易機器人
前往鐵人賽
技術推廣專區
[Day2]抓取每日收盤價
[Day1]基本工具安裝
利用python取得永豐銀行API的Nonce
永豐金融API測試員
[Day03]tinyML開發板介紹
[Day01]在享受tinyML這道美食之前
[Day3]使用ta-lib製作指標
計算API所需要的參數:HashID
[Day4]函數打包與買進持有報酬率試算
計算API所需要的參數:IV
前往鐵人賽
熱門問題
請推薦台中IT委外廠商
css選擇器中的[]什麼意思,或怎麼解釋
test這是個測試
請教光纖跳接線的選擇
新手程式提問
請問這個錯在哪?
[MVC][C#]連結中央氣象局天氣,並以氣溫判別顯示對應圖片
如何將SQL直行欄位加總完並放在指定欄位?
如果想把現有NAS掛給ESXI6當VM備份儲存區.請問要如何做
請問是否有人有使用過VisualStudioIDE??
IT邦幫忙
站方公告
2021iThome鐵人賽精彩文章超過2萬篇,預計12月揭曉本屆獲勝鐵人
熱門tag
看更多
13th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
2018鐵人賽
javascript
2017鐵人賽
windows
php
python
windowsserver
linux
c#
程式設計
資訊安全
css
vue.js
sql
分享
熱門回答
test這是個測試
請問這個錯在哪?
如果想把現有NAS掛給ESXI6當VM備份儲存區.請問要如何做
新手程式提問
急!傳值問題
Router靜態路由問題
請推薦台中IT委外廠商
[MVC][C#]連結中央氣象局天氣,並以氣溫判別顯示對應圖片
請問是否有人有使用過VisualStudioIDE??
htmljavascript值存入PHP
熱門文章
Day36-使用Container建立AmazonSageMaker端點
Day38-在AWSLambda中使用YOLO推估(Inference)
閒聊STM32CubeMX和STM32CubeIDE
STM32的開發生態,Cube、HAL庫、LL庫
建立第一個單元測試(golang)-1(Day20)
Day37-在AWSLambda建立OpenCVLayer
Python演算法學習日誌Day13
iPhone無法正常關機?可以試試這4個方法
從PDF刪除水印的5種最佳方法
12個類似LibraryGenesis的網站可以下載免費的PDF電子書
一週點數排行
更多點數排行
海綿寶寶(antijava)
raytracy(raytracy)
ccenjor(ccenjor)
rogeryao(rogeryao)
Mao(TutelaryMao)
Felix(redqi)
bsexp301479(bsexp301479)
Samuel(kuanyu)
Homura(homura0731)
juck30808(juck30808)
×
At
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{result.label}}
{{result.account}}
關閉