2023年1月11日 星期三

Python爬蟲

 Python爬蟲

源自於 https://pala.tw/python-web-crawler/

import requests

from bs4 import BeautifulSoup


tag = input("請輸入定位元素,class前面加上.,id前面加上# ")

res = requests.get('https://hipala.github.io/class-id-example/')

soup = BeautifulSoup(res.text, "html")


for drink in soup.select('{}'.format(tag)):

    print(drink.get_text())


>>> %Run -c $EDITOR_CONTENT

請輸入定位元素,class前面加上.,id前面加上# .半糖

老闆的半糖去冰珍珠奶茶

心儀同事的半糖去冰文山青茶

工讀生的半糖微冰珍珠紅茶

>>> 



https://hipala.github.io/class-id-example/

老闆的半糖去冰珍珠奶茶

資深前輩的無糖去冰綠茶

Pala的無糖微冰鐵觀音

心儀同事的半糖去冰文山青茶

工讀生的半糖微冰珍珠紅茶



<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>辦公室的下午茶</title>
</head>
<body>
<p id="老闆" class="半糖 去冰 珍珠 奶茶">老闆的半糖去冰珍珠奶茶</p>
<p id="資深前輩" class="無糖 去冰 綠茶">資深前輩的無糖去冰綠茶</p>
<p id="Pala" class="無糖 微冰 鐵觀音">Pala的無糖微冰鐵觀音</p>
<p id="心儀同事" class="半糖 去冰 文山青茶">心儀同事的半糖去冰文山青茶</p>
<p id="工讀生" class="半糖 微冰 珍珠 紅茶">工讀生的半糖微冰珍珠紅茶</p>
</body>
</html>


ample/')soup = BeautifulSoup(res.text, "html")
for drink in soup.select('{}'.format(tag)):    print(drink.get_text())

Python 爬取統一發票號碼

 Python 爬取統一發票號碼

 源自於 https://steam.oxxostudio.tw/category/python/spider/invoice-auto.html






import requests

url = 'https://invoice.etax.nat.gov.tw/index.html'

web = requests.get(url)    # 取得網頁內容

web.encoding='utf-8'       # 因為該網頁編碼為 utf-8,加上 .encoding 避免亂碼


from bs4 import BeautifulSoup

soup = BeautifulSoup(web.text, "html.parser")                    # 轉換成標籤樹

td = soup.select('.container-fluid')[0].select('.etw-tbiggest')  # 取出中獎號碼的位置

ns = td[0].getText()  # 特別獎

n1 = td[1].getText()  # 特獎

# 頭獎,因為存入串列會出現 /n 換行符,使用 [-8:] 取出最後八碼

n2 = [td[2].getText()[-8:], td[3].getText()[-8:], td[4].getText()[-8:]]

print(ns)

print(n1)

print(n2)


>>> %Run invoice_2.py
11174120
59276913
['18079936', '20591738', '64500205']
>>> 


2023年1月10日 星期二

Pytthon 爬取臺灣銀行牌告匯率 --> Line Notify , Node-red MQTT

 Pytthon 爬取臺灣銀行牌告匯率

 源自於https://steam.oxxostudio.tw/category/python/spider/exchange.html





import requests

import paho.mqtt.client as mqtt #import the client1

import time

publish=[]

#=================================#

def on_message(client, userdata, message):

    print("message received " ,str(message.payload.decode("utf-8")))

    print("message topic=",message.topic)

    print("message qos=",message.qos)

    print("message retain flag=",message.retain)

#=================================#

broker_address="broker.mqtt-dashboard.com"

#broker_address="iot.eclipse.org"

print("creating new instance")

client = mqtt.Client("P1") #create new instance

client.on_message=on_message #attach function to callback

print("connecting to broker --> ",broker_address )

client.connect(broker_address) #connect to broke

#=================================#


url = 'https://rate.bot.com.tw/xrt/flcsv/0/day'   # 牌告匯率 CSV 網址

# https://rate.bot.com.tw/xrt/flcsv/0/day

rate = requests.get(url)   # 爬取網址內容

rate.encoding = 'utf-8'    # 調整回應訊息編碼為 utf-8,避免編碼不同造成亂碼

rt = rate.text             # 以文字模式讀取內容

rts = rt.split('\n')       # 使用「換行」將內容拆分成串列

#============MQTT===================#    

client.loop_start() #start the loop

#============Line Notify===================#    

url = 'https://notify-api.line.me/api/notify'    # LINE Notify API 網址

#token = '你的 LINE Notify 權杖'                   # 自己申請的 LINE Notify 權杖

token = 'A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'

headers = {

    'Authorization': 'Bearer ' + token           # POST 使用的 headers

}



for i in rts:              # 讀取串列的每個項目

    try:                             # 使用 try 避開最後一行的空白行

        a = i.split(',')             # 每個項目用逗號拆分成子串列

        print(a[0] + ': ' + a[12])   # 取出第一個 ( 0 ) 和第十三個項目 ( 12 )

        #--------------------------------------------------------------------

        client.publish("alex9ufo/ratetbot",a[0] + ': ' + a[12])

        #--------------------------------------------------------------------          

        data = {# 發送的訊息

                    'message':'Python送出 目前台灣銀行牌告匯率 -->幣別  現金 '+ a[0] + ': ' + a[12]

                    }

        data = requests.post(url, headers=headers, data=data)    # 發送 LINE NOtify

        

        time.sleep(5) # wait

        #--------------------------------------------------------------------        

    except:

        break

#============MQTT===================#    


client.loop_stop() #stop the loop



#============Line Notify===================#    




>>> %Run Rate_2.py
creating new instance
connecting to broker -->  broker.mqtt-dashboard.com
幣別: 現金
USD: 30.70000
HKD: 3.94300
GBP: 37.90000
AUD: 21.36000
CAD: 23.06000
SGD: 23.17000
CHF: 33.35000
JPY: 0.23340
ZAR: 0.00000
SEK: 3.05000
NZD: 19.76000
THB: 0.96850
PHP: 0.61960
IDR: 0.00233
EUR: 33.18000
KRW: 0.02652
VND: 0.00148
MYR: 7.43400
CNY: 4.54300
>>> 








[{"id":"d3c84f39d1691d3c","type":"debug","z":"323770202b3d133d","name":"debug 58","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":480,"y":500,"wires":[]},{"id":"cc243efbb1f863bb","type":"mqtt in","z":"323770202b3d133d","name":"","topic":"alex9ufo/ratetbot","qos":"2","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":240,"y":500,"wires":[["d3c84f39d1691d3c","d498ad7ef323948c"]]},{"id":"d498ad7ef323948c","type":"ui_text","z":"323770202b3d133d","group":"a73c0688.26bac8","order":1,"width":0,"height":0,"name":"","label":"牌告匯率","format":"{{msg.payload}}","layout":"row-left","className":"","x":480,"y":540,"wires":[]},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"a73c0688.26bac8","type":"ui_group","name":"Bits","tab":"207e613d.22c52e","order":4,"disp":false,"width":10,"collapse":false},{"id":"207e613d.22c52e","type":"ui_tab","name":"Configuration","icon":"dashboard","order":5,"disabled":false,"hidden":false}]

Python 爬取空氣品質指標 ( AQI )

Python 爬取空氣品質指標 ( AQI )


import requests

# 2022/12 時氣象局有修改了 API 內容,將部份大小寫混合全改成小寫,因此程式碼也跟著修正

url = 'https://data.epa.gov.tw/api/v2/aqx_p_432?api_key=e8dd42e6-9b8b-43f8-991e-b3dee723a52d&limit=1000&sort=ImportDate%20desc&format=JSON'

data = requests.get(url)             # 使用 get 方法透過空氣品質指標 API 取得內容

data_json = data.json()              # 將取得的檔案轉換為 JSON 格式

for i in data_json['records']:       # 依序取出 records 內容的每個項目

    print(i['county'] + ' ' + i['sitename'], end=',')    # 印出城市與地點名稱

    print('AQI:' + i['aqi'], end=',')                    # 印出 AQI 數值

    print('空氣品質' + i['status'])                        # 印出空氣品質狀態


>>> %Run AQI_1.py

基隆市 基隆,AQI:31,空氣品質良好

新北市 汐止,AQI:26,空氣品質良好

新北市 萬里,AQI:38,空氣品質良好

新北市 新店,AQI:28,空氣品質良好

新北市 土城,AQI:32,空氣品質良好

新北市 板橋,AQI:33,空氣品質良好

新北市 新莊,AQI:28,空氣品質良好

新北市 菜寮,AQI:28,空氣品質良好

新北市 林口,AQI:26,空氣品質良好

新北市 淡水,AQI:17,空氣品質良好

臺北市 士林,AQI:21,空氣品質良好

臺北市 中山,AQI:33,空氣品質良好

臺北市 萬華,AQI:32,空氣品質良好

臺北市 古亭,AQI:36,空氣品質良好

臺北市 松山,AQI:30,空氣品質良好

臺北市 大同,AQI:40,空氣品質良好

桃園市 桃園,AQI:27,空氣品質良好

桃園市 大園,AQI:37,空氣品質良好

桃園市 觀音,AQI:42,空氣品質良好

桃園市 平鎮,AQI:33,空氣品質良好

桃園市 龍潭,AQI:39,空氣品質良好

新竹縣 湖口,AQI:34,空氣品質良好

新竹縣 竹東,AQI:38,空氣品質良好

新竹市 新竹,AQI:28,空氣品質良好

苗栗縣 頭份,AQI:34,空氣品質良好

苗栗縣 苗栗,AQI:46,空氣品質良好

苗栗縣 三義,AQI:33,空氣品質良好

臺中市 豐原,AQI:59,空氣品質普通

臺中市 沙鹿,AQI:48,空氣品質良好

臺中市 大里,AQI:63,空氣品質普通

臺中市 忠明,AQI:57,空氣品質普通

臺中市 西屯,AQI:55,空氣品質普通

彰化縣 彰化,AQI:55,空氣品質普通

彰化縣 線西,AQI:58,空氣品質普通

彰化縣 二林,AQI:64,空氣品質普通

南投縣 南投,AQI:72,空氣品質普通

雲林縣 斗六,AQI:94,空氣品質普通

雲林縣 崙背,AQI:84,空氣品質普通

嘉義縣 新港,AQI:96,空氣品質普通

嘉義縣 朴子,AQI:87,空氣品質普通

雲林縣 臺西,AQI:61,空氣品質普通

嘉義市 嘉義,AQI:105,空氣品質對敏感族群不健康

臺南市 新營,AQI:89,空氣品質普通

臺南市 善化,AQI:87,空氣品質普通

臺南市 安南,AQI:78,空氣品質普通

臺南市 臺南,AQI:94,空氣品質普通

高雄市 美濃,AQI:88,空氣品質普通

高雄市 橋頭,AQI:91,空氣品質普通

高雄市 仁武,AQI:108,空氣品質對敏感族群不健康

高雄市 鳳山,AQI:113,空氣品質對敏感族群不健康

高雄市 大寮,AQI:117,空氣品質對敏感族群不健康

高雄市 林園,AQI:99,空氣品質普通

高雄市 楠梓,AQI:99,空氣品質普通

高雄市 左營,AQI:83,空氣品質普通

高雄市 前金,AQI:86,空氣品質普通

高雄市 前鎮,AQI:89,空氣品質普通

高雄市 小港,AQI:99,空氣品質普通

屏東縣 屏東,AQI:111,空氣品質對敏感族群不健康

屏東縣 潮州,AQI:116,空氣品質對敏感族群不健康

屏東縣 恆春,AQI:35,空氣品質良好

臺東縣 臺東,AQI:32,空氣品質良好

花蓮縣 花蓮,AQI:28,空氣品質良好

臺北市 陽明,AQI:36,空氣品質良好

宜蘭縣 宜蘭,AQI:28,空氣品質良好

宜蘭縣 冬山,AQI:24,空氣品質良好

新北市 三重,AQI:51,空氣品質普通

桃園市 中壢,AQI:48,空氣品質良好

南投縣 竹山,AQI:91,空氣品質普通

新北市 永和,AQI:36,空氣品質良好

高雄市 復興,AQI:85,空氣品質普通

南投縣 埔里,AQI:75,空氣品質普通

連江縣 馬祖,AQI:106,空氣品質對敏感族群不健康

金門縣 金門,AQI:69,空氣品質普通

澎湖縣 馬公,AQI:70,空氣品質普通

臺東縣 關山,AQI:29,空氣品質良好

雲林縣 麥寮,AQI:61,空氣品質普通

新北市 富貴角,AQI:45,空氣品質良好

彰化縣 大城,AQI:52,空氣品質普通

彰化縣 彰化(員林),AQI:57,空氣品質普通

高雄市 高雄(湖內),AQI:89,空氣品質普通

臺南市 臺南(麻豆),AQI:78,空氣品質普通

屏東縣 屏東(琉球),AQI:85,空氣品質普通

宜蘭縣 宜蘭(壯圍),AQI:37,空氣品質良好

新北市 新北(樹林),AQI:42,空氣品質良好

臺南市 臺南(學甲),AQI:76,空氣品質普通

屏東縣 屏東(枋山),AQI:63,空氣品質普通

>>> 

"records": [
        {
            "sitename": "基隆",
            "county": "基隆市",
            "aqi": "30",
            "pollutant": "",
            "status": "良好",
            "so2": "1.5",
            "co": "0.2",
            "o3": "31.9",
            "o3_8hr": "32.9",
            "pm10": "9",
            "pm2.5": "",
            "no2": "5.6",
            "nox": "5.8",
            "no": "0.2",
            "wind_speed": "0.3",
            "wind_direc": "35",
            "publishtime": "2023\/01\/10 21:00:00",
            "co_8hr": "0.1",
            "pm2.5_avg": "",
            "pm10_avg": "13",
            "so2_avg": "1",
            "longitude": "121.760056",
            "latitude": "25.129167",
            "siteid": "1"
        },

Python 透過 LINE Notify 與 MQTT--> Node-red LINE Notify傳送雷達回波圖

Python 透過 LINE Notify  與 MQTT-->  Node-red  LINE Notify傳送雷達回波圖 

源自於https://steam.oxxostudio.tw/category/python/spider/radar.html






import requests

import paho.mqtt.client as mqtt #import the client1

import time

publish=''


def on_message(client, userdata, message):

    print("message received " ,str(message.payload.decode("utf-8")))

    print("message topic=",message.topic)

    print("message qos=",message.qos)

    print("message retain flag=",message.retain)

########################################

broker_address="broker.mqtt-dashboard.com"

#broker_address="iot.eclipse.org"


print("creating new instance")

client = mqtt.Client("P1") #create new instance

client.on_message=on_message #attach function to callback

print("connecting to broker --> ",broker_address )

client.connect(broker_address) #connect to broke


########################################


radar_url = 'https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/O-A0058-003?Authorization=rdec-key-123-45678-011121314&format=JSON'

radar = requests.get(radar_url)        # 爬取資料

radar_json = radar.json()              # 使用 JSON 格式

radar_img = radar_json['cwbopendata']['dataset']['resource']['uri']  # 取得圖片網址

print(radar_img)

'''

msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};

msg.payload = {"message":msg.payload};

return msg;

'''


url = 'https://notify-api.line.me/api/notify'    # LINE Notify API 網址

#token = '你的 LINE Notify 權杖'                   # 自己申請的 LINE Notify 權杖

token = 'A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'

headers = {

    'Authorization': 'Bearer ' + token           # POST 使用的 headers

}

data = {

    'message':'Python送出 從雷達回波看看會不會下雨~',   # 發送的訊息

    'imageThumbnail':radar_img,          # 預覽圖網址

    'imageFullsize':radar_img            # 完整圖片網址

}

data = requests.post(url, headers=headers, data=data)    # 發送 LINE NOtify



publish=radar_img

client.loop_start() #start the loop

client.publish("alex9ufo/weather/O-A0058-003",publish)

time.sleep(10) # wait

client.loop_stop() #stop the loop


>>> %Run weather_6.py
creating new instance
connecting to broker -->  broker.mqtt-dashboard.com
https://cwbopendata.s3.ap-northeast-1.amazonaws.com/MSC/O-A0058-003.png
>>> 


[{"id":"9829271aabbe6547","type":"http request","z":"1257c22baca94adc","name":"","method":"GET","ret":"bin","paytoqs":"ignore","url":"https://cwbopendata.s3.ap-northeast-1.amazonaws.com/MSC/O-A0058-003.png","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":260,"y":200,"wires":[["4bdb85e00d197670"]]},{"id":"e7765b8d9c73972d","type":"inject","z":"1257c22baca94adc","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":110,"y":240,"wires":[["9829271aabbe6547"]]},{"id":"4bdb85e00d197670","type":"base64","z":"1257c22baca94adc","name":"","action":"","property":"payload","x":420,"y":200,"wires":[["5efea32a70b22095","4416caaaf0b9114e"]]},{"id":"5efea32a70b22095","type":"image","z":"1257c22baca94adc","name":"","width":160,"data":"payload","dataType":"msg","thumbnail":true,"active":true,"outputs":0,"x":620,"y":200,"wires":[]},{"id":"047993ea0d909a53","type":"mqtt in","z":"1257c22baca94adc","name":"","topic":"alex9ufo/weather/O-A0058-003","qos":"2","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":170,"y":120,"wires":[["8936ddaa7a14dd29","9829271aabbe6547"]]},{"id":"8936ddaa7a14dd29","type":"debug","z":"1257c22baca94adc","name":"debug 57","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":460,"y":120,"wires":[]},{"id":"4416caaaf0b9114e","type":"delay","z":"1257c22baca94adc","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":260,"y":300,"wires":[["10685170bcc4d2b2"]]},{"id":"10685170bcc4d2b2","type":"line-notify","z":"1257c22baca94adc","name":"","message":"send image 從Node-Red","contentType":"imageUrl","imageThumbnail":"","imageUrl":"https://cwbopendata.s3.ap-northeast-1.amazonaws.com/MSC/O-A0058-003.png","sticker":"default","stickerPackageId":"1","stickerId":"1","silent":false,"creds":"4d14683c16fc0999","x":400,"y":300,"wires":[["af93dbe2dfce13e9"]]},{"id":"af93dbe2dfce13e9","type":"image","z":"1257c22baca94adc","name":"","width":160,"data":"payload","dataType":"msg","thumbnail":true,"active":true,"outputs":0,"x":580,"y":360,"wires":[]},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"4d14683c16fc0999","type":"linetoken","name":"alex line"}]

2023年1月9日 星期一

Python 天氣 --> Node-Red MQTT --> Line Notifly

Python 天氣 --> Node-Red MQTT --> Line Notifly



import requests

import paho.mqtt.client as mqtt #import the client1

import time

publish=''

j=1

def on_message(client, userdata, message):

    print("message received " ,str(message.payload.decode("utf-8")))

    print("message topic=",message.topic)

    print("message qos=",message.qos)

    print("message retain flag=",message.retain)

########################################

broker_address="broker.mqtt-dashboard.com"

#broker_address="iot.eclipse.org"


print("creating new instance")

client = mqtt.Client("P1") #create new instance

client.on_message=on_message #attach function to callback

print("connecting to broker")

client.connect(broker_address) #connect to broke


# url = '一般天氣預報 - 今明 36 小時天氣預報 JSON 連結'

url = "https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/F-C0032-001?Authorization=rdec-key-123-45678-011121314&format=JSON"

data = requests.get(url)   # 取得 JSON 檔案的內容為文字

data_json = data.json()    # 轉換成 JSON 格式

location = data_json['cwbopendata']['dataset']['location']

client.loop_start() #start the loop

for i in location:

    city = i['locationName']    # 縣市名稱

    wx8 = i['weatherElement'][0]['time'][0]['parameter']['parameterName']    # 天氣現象

    maxt8 = i['weatherElement'][1]['time'][0]['parameter']['parameterName']  # 最高溫

    mint8 = i['weatherElement'][2]['time'][0]['parameter']['parameterName']  # 最低溫

    ci8 = i['weatherElement'][3]['time'][0]['parameter']['parameterName']    # 舒適度

    pop8 = i['weatherElement'][4]['time'][0]['parameter']['parameterName']   # 降雨機率

    print(f'{j} {city}未來 8 小時{wx8},最高溫 {maxt8} 度,最低溫 {mint8} 度,降雨機率 {pop8} %')

    publish=(f'{j} {city}未來 8 小時{wx8},最高溫 {maxt8} 度,最低溫 {mint8} 度,降雨機率 {pop8} %')

    j=j+1


    print("Subscribing to topic","alex9ufo/weather")

    client.subscribe("alex9ufo/weather")

    

    client.publish("alex9ufo/weather",publish)

    time.sleep(10) # wait

    client.loop_stop() #stop the loop

>>> %Run -c $EDITOR_CONTENT

creating new instance

connecting to broker

1 臺北市未來 8 小時陰時多雲短暫雨,最高溫 20 度,最低溫 18 度,降雨機率 70 %

Subscribing to topic alex9ufo/weather

message received  1 臺北市未來 8 小時陰時多雲短暫雨,最高溫 20 度,最低溫 18 度,降雨機率 70 %

message topic= alex9ufo/weather

message qos= 0

message retain flag= 0

2 新北市未來 8 小時多雲時陰短暫雨,最高溫 21 度,最低溫 18 度,降雨機率 60 %

Subscribing to topic alex9ufo/weather

3 桃園市未來 8 小時多雲時陰短暫雨,最高溫 20 度,最低溫 18 度,降雨機率 50 %

Subscribing to topic alex9ufo/weather

4 臺中市未來 8 小時多雲短暫雨,最高溫 20 度,最低溫 18 度,降雨機率 30 %

Subscribing to topic alex9ufo/weather

5 臺南市未來 8 小時多雲時晴,最高溫 20 度,最低溫 18 度,降雨機率 20 %

Subscribing to topic alex9ufo/weather

6 高雄市未來 8 小時多雲時晴,最高溫 23 度,最低溫 19 度,降雨機率 20 %

Subscribing to topic alex9ufo/weather

7 基隆市未來 8 小時陰時多雲短暫雨,最高溫 20 度,最低溫 18 度,降雨機率 80 %

Subscribing to topic alex9ufo/weather

8 新竹縣未來 8 小時多雲短暫雨,最高溫 19 度,最低溫 17 度,降雨機率 30 %

Subscribing to topic alex9ufo/weather

9 新竹市未來 8 小時多雲短暫雨,最高溫 18 度,最低溫 17 度,降雨機率 30 %

Subscribing to topic alex9ufo/weather

10 苗栗縣未來 8 小時多雲短暫雨,最高溫 19 度,最低溫 18 度,降雨機率 30 %

Subscribing to topic alex9ufo/weather

11 彰化縣未來 8 小時多雲短暫雨,最高溫 19 度,最低溫 18 度,降雨機率 30 %

Subscribing to topic alex9ufo/weather

12 南投縣未來 8 小時多雲,最高溫 21 度,最低溫 17 度,降雨機率 20 %

Subscribing to topic alex9ufo/weather

13 雲林縣未來 8 小時多雲,最高溫 20 度,最低溫 17 度,降雨機率 20 %

Subscribing to topic alex9ufo/weather

14 嘉義縣未來 8 小時多雲,最高溫 20 度,最低溫 18 度,降雨機率 20 %

Subscribing to topic alex9ufo/weather

15 嘉義市未來 8 小時多雲,最高溫 21 度,最低溫 17 度,降雨機率 20 %

Subscribing to topic alex9ufo/weather

16 屏東縣未來 8 小時晴時多雲,最高溫 24 度,最低溫 19 度,降雨機率 20 %

Subscribing to topic alex9ufo/weather

17 宜蘭縣未來 8 小時陰短暫雨,最高溫 20 度,最低溫 17 度,降雨機率 80 %

Subscribing to topic alex9ufo/weather

18 花蓮縣未來 8 小時陰短暫雨,最高溫 20 度,最低溫 18 度,降雨機率 80 %

Subscribing to topic alex9ufo/weather

19 臺東縣未來 8 小時陰時多雲短暫雨,最高溫 21 度,最低溫 19 度,降雨機率 60 %

Subscribing to topic alex9ufo/weather

20 澎湖縣未來 8 小時多雲時陰短暫雨,最高溫 18 度,最低溫 17 度,降雨機率 30 %

Subscribing to topic alex9ufo/weather

21 金門縣未來 8 小時陰時多雲短暫雨,最高溫 17 度,最低溫 16 度,降雨機率 30 %

Subscribing to topic alex9ufo/weather

22 連江縣未來 8 小時陰短暫雨,最高溫 14 度,最低溫 13 度,降雨機率 30 %

Subscribing to topic alex9ufo/weather

>>> 



[{"id":"f1240a9f515684cc","type":"inject","z":"29a9d63b197c467b","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":100,"wires":[["aef5d1c2db77479d"]]},{"id":"aef5d1c2db77479d","type":"http request","z":"29a9d63b197c467b","name":"temp request","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/O-A0001-001?Authorization=CWB-40C25FFF-1224-4250-B9D9-3735AAE17DBF&downloadType=WEB&format=JSON","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":330,"y":100,"wires":[["90a8c0e89dfc30e3"]]},{"id":"90a8c0e89dfc30e3","type":"json","z":"29a9d63b197c467b","name":"","property":"payload","action":"","pretty":false,"x":470,"y":100,"wires":[["07a67f1be408f083"]]},{"id":"07a67f1be408f083","type":"debug","z":"29a9d63b197c467b","name":"debug 48","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":660,"y":100,"wires":[]},{"id":"58ba84310f8e0524","type":"mqtt in","z":"29a9d63b197c467b","name":"","topic":"alex9ufo/weather","qos":"2","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":180,"y":180,"wires":[["6c6271690eaaf77a","fb24e42ed91f6523"]]},{"id":"6c6271690eaaf77a","type":"debug","z":"29a9d63b197c467b","name":"debug 50","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":340,"y":180,"wires":[]},{"id":"fb24e42ed91f6523","type":"function","z":"29a9d63b197c467b","name":"Format timestamp","func":"var date = new Date();\nvar h = date.getHours();\nvar m = date.getMinutes();\nvar s = date.getSeconds();\nif(h<10){\n    h = '0'+h;\n}\nif(m<10){\n    m = '0' + m;\n}\nif(s<10){\n    s = '0' + s;\n}\nmsg.payload = msg.payload + ' --> Time:(' + h + ':' + m + ':' + s + ')' ;\n\nreturn msg;","outputs":1,"noerr":0,"x":150,"y":280,"wires":[["08047167226b2747"]]},{"id":"08047167226b2747","type":"function","z":"29a9d63b197c467b","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":330,"y":280,"wires":[["1f4d2676f1654319"]]},{"id":"1f4d2676f1654319","type":"http request","z":"29a9d63b197c467b","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":500,"y":280,"wires":[["eeba3672b9db5840"]]},{"id":"eeba3672b9db5840","type":"debug","z":"29a9d63b197c467b","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":650,"y":280,"wires":[]},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]





爬取現在天氣---加入搜尋與篩選的功能

 爬取現在天氣---加入搜尋與篩選的功能

     源自於 https://steam.oxxostudio.tw/category/python/spider/current-weather.html

import requests

#url = '你的氣象觀測資料 JSON 網址'

url = 'https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/O-A0001-001?Authorization=CWB-40C25FFF-1224-4250-B9D9-3735AAE17DBF&downloadType=WEB&format=JSON'  

data = requests.get(url)

data_json = data.json()

location = data_json['cwbopendata']['location']

weather = {}   # 新增一個 weather 字典

for i in location:

    name = i['locationName']

    city = i['parameter'][0]['parameterValue']

    area = i['parameter'][2]['parameterValue']

    temp = i['weatherElement'][3]['elementValue']['value']

    humd = round(float(i['weatherElement'][4]['elementValue']['value'] )*100 ,1)

    r24 = i['weatherElement'][6]  ['elementValue']['value']

    msg = f'{temp} 度,相對濕度 {humd}%,累積雨量 {r24}mm'  # 組合成天氣描述

    try:

        weather[city][name]=msg   # 記錄地區和描述

    except:

        weather[city] = {}        # 如果每個縣市不是字典,建立第二層字典

        weather[city][name]=msg   # 記錄地區和描述


show = ''

for i in weather:

    show = show + i + ','                       # 列出可輸入的縣市名稱

show = show.strip(',')                          # 移除結尾逗號

a = input(f'請輸入下方其中一個縣市\n( {show} )\n')  # 讓使用者輸入縣市名稱


show = ''

for i in weather[a]:

    show = show + i + ','                       # 列出可輸入的地點名稱

show = show.strip(',')                          # 移除結尾逗號

b = input(f'請輸入{a}的其中一個地點\n( {show} )\n') # 讓使用者輸入觀測地點名稱

print(f'{a}{b},{weather[a][b]}。')              # 顯示結果


>>> %Run -c $EDITOR_CONTENT
請輸入下方其中一個縣市
( 屏東縣,臺南市,高雄市,臺北市,宜蘭縣,新北市,基隆市,桃園市,新竹市,新竹縣,苗栗縣,臺中市,彰化縣,雲林縣,嘉義縣,臺東縣,連江縣,澎湖縣,金門縣,花蓮縣,南投縣,嘉義市 )
屏東縣
請輸入屏東縣的其中一個地點
( 鼻頭,興海,後壁湖,山海,竹坑,加祿堂,下寮,塭仔,林邊,車城,大漢山,枋山,枋寮,楓港,檳榔,牡丹,佳樂水,墾丁,旭海,貓鼻頭,墾雷,四林格山,大坪頂,龍磐,獅子,牡丹池山,高士,白鷺,內獅,丹路,九棚,滿州,保力,南仁湖,舊泰武,里港,東港,竹田,阿禮,瑪家,尾寮山,春日,來義,琉球嶼,屏東,鹽埔,三地門,潮州,長治,麟洛,萬丹,新埤,南州,佳冬,九如,新園,崁頂 )
崁頂
屏東縣崁頂,26.0 度,相對濕度 55.0%,累積雨量 -99mm。
>>> 

Python 爬取氣象觀測資料------取出天氣現象、最高溫、最低溫、降雨機率資訊

 Python 爬取氣象觀測資料------

取出天氣現象、最高溫、最低溫、降雨機率資訊

import requests

#取出天氣現象、最高溫、最低溫、降雨機率資訊

#url = '你的氣象觀測資料 JSON 網址'

url = 'https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/O-A0001-001?Authorization=CWB-40C25FFF-1224-4250-B9D9-3735AAE17DBF&downloadType=WEB&format=JSON'

data = requests.get(url)

data_json = data.json()

location = data_json['cwbopendata']['location']

j=1

for i in location:

  name = i['locationName']                    # 測站地點

  city = i['parameter'][0]['parameterValue']  # 城市

  area = i['parameter'][2]['parameterValue']  # 行政區

  temp = i['weatherElement'][3]['elementValue']['value']                        # 氣溫

  humd = round(float(i['weatherElement'][4]['elementValue']['value'] )*100 ,1)  # 相對濕度

  r24 = i['weatherElement'][6]  ['elementValue']['value']                       # 累積雨量


  print(j,city, area, name, f'{temp} 度', f'相對濕度 {humd}%',f'累積雨量 {r24}mm')

  j=j+1


>>> %Run -c $EDITOR_CONTENT
1 臺北市 士林區 科教館 20.7 度 相對濕度 79.0% 累積雨量 0.0mm
2 新北市 貢寮區 澳底 20.7 度 相對濕度 86.0% 累積雨量 0.0mm
3 基隆市 安樂區 大武崙 20.4 度 相對濕度 79.0% 累積雨量 0.0mm
4 新北市 萬里區 野柳 19.8 度 相對濕度 83.0% 累積雨量 0.0mm
5 新北市 淡水區 淡水觀海 19.3 度 相對濕度 89.0% 累積雨量 0.0mm
6 新北市 石門區 石門 19.7 度 相對濕度 81.0% 累積雨量 0.0mm
7 新北市 瑞芳區 水湳洞 19.4 度 相對濕度 86.0% 累積雨量 0.0mm
8 新北市 淡水區 六塊厝 19.2 度 相對濕度 92.0% 累積雨量 0.0mm
9 新北市 三芝區 田寮 19.2 度 相對濕度 92.0% 累積雨量 0.0mm
10 新北市 板橋區 板橋 21.1 度 相對濕度 76.0% 累積雨量 0.0mm
11 臺北市 松山區 松山 21.3 度 相對濕度 69.0% 累積雨量 0.0mm
12 基隆市 中正區 基隆嶼 17.6 度 相對濕度 97.0% 累積雨量 0.0mm
13 新北市 石門區 白沙灣 19.1 度 相對濕度 89.0% 累積雨量 0.0mm
14 新北市 貢寮區 三貂角 21.6 度 相對濕度 87.0% 累積雨量 0.0mm
15 新北市 烏來區 福山植物園 16.8 度 相對濕度 100.0% 累積雨量 0.5mm
16 新北市 烏來區 福山 18.5 度 相對濕度 93.0% 累積雨量 0.0mm
17 新北市 坪林區 坪林 19.2 度 相對濕度 87.0% 累積雨量 0.0mm
18 新北市 坪林區 四堵 19.2 度 相對濕度 90.0% 累積雨量 -99mm
19 新北市 雙溪區 泰平 18.3 度 相對濕度 94.0% 累積雨量 -99mm
20 新北市 汐止區 五指山 18.5 度 相對濕度 97.0% 累積雨量 -99mm
21 新北市 汐止區 汐止 -99 度 相對濕度 53.0% 累積雨量 -99mm
22 新北市 三峽區 三峽 20.6 度 相對濕度 76.0% 累積雨量 -99mm
23 臺北市 信義區 信義 21.0 度 相對濕度 71.0% 累積雨量 0.0mm
24 臺北市 文山區 文山 21.5 度 相對濕度 74.0% 累積雨量 0.0mm
25 新北市 新莊區 新莊 20.7 度 相對濕度 80.0% 累積雨量 0.5mm
26 新北市 樹林區 山佳 21.6 度 相對濕度 76.0% 累積雨量 -99mm
27 新北市 石門區 富貴角 18.5 度 相對濕度 81.0% 累積雨量 0.0mm
28 新北市 烏來區 桶後 17.5 度 相對濕度 99.0% 累積雨量 -99mm
29 新北市 瑞芳區 瑞芳 18.1 度 相對濕度 99.0% 累積雨量 1.5mm
30 新北市 貢寮區 福隆 20.4 度 相對濕度 89.0% 累積雨量 -99mm
31 新北市 雙溪區 雙溪 21.2 度 相對濕度 81.0% 累積雨量 -99mm
32 新北市 瑞芳區 鼻頭角 18.7 度 相對濕度 92.0% 累積雨量 0.0mm
33 新北市 萬里區 大坪 18.3 度 相對濕度 86.0% 累積雨量 -99mm
34 新北市 金山區 三和 18.9 度 相對濕度 80.0% 累積雨量 -99mm
35 新北市 金山區 金山 20.4 度 相對濕度 80.0% 累積雨量 -99mm
36 新北市 平溪區 火燒寮 18.8 度 相對濕度 100.0% 累積雨量 -99mm
37 臺北市 內湖區 內湖 22.1 度 相對濕度 78.0% 累積雨量 0.0mm
38 新北市 中和區 中和 22.0 度 相對濕度 78.0% 累積雨量 0.0mm
39 臺北市 士林區 天母 21.4 度 相對濕度 75.0% 累積雨量 0.0mm
40 臺北市 士林區 社子 20.6 度 相對濕度 87.0% 累積雨量 0.0mm
41 臺北市 北投區 大屯山 -99 度 相對濕度 94.0% 累積雨量 0.0mm
42 新北市 三芝區 三芝 19.7 度 相對濕度 88.0% 累積雨量 0.0mm
43 新北市 八里區 八里 19.9 度 相對濕度 90.0% 累積雨量 -99mm
44 新北市 蘆洲區 蘆洲 21.1 度 相對濕度 82.0% 累積雨量 -99mm
45 新北市 土城區 土城 22.4 度 相對濕度 76.0% 累積雨量 0.0mm
46 新北市 鶯歌區 鶯歌 19.9 度 相對濕度 87.0% 累積雨量 0.0mm
47 新北市 永和區 永和 21.4 度 相對濕度 -9900.0% 累積雨量 0.0mm
48 新北市 瑞芳區 五分山 15.8 度 相對濕度 99.0% 累積雨量 1.5mm
49 臺北市 士林區 平等 20.1 度 相對濕度 96.0% 累積雨量 0.0mm
50 新北市 林口區 林口 17.7 度 相對濕度 91.0% 累積雨量 0.0mm
51 新北市 深坑區 深坑 21.0 度 相對濕度 77.0% 累積雨量 -99mm
52 基隆市 七堵區 七堵 19.9 度 相對濕度 -9900.0% 累積雨量 -99mm
53 新北市 五股區 五股 19.6 度 相對濕度 81.0% 累積雨量 0.0mm
54 新北市 新店區 屈尺 21.5 度 相對濕度 79.0% 累積雨量 0.0mm
55 新北市 三重區 三重 21.7 度 相對濕度 75.0% 累積雨量 0.0mm
56 臺北市 北投區 石牌 21.1 度 相對濕度 88.0% 累積雨量 0.0mm
>>> 



[{"id":"f1240a9f515684cc","type":"inject","z":"29a9d63b197c467b","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"900","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":100,"wires":[["aef5d1c2db77479d"]]},{"id":"aef5d1c2db77479d","type":"http request","z":"29a9d63b197c467b","name":"temp request","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/O-A0001-001?Authorization=CWB-40C25FFF-1224-4250-B9D9-3735AAE17DBF&downloadType=WEB&format=JSON","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":330,"y":100,"wires":[["90a8c0e89dfc30e3"]]},{"id":"90a8c0e89dfc30e3","type":"json","z":"29a9d63b197c467b","name":"","property":"payload","action":"","pretty":false,"x":490,"y":100,"wires":[["07a67f1be408f083"]]},{"id":"07a67f1be408f083","type":"debug","z":"29a9d63b197c467b","name":"debug 48","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":660,"y":100,"wires":[]}]



{
    "lat": "25.098133",
    "lon": "121.508275",
    "lat_wgs84": "25.0963555555556",
    "lon_wgs84": "121.516505555556",`
    "locationName": "科教館",
    "stationId": "C0A770",
    "time": {
     "obsTime": "2023-01-09T15:00:00+08:00"
    },
    "weatherElement": [
     {
      "elementName": "ELEV",
      "elementValue": {
       "value": "60.0"
      }
     },
     {
      "elementName": "WDIR",
      "elementValue": {
       "value": "313"
      }
     },
     {
      "elementName": "WDSD",
      "elementValue": {
       "value": "4.6"
      }
     },
     {
      "elementName": "TEMP",
      "elementValue": {
       "value": "20.8"
      }
     },
     {
      "elementName": "HUMD",
      "elementValue": {
       "value": "0.78"
      }
     },
     {
      "elementName": "PRES",
      "elementValue": {
       "value": "1013.1"
      }
     },
     {
      "elementName": "H_24R",
      "elementValue": {
       "value": "0.0"
      }
     },
     {
      "elementName": "H_FX",
      "elementValue": {
       "value": "-99"
      }
     },
     {
      "elementName": "H_XD",
      "elementValue": {
       "value": "-99"
      }
     },
     {
      "elementName": "H_FXT",
      "elementValue": {
       "value": "-99"
      }
     },
     {
      "elementName": "D_TX",
      "elementValue": {
       "value": "25.00"
      }
     },
     {
      "elementName": "D_TXT",
      "elementValue": {
       "value": "2023-01-09T13:40:00+08:00"
      }
     },
     {
      "elementName": "D_TN",
      "elementValue": {
       "value": "18.40"
      }
     },
     {
      "elementName": "D_TNT",
      "elementValue": {
       "value": "2023-01-09T06:20:00+08:00"
      }
     },
     {
      "elementName": "Weather",
      "elementValue": {
       "value": "陰"
      }
     }
    ],
    "parameter": [
     {
      "parameterName": "CITY",
      "parameterValue": "臺北市"
     },
     {
      "parameterName": "CITY_SN",
      "parameterValue": "01"
     },
     {
      "parameterName": "TOWN",
      "parameterValue": "士林區"
     },
     {
      "parameterName": "TOWN_SN",
      "parameterValue": "007"
     }
    ]
   },

Python 爬取氣象觀測資料

 Python 爬取氣象觀測資料

import requests

# url = '你的氣象觀測資料 JSON 網址'

url = 'https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/O-A0001-001?Authorization=CWB-40C25FFF-1224-4250-B9D9-3735AAE17DBF&downloadType=WEB&format=JSON'

data = requests.get(url)

data_json = data.json()

location = data_json['cwbopendata']['location']

j=1

for i in location:

    name = i['locationName']                    # 測站地點

    city = i['parameter'][0]['parameterValue']  # 城市

    area = i['parameter'][2]['parameterValue']  # 行政區

    print(city, area, name)

    j=j+1


>>> %Run -c $EDITOR_CONTENT
1 屏東縣 滿洲鄉 鼻頭
2 屏東縣 滿洲鄉 興海
3 屏東縣 恆春鎮 後壁湖
4 屏東縣 恆春鎮 山海
5 屏東縣 車城鄉 竹坑
6 屏東縣 枋山鄉 加祿堂
7 臺南市 將軍區 鯤鯓國小
8 屏東縣 枋寮鄉 下寮
9 屏東縣 佳冬鄉 塭仔
10 高雄市 林園區 汕尾
11 高雄市 小港區 鳳鼻頭
12 高雄市 梓官區 蚵仔寮
13 高雄市 彌陀區 南寮
14 高雄市 彌陀區 文安
15 高雄市 茄萣區 興達
16 臺南市 安南區 城西
17 臺南市 安南區 四草
18 臺南市 北門區 蘆竹溝
19 臺南市 北門區 蚵寮
20 高雄市 前鎮區 前鎮
21 臺北市 士林區 科教館
22 宜蘭縣 頭城鎮 大溪漁港
23 宜蘭縣 頭城鎮 石城
24 新北市 貢寮區 澳底
25 基隆市 安樂區 大武崙
26 新北市 萬里區 野柳
27 新北市 淡水區 淡水觀海
28 桃園市 大園區 竹圍
29 桃園市 新屋區 中大臨海站
30 新北市 石門區 石門
31 桃園市 觀音區 觀音工業區
32 新竹市 北區 海天一線
33 新竹市 香山區 香山濕地
34 新北市 瑞芳區 水湳洞
35 基隆市 中正區 八斗子
36 新竹縣 新豐鄉 外湖
37 苗栗縣 後龍鎮 海埔
38 苗栗縣 通霄鎮 通霄漁港
39 臺中市 大甲區 松柏
40 臺中市 大安區 溫寮
41 苗栗縣 竹南鎮 龍鳳
42 宜蘭縣 礁溪鄉 淡江大學蘭陽校園
43 屏東縣 林邊鄉 林邊
44 新北市 淡水區 六塊厝
45 新北市 三芝區 田寮
46 桃園市 觀音區 新興坑尾
47 宜蘭縣 壯圍鄉 壯圍
48 宜蘭縣 頭城鎮 北關
49 彰化縣 伸港鄉 防潮門
50 臺中市 龍井區 臺中電廠
51 彰化縣 福興鄉 福寶
52 彰化縣 大城鄉 三豐
53 雲林縣 口湖鄉 箔子寮
54 嘉義縣 布袋鎮 好美里
55 新北市 板橋區 板橋
56 臺東縣 成功鎮 水試所成功
57 高雄市 茂林區 茂林蝶谷
58 連江縣 莒光鄉 東莒
59 澎湖縣 西嶼鄉 西嶼
60 澎湖縣 望安鄉 花嶼
61 金門縣 金沙鎮 金沙
62 金門縣 金寧鄉 金寧
63 金門縣 烏坵鄉 烏坵
64 臺北市 松山區 松山
65 苗栗縣 後龍鎮 高鐵苗栗
66 雲林縣 虎尾鎮 高鐵雲林
67 桃園市 龜山區 國一五楊N44K
68 基隆市 中正區 基隆嶼
69 臺東縣 蘭嶼鄉 蘭嶼高中
70 臺東縣 蘭嶼鄉 蘭嶼燈塔
71 新北市 石門區 白沙灣
72 高雄市 甲仙區 小林
73 桃園市 大溪區 大溪永福
74 宜蘭縣 大同鄉 玉蘭
75 宜蘭縣 五結鄉 五結
76 宜蘭縣 大同鄉 太平山
77 宜蘭縣 大同鄉 南山
78 宜蘭縣 員山鄉 雙連埤
79 宜蘭縣 頭城鎮 頭城
80 宜蘭縣 礁溪鄉 大礁溪
81 宜蘭縣 三星鄉 三星
82 宜蘭縣 員山鄉 內城
83 宜蘭縣 冬山鄉 冬山
84 宜蘭縣 礁溪鄉 礁溪
85 宜蘭縣 頭城鎮 龜山島
86 新北市 貢寮區 三貂角
87 宜蘭縣 羅東鎮 羅東
88 宜蘭縣 頭城鎮 鶯子嶺
89 宜蘭縣 壯圍鄉 大福
90 宜蘭縣 頭城鎮 坪林石牌
91 花蓮縣 秀林鄉 天祥
92 花蓮縣 壽豐鄉 東華
93 花蓮縣 壽豐鄉 鯉魚潭
94 花蓮縣 秀林鄉 水源
95 花蓮縣 鳳林鎮 鳳林山
96 花蓮縣 光復鄉 光復
97 花蓮縣 萬榮鄉 西林
98 花蓮縣 壽豐鄉 月眉山
99 花蓮縣 壽豐鄉 大坑
100 花蓮縣 豐濱鄉 加路蘭山
101 花蓮縣 壽豐鄉 水璉
102 花蓮縣 豐濱鄉 豐濱
103 花蓮縣 富里鄉 明里
104 花蓮縣 玉里鎮 玉里
105 花蓮縣 瑞穗鄉 舞鶴
106 花蓮縣 卓溪鄉 佳心
107 花蓮縣 光復鄉 富源
108 花蓮縣 吉安鄉 吉安光華
109 花蓮縣 鳳林鎮 鳳林
110 花蓮縣 卓溪鄉 卓溪
111 花蓮縣 新城鄉 新城
112 花蓮縣 秀林鄉 富世
113 花蓮縣 鳳林鎮 萬榮
114 花蓮縣 瑞穗鄉 瑞穗
115 花蓮縣 卓溪鄉 瑞穗林道
116 花蓮縣 壽豐鄉 蕃薯寮
117 花蓮縣 玉里鎮 德武
118 花蓮縣 玉里鎮 赤柯山
119 花蓮縣 富里鄉 東里
120 花蓮縣 秀林鄉 清水斷崖
121 花蓮縣 卓溪鄉 清水林道
122 花蓮縣 玉里鎮 安通山
123 花蓮縣 豐濱鄉 靜浦
124 臺東縣 長濱鄉 長濱
125 臺東縣 東河鄉 東河
126 臺東縣 綠島鄉 綠島
127 臺東縣 海端鄉 下馬
128 臺東縣 海端鄉 向陽
129 臺東縣 海端鄉 紅石
130 臺東縣 池上鄉 池上
131 臺東縣 鹿野鄉 鹿野
132 臺東縣 關山鎮 關山
133 臺東縣 達仁鄉 土阪
134 臺東縣 太麻里鄉 大溪山
135 臺東縣 達仁鄉 南田
136 臺東縣 太麻里鄉 金崙
137 臺東縣 太麻里鄉 太麻里
138 臺東縣 卑南鄉 知本
139 花蓮縣 富里鄉 富里
140 桃園市 中壢區 中壢
141 臺南市 柳營區 柳營
142 嘉義縣 阿里山鄉 新美
143 彰化縣 永靖鄉 永靖
144 彰化縣 竹塘鄉 竹塘
145 雲林縣 東勢鄉 雲林東勢
146 屏東縣 車城鄉 車城
147 屏東縣 春日鄉 大漢山
148 屏東縣 枋山鄉 枋山
149 屏東縣 枋寮鄉 枋寮
150 屏東縣 枋山鄉 楓港
151 屏東縣 滿州鄉 檳榔
152 屏東縣 牡丹鄉 牡丹
153 屏東縣 滿州鄉 佳樂水
154 屏東縣 恆春鎮 墾丁
155 屏東縣 牡丹鄉 旭海
156 屏東縣 恆春鎮 貓鼻頭
157 屏東縣 恆春鎮 墾雷
158 屏東縣 牡丹鄉 四林格山
159 屏東縣 恆春鎮 大坪頂
160 屏東縣 恆春鎮 龍磐
161 屏東縣 獅子鄉 獅子
162 宜蘭縣 南澳鄉 東澳
163 宜蘭縣 南澳鄉 南澳
164 花蓮縣 秀林鄉 和中
165 宜蘭縣 大同鄉 翠峰湖
166 花蓮縣 秀林鄉 和平林道
167 花蓮縣 秀林鄉 和平
168 宜蘭縣 南澳鄉 樟樹山
169 宜蘭縣 頭城鎮 桃源谷
170 宜蘭縣 南澳鄉 西帽山
171 宜蘭縣 南澳鄉 西德山
172 新北市 烏來區 福山植物園
173 宜蘭縣 大同鄉 鴛鴦湖
174 宜蘭縣 大同鄉 白嶺
175 宜蘭縣 大同鄉 土場
176 宜蘭縣 員山鄉 員山
177 桃園市 蘆竹區 蘆竹
178 新竹縣 橫山鄉 橫山
179 新竹縣 新豐鄉 新豐
180 桃園市 觀音區 觀音
181 新竹縣 五峰鄉 雪霸
182 新竹縣 竹東鎮 竹東
183 桃園市 平鎮區 平鎮
184 桃園市 大溪區 大溪
185 苗栗縣 頭份市 頭份
186 新竹縣 寶山鄉 寶山
187 苗栗縣 獅潭鄉 獅潭
188 桃園市 楊梅區 楊梅
189 新竹縣 湖口鄉 湖口
190 桃園市 龍潭區 龍潭
191 新竹市 東區 新竹市東區
192 苗栗縣 三灣鄉 大河
193 臺中市 和平區 桃山A
194 臺中市 和平區 雪山東峰A
195 桃園市 龜山區 龜山
196 臺中市 和平區 審馬陣A
197 臺中市 和平區 南湖圈谷A
198 苗栗縣 苗栗市 苗栗
199 苗栗縣 銅鑼鄉 銅鑼
200 苗栗縣 西湖鄉 西湖
201 臺中市 大安區 大安
202 臺中市 后里區 后里
203 臺中市 豐原區 豐原
204 臺中市 潭子區 潭子
205 臺中市 清水區 清水
206 臺中市 外埔區 外埔
207 臺中市 龍井區 龍井
208 彰化縣 伸港鄉 伸港
209 苗栗縣 苑裡鎮 苑裡
210 苗栗縣 三義鄉 三義
211 臺中市 石岡區 石岡
212 臺中市 和平區 中坑
213 臺中市 和平區 烏石坑
214 南投縣 魚池鄉 魚池
215 南投縣 國姓鄉 國姓
216 南投縣 仁愛鄉 仁愛
217 南投縣 水里鄉 水里
218 南投縣 集集鎮 集集
219 南投縣 名間鄉 名間
220 南投縣 仁愛鄉 萬大林道
221 南投縣 仁愛鄉 梅峰
222 南投縣 信義鄉 玉山風口
223 南投縣 仁愛鄉 小奇萊
224 南投縣 仁愛鄉 奇萊稜線A
225 臺中市 太平區 中竹林
226 臺中市 大里區 大里
227 臺中市 烏日區 烏日
228 臺中市 西屯區 西屯
229 臺中市 南屯區 南屯
230 彰化縣 福興鄉 福興
231 彰化縣 秀水鄉 秀水
232 彰化縣 埔鹽鄉 埔鹽
233 彰化縣 埔心鄉 埔心
234 彰化縣 埤頭鄉 埤頭
235 彰化縣 社頭鄉 社頭
236 彰化縣 芳苑鄉 芳苑
237 苗栗縣 造橋鄉 造橋
238 新竹縣 尖石鄉 梅花
239 新北市 烏來區 福山
240 新北市 坪林區 坪林
241 新北市 坪林區 四堵
242 新北市 雙溪區 泰平
243 新竹縣 峨眉鄉 峨眉
244 苗栗縣 竹南鎮 竹南
245 苗栗縣 南庄鄉 南庄
246 新北市 汐止區 五指山
247 新北市 汐止區 汐止
248 新北市 三峽區 三峽
249 臺北市 信義區 信義
250 臺北市 文山區 文山
251 新北市 新莊區 新莊
252 新北市 樹林區 山佳
253 新北市 石門區 富貴角
254 新北市 烏來區 桶後
255 新北市 瑞芳區 瑞芳
256 新北市 貢寮區 福隆
257 新北市 雙溪區 雙溪
258 宜蘭縣 大同鄉 多加屯
259 新北市 瑞芳區 鼻頭角
260 新北市 萬里區 大坪
261 新北市 金山區 三和
262 新北市 金山區 金山
263 新北市 平溪區 火燒寮
264 桃園市 復興區 復興
265 桃園市 桃園區 桃園
266 桃園市 八德區 八德
267 新竹縣 關西鎮 關西
268 臺北市 內湖區 內湖
269 新北市 中和區 中和
270 臺北市 士林區 天母
271 臺北市 士林區 社子
272 臺北市 北投區 大屯山
273 新北市 三芝區 三芝
274 新北市 八里區 八里
275 新北市 蘆洲區 蘆洲
276 新北市 土城區 土城
277 新北市 鶯歌區 鶯歌
278 新北市 永和區 永和
279 新北市 瑞芳區 五分山
280 臺北市 士林區 平等
281 新北市 林口區 林口
282 新北市 深坑區 深坑
283 基隆市 七堵區 七堵
284 新北市 五股區 五股
285 新北市 新店區 屈尺
286 新北市 三重區 三重
287 臺北市 北投區 石牌
288 臺東縣 金峰鄉 金峰嘉蘭
289 臺東縣 延平鄉 延平
290 臺東縣 長濱鄉 石寧山
291 臺東縣 東河鄉 七塊厝
292 臺東縣 臺東市 知本(水試所)
293 臺東縣 太麻里鄉 香蘭
294 臺東縣 大武鄉 加津林
295 臺東縣 達仁鄉 勝林山
296 臺東縣 大武鄉 山豬窟
297 臺東縣 太麻里鄉 歷坵
298 臺東縣 卑南鄉 檳榔四格山
299 臺東縣 太麻里鄉 金崙山
300 臺東縣 成功鎮 都歷
301 臺東縣 鹿野鄉 瑞和
302 臺東縣 達仁鄉 達仁林場
303 屏東縣 牡丹鄉 牡丹池山
304 屏東縣 牡丹鄉 高士
305 屏東縣 來義鄉 白鷺
306 屏東縣 獅子鄉 內獅
307 屏東縣 獅子鄉 丹路
308 屏東縣 牡丹鄉 九棚
309 屏東縣 滿州鄉 滿州
310 屏東縣 車城鄉 保力
311 屏東縣 滿州鄉 南仁湖
312 南投縣 仁愛鄉 合歡山
313 南投縣 中寮鄉 中寮
314 臺中市 北屯區 大坑
315 彰化縣 溪湖鎮 溪湖
316 臺中市 大肚區 大肚
317 南投縣 鹿谷鄉 鳳凰
318 彰化縣 鹿港鎮 鹿港
319 彰化縣 員林市 員林
320 南投縣 草屯鎮 草屯
321 彰化縣 芬園鄉 芬園
322 新竹縣 新埔鎮 打鐵坑
323 臺中市 東勢區 東勢
324 臺中市 和平區 梨山
325 南投縣 竹山鎮 竹山
326 雲林縣 古坑鄉 草嶺
327 苗栗縣 泰安鄉 馬都安
328 苗栗縣 大湖鄉 大湖
329 苗栗縣 後龍鎮 後龍
330 苗栗縣 頭屋鄉 明德
331 臺中市 大甲區 大甲
332 苗栗縣 通霄鎮 通霄
333 臺中市 神岡區 神岡
334 苗栗縣 卓蘭鎮 卓蘭
335 臺中市 新社區 新社
336 南投縣 埔里鎮 埔里
337 南投縣 信義鄉 信義
338 南投縣 仁愛鄉 昆陽
339 南投縣 仁愛鄉 廬山
340 花蓮縣 秀林鄉 大禹嶺
341 南投縣 信義鄉 神木村
342 臺中市 大雅區 大雅(中科園區)
343 南投縣 南投市 南投
344 彰化縣 花壇鄉 花壇
345 彰化縣 線西鄉 線西
346 雲林縣 崙背鄉 崙背
347 嘉義縣 竹崎鄉 奮起湖
348 雲林縣 虎尾鎮 虎尾
349 雲林縣 四湖鄉 四湖
350 雲林縣 口湖鄉 宜梧
351 臺南市 下營區 下營
352 嘉義縣 義竹鄉 東後寮
353 臺南市 東山區 東河
354 臺南市 佳里區 佳里
355 彰化縣 二林鎮 二林
356 臺南市 白河區 白河
357 嘉義縣 番路鄉 番路
358 臺南市 新營區 新營
359 臺南市 將軍區 將軍
360 雲林縣 褒忠鄉 褒忠
361 嘉義縣 溪口鄉 溪口
362 雲林縣 二崙鄉 二崙
363 嘉義縣 竹崎鄉 竹崎
364 嘉義縣 中埔鄉 中埔
365 臺南市 鹽水區 鹽水
366 臺南市 學甲區 學甲
367 臺南市 後壁區 後壁
368 雲林縣 西螺鎮 西螺
369 雲林縣 土庫鎮 土庫
370 嘉義縣 大林鎮 大林
371 嘉義縣 東石鄉 東石
372 嘉義縣 水上鄉 水上
373 嘉義市 東區 嘉義市東區
374 臺南市 白河區 關子嶺
375 臺南市 新化區 虎頭埤
376 臺南市 歸仁區 媽廟
377 臺南市 龍崎區 崎頂
378 臺南市 安南區 安南
379 臺南市 新市區 新市
380 臺南市 南化區 北寮
381 嘉義縣 大埔鄉 馬頭山
382 臺南市 善化區 善化
383 臺南市 楠西區 曾文
384 臺南市 玉井區 玉井
385 高雄市 杉林區 月眉
386 高雄市 桃源區 復興
387 高雄市 甲仙區 甲仙
388 臺南市 六甲區 王爺宮
389 臺南市 大內區 大內
390 高雄市 阿蓮區 阿蓮
391 臺南市 北區 臺南市北區
392 臺南市 南區 臺南市南區
393 臺南市 安平區 安平
394 臺南市 麻豆區 麻豆
395 臺南市 安定區 安定
396 臺南市 山上區 山上
397 臺南市 關廟區 關廟
398 臺南市 官田區 官田
399 臺南市 西港區 西港
400 臺南市 仁德區 仁德
401 臺南市 左鎮區 左鎮
402 嘉義縣 大埔鄉 表湖
403 屏東縣 泰武鄉 舊泰武
404 高雄市 茂林區 萬山
405 高雄市 六龜區 六龜
406 屏東縣 里港鄉 里港
407 高雄市 左營區 左營
408 屏東縣 東港鎮 東港
409 屏東縣 竹田鄉 竹田
410 屏東縣 霧臺鄉 阿禮
411 屏東縣 瑪家鄉 瑪家
412 高雄市 大樹區 溪埔
413 高雄市 美濃區 美濃
414 屏東縣 三地門鄉 尾寮山
415 高雄市 燕巢區 阿公店
416 高雄市 內門區 內門
417 屏東縣 春日鄉 春日
418 屏東縣 萬巒鄉 來義
419 高雄市 田寮區 古亭坑
420 屏東縣 琉球鄉 琉球嶼
421 高雄市 鳳山區 鳳山
422 屏東縣 屏東市 屏東
423 屏東縣 鹽埔鄉 鹽埔
424 高雄市 小港區 鳳森
425 屏東縣 內埔鄉 三地門
426 屏東縣 潮州鎮 潮州
427 高雄市 新興區 新興
428 高雄市 湖內區 湖內
429 高雄市 永安區 永安
430 高雄市 大社區 大社
431 高雄市 梓官區 梓官
432 高雄市 路竹區 路竹
433 高雄市 茄萣區 茄萣
434 高雄市 岡山區 岡山
435 高雄市 彌陀區 彌陀
436 高雄市 橋頭區 橋頭
437 高雄市 仁武區 仁武
438 高雄市 三民區 三民
439 高雄市 鼓山區 鼓山
440 高雄市 苓雅區 苓雅
441 高雄市 旗山區 旗山
442 屏東縣 長治鄉 長治
443 屏東縣 麟洛鄉 麟洛
444 屏東縣 萬丹鄉 萬丹
445 屏東縣 新埤鄉 新埤
446 屏東縣 南州鄉 南州
447 屏東縣 佳冬鄉 佳冬
448 屏東縣 高樹鄉 高樹
449 屏東縣 九如鄉 九如
450 高雄市 大寮區 大寮
451 屏東縣 新園鄉 新園
452 屏東縣 崁頂鄉 崁頂
453 高雄市 林園區 林園
454 彰化縣 溪州鄉 溪州
455 雲林縣 斗南鎮 斗南
456 雲林縣 斗六市 斗六
457 嘉義縣 朴子市 朴子
458 雲林縣 北港鎮 北港
459 嘉義縣 太保市 太保
460 雲林縣 林內鄉 林內
461 彰化縣 大城鄉 大城
462 嘉義縣 民雄鄉 民雄
463 雲林縣 大埤鄉 大埤
464 雲林縣 莿桐鄉 莿桐
465 雲林縣 臺西鄉 臺西
466 雲林縣 水林鄉 水林
467 雲林縣 元長鄉 元長
468 嘉義縣 布袋鎮 布袋
469 嘉義縣 鹿草鄉 鹿草
470 嘉義縣 六腳鄉 六腳
471 嘉義縣 新港鄉 新港
472 嘉義縣 梅山鄉 嘉義梅山
473 嘉義縣 阿里山鄉 里佳
474 嘉義縣 阿里山鄉 達邦
475 臺南市 白河區 鹿寮
476 嘉義縣 阿里山鄉 茶山
477 雲林縣 古坑鄉 棋山
478 雲林縣 水林鄉 蔦松
479 臺南市 北門區 北門
480 臺南市 七股區 七股
>>>

2023年1月8日 星期日

Python 爬取天氣預報

 Python 爬取天氣預報

參考來源 https://steam.oxxostudio.tw/category/python/spider/forecast.html

import requests


# url = '一般天氣預報 - 今明 36 小時天氣預報 JSON 連結'

url = "https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/F-C0032-001?Authorization=rdec-key-123-45678-011121314&format=JSON"

data = requests.get(url)   # 取得 JSON 檔案的內容為文字

data_json = data.json()    # 轉換成 JSON 格式

location = data_json['cwbopendata']['dataset']['location']

for i in location:

    city = i['locationName']    # 縣市名稱

    wx8 = i['weatherElement'][0]['time'][0]['parameter']['parameterName']    # 天氣現象

    maxt8 = i['weatherElement'][1]['time'][0]['parameter']['parameterName']  # 最高溫

    mint8 = i['weatherElement'][2]['time'][0]['parameter']['parameterName']  # 最低溫

    ci8 = i['weatherElement'][3]['time'][0]['parameter']['parameterName']    # 舒適度

    pop8 = i['weatherElement'][4]['time'][0]['parameter']['parameterName']   # 降雨機率

    print(f'{city}未來 8 小時{wx8},最高溫 {maxt8} 度,最低溫 {mint8} 度,降雨機率 {pop8} %')

    

    >>> %Run -c $EDITOR_CONTENT

臺北市未來 8 小時多雲短暫雨,最高溫 23 度,最低溫 20 度,降雨機率 30 %

新北市未來 8 小時多雲短暫雨,最高溫 24 度,最低溫 21 度,降雨機率 30 %

桃園市未來 8 小時多雲短暫雨,最高溫 23 度,最低溫 20 度,降雨機率 30 %

臺中市未來 8 小時多雲,最高溫 22 度,最低溫 20 度,降雨機率 10 %

臺南市未來 8 小時晴時多雲,最高溫 22 度,最低溫 20 度,降雨機率 10 %

高雄市未來 8 小時晴時多雲,最高溫 24 度,最低溫 23 度,降雨機率 10 %

基隆市未來 8 小時多雲短暫雨,最高溫 22 度,最低溫 20 度,降雨機率 40 %

新竹縣未來 8 小時晴時多雲,最高溫 22 度,最低溫 19 度,降雨機率 20 %

新竹市未來 8 小時晴時多雲,最高溫 20 度,最低溫 18 度,降雨機率 20 %

苗栗縣未來 8 小時多雲,最高溫 21 度,最低溫 19 度,降雨機率 20 %

彰化縣未來 8 小時多雲,最高溫 21 度,最低溫 19 度,降雨機率 10 %

南投縣未來 8 小時晴時多雲,最高溫 23 度,最低溫 21 度,降雨機率 10 %

雲林縣未來 8 小時多雲,最高溫 22 度,最低溫 20 度,降雨機率 10 %

嘉義縣未來 8 小時晴時多雲,最高溫 23 度,最低溫 20 度,降雨機率 10 %

嘉義市未來 8 小時晴時多雲,最高溫 24 度,最低溫 21 度,降雨機率 10 %

屏東縣未來 8 小時多雲,最高溫 26 度,最低溫 24 度,降雨機率 10 %

宜蘭縣未來 8 小時多雲短暫雨,最高溫 21 度,最低溫 19 度,降雨機率 60 %

花蓮縣未來 8 小時多雲短暫雨,最高溫 22 度,最低溫 20 度,降雨機率 70 %

臺東縣未來 8 小時陰短暫雨,最高溫 23 度,最低溫 21 度,降雨機率 40 %

澎湖縣未來 8 小時多雲,最高溫 19 度,最低溫 18 度,降雨機率 10 %

金門縣未來 8 小時陰短暫雨,最高溫 19 度,最低溫 17 度,降雨機率 60 %

連江縣未來 8 小時陰時多雲短暫雨,最高溫 15 度,最低溫 14 度,降雨機率 40 %

>>> 




{
     "locationName": "臺中市",
     "weatherElement": [
      {
       "elementName": "Wx",
       "time": [
        {
         "startTime": "2023-01-09T12:00:00+08:00",
         "endTime": "2023-01-09T18:00:00+08:00",
         "parameter": {
          "parameterName": "多雲",
          "parameterValue": "4"
         }
        },
        {
         "startTime": "2023-01-09T18:00:00+08:00",
         "endTime": "2023-01-10T06:00:00+08:00",
         "parameter": {
          "parameterName": "多雲短暫雨",
          "parameterValue": "8"
         }
        },
        {
         "startTime": "2023-01-10T06:00:00+08:00",
         "endTime": "2023-01-10T18:00:00+08:00",
         "parameter": {
          "parameterName": "多雲時晴",
          "parameterValue": "3"
         }
        }
       ]
      },
      {
       "elementName": "MaxT",
       "time": [
        {
         "startTime": "2023-01-09T12:00:00+08:00",
         "endTime": "2023-01-09T18:00:00+08:00",
         "parameter": {
          "parameterName": "22",
          "parameterUnit": "C"
         }
        },
        {
         "startTime": "2023-01-09T18:00:00+08:00",
         "endTime": "2023-01-10T06:00:00+08:00",
         "parameter": {
          "parameterName": "20",
          "parameterUnit": "C"
         }
        },
        {
         "startTime": "2023-01-10T06:00:00+08:00",
         "endTime": "2023-01-10T18:00:00+08:00",
         "parameter": {
          "parameterName": "23",
          "parameterUnit": "C"
         }
        }
       ]
      },
      {
       "elementName": "MinT",
       "time": [
        {
         "startTime": "2023-01-09T12:00:00+08:00",
         "endTime": "2023-01-09T18:00:00+08:00",
         "parameter": {
          "parameterName": "20",
          "parameterUnit": "C"
         }
        },
        {
         "startTime": "2023-01-09T18:00:00+08:00",
         "endTime": "2023-01-10T06:00:00+08:00",
         "parameter": {
          "parameterName": "18",
          "parameterUnit": "C"
         }
        },
        {
         "startTime": "2023-01-10T06:00:00+08:00",
         "endTime": "2023-01-10T18:00:00+08:00",
         "parameter": {
          "parameterName": "18",
          "parameterUnit": "C"
         }
        }
       ]
      },
      {
       "elementName": "CI",
       "time": [
        {
         "startTime": "2023-01-09T12:00:00+08:00",
         "endTime": "2023-01-09T18:00:00+08:00",
         "parameter": {
          "parameterName": "稍有寒意至舒適"
         }
        },
        {
         "startTime": "2023-01-09T18:00:00+08:00",
         "endTime": "2023-01-10T06:00:00+08:00",
         "parameter": {
          "parameterName": "稍有寒意"
         }
        },
        {
         "startTime": "2023-01-10T06:00:00+08:00",
         "endTime": "2023-01-10T18:00:00+08:00",
         "parameter": {
          "parameterName": "稍有寒意至舒適"
         }
        }
       ]
      },
      {
       "elementName": "PoP",
       "time": [
        {
         "startTime": "2023-01-09T12:00:00+08:00",
         "endTime": "2023-01-09T18:00:00+08:00",
         "parameter": {
          "parameterName": "10",
          "parameterUnit": "百分比"
         }
        },
        {
         "startTime": "2023-01-09T18:00:00+08:00",
         "endTime": "2023-01-10T06:00:00+08:00",
         "parameter": {
          "parameterName": "30",
          "parameterUnit": "百分比"
         }
        },
        {
         "startTime": "2023-01-10T06:00:00+08:00",
         "endTime": "2023-01-10T18:00:00+08:00",
         "parameter": {
          "parameterName": "20",
          "parameterUnit": "百分比"
         }
        }
       ]
      }
     ]
    },
    {

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...