# 10/8 Discord Bot 開發(一) :::info 時間:2023/10/08 20:30 ~ 2023/10/09 00:00 地點:線上會議(Discord) 參與:xiaojie4082、wei、StarLeisure、SmingXO ![](https://hackmd.io/_uploads/S1Q-W7gZT.png) ::: ## 本次討論事項 - 功能開發設計 - Python 爬蟲教學 - 講解選課相關指令 ## 氣象預報功能 ### 申請 API 授權碼 - [氣象資料開放平臺](https://opendata.cwa.gov.tw/) - 註冊帳號 - 取得授權碼 ![](https://hackmd.io/_uploads/B10CmQlZ6.png) ### API 網址 - [中央氣象署開放資料平臺之資料擷取API ](https://opendata.cwa.gov.tw/dist/opendata-swagger.html?urls.primaryName=openAPI#/%E9%A0%90%E5%A0%B1/get_v1_rest_datastore_F_C0032_001) - 所需資料 - 一般天氣預報-今明 36 小時天氣預報 - `https://opendata.cwa.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=授權碼&locationName=%E8%87%BA%E4%B8%AD%E5%B8%82` - 台中未來一周天氣預報 - `https://opendata.cwa.gov.tw/api/v1/rest/datastore/F-D0047-075?Authorization=授權碼&limit=5&format=JSON` - 一般天氣預報-台中市天氣小幫手 - `https://opendata.cwa.gov.tw/fileapi/v1/opendataapi/F-C0032-021?Authorization=授權碼&downloadType=WEB&format=JSON` - 天氣特報-各別縣市地區目前之天氣警特報情形 - `https://opendata.cwa.gov.tw/api/v1/rest/datastore/W-C0033-001?Authorization=授權碼&locationName=%E8%87%BA%E4%B8%AD%E5%B8%82` ## 程式碼 ### 套件安裝 - pip install requests - pip install beautifulsoup4 ### 抓取 API 資料 ```python! import requests # 設定 API 參數 api_url = "https://opendata.cwa.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=授權碼&locationName=%E8%87%BA%E4%B8%AD%E5%B8%82" # 發送請求 response = requests.get(api_url) # 解析回應 data = response.json() # 建立陣列 weather_data = [] # 遍歷資料 for location in data["records"]["location"]: # 建立一個新的物件 weather = {} weather["locationName"] = location["locationName"] # 遍歷天氣要素 for weather_element in location["weatherElement"]: # 將天氣要素存入物件 weather[weather_element["elementName"]] = weather_element["time"][0]["parameter"] # 將物件加入陣列 weather_data.append(weather) # 印出陣列 print(weather_data) ``` ```json weather = [{'locationName': '臺中市', 'Wx': {'parameterName': '多雲', 'parameterValue': '4'}, 'PoP': {'parameterName': '20', 'parameterUnit': '百分比'}, 'MinT': {'parameterName': '27', 'parameterUnit': 'C'}, 'CI': {'parameterName': '舒適至悶熱'}, 'MaxT': {'parameterName': '29', 'parameterUnit': 'C'} }] ``` ```python! #輸出'locationName'的資料 print(weather_data[0]["locationName"]) #輸出'Wx'中'parameterName'的資料 print(weather_data[0]["Wx"]["parameterName"]) #輸出'PoP'中'parameterName'的資料 print(weather_data[0]["PoP"]["parameterName"]) ``` ### icon_url ```python Wx_icon_url = { "多雲": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/67aaf9dbe30989c25cbde6c6ec099213.png", "晴時多雲": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/67aaf9dbe30989c25cbde6c6ec099213.png", "晴朗": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/575900edccbc7def167f7874c02aeb0b.png", "陰天": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/66117fab0f288a2867b340fa2fcde31b.png", "小雨": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/a55fef55bbeb0762a8dd329b4b8ad342.png", "陣雨": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/4417bf88c7bbcd8e24fb78ee6479b362.png", "雷陣雨": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/efffb1e26f6de5bf5c8adbd872a2933a.png", "小雪": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/00171e3b54b97dee8c1a2f6a62272640.png", "陣雪": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/e95fb90fc5a4aac111be78770921beb1.png", "雷陣雪": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/efffb1e26f6de5bf5c8adbd872a2933a.png", "濃霧": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/d35bb25d12281cd9ee5ce78a98cd2aa7.png", "大雷雨": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/efffb1e26f6de5bf5c8adbd872a2933a.png", "大雨": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/451d37e6cea3af4a568110863a1adcf7.png", "豪雨": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/451d37e6cea3af4a568110863a1adcf7.png", "暴風雨": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/451d37e6cea3af4a568110863a1adcf7.png", "風雪": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/e95fb90fc5a4aac111be78770921beb1.png", "冰雹": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/9189cb49e806d1ebfeed24f33367143c.png", "霾": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/73ae8300a30e895e3739cd50ade0dfe1.png", "沙塵暴": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/ad9e41c68b6a2671d2bcd843be1baa86.png", "乾燥": "https://help.apple.com/assets/64067987823C71654C27CD1A/64067990823C71654C27CD47/zh_TW/ad9e41c68b6a2671d2bcd843be1baa86.png" } ``` ### 嵌入式訊息 ```python! embed=discord.Embed(title="天氣資訊 (沙鹿區)", description="晴時多雲,午後局部短暫雷陣雨,外出活動留意天氣變化", color=0xffffff) embed.set_thumbnail(url="https://ssl.gstatic.com/onebox/weather/64/partly_cloudy.png") embed.add_field(name="天氣狀況", value="多雲", inline=True) embed.add_field(name="最高低溫", value="27 ~ 29 °C", inline=True) embed.add_field(name="降雨機率", value="20 %", inline=True) embed.add_field(name="體感狀態", value="舒適至悶熱", inline=True) embed.set_footer(text="資料來源:https://opendata.cwa.gov.tw/") await ctx.send(embed=embed) ``` ```python embed=discord.Embed(title="天氣資訊 (沙鹿區)", description=info, color=0xffffff) embed.set_thumbnail(url=url) embed.add_field(name="天氣狀況", value=weather[0]["Wx"]["parameterName"], inline=True) embed.add_field(name="最高低溫", value=weather[0]["MinT"]["parameterName"] + " ~ " + weather[0]["MaxT"]["parameterName"] + " °C", inline=True) embed.add_field(name="降雨機率", value=weather[0]["PoP"]["parameterName"] + " %", inline=True) # embed.add_field(name="體感狀態", value=weather[0]["CI"]["parameterName"], inline=False) embed.set_footer(text="資料來源:https://opendata.cwa.gov.tw/") ``` ### 完成 ![](https://hackmd.io/_uploads/By-cgUx-a.png) ## 下次討論事項 - 10/12 晚上 20:00 Discord Bot 開發(二) - 定時發布天氣資訊 - 使用應用程式指令 - 講解選課相關指令 ###### tags: `討論共筆`