2023年1月9日 星期一

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

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

     源自於 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。
>>> 

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...