2025-02-08- JavaScript 系列八:第6課 ── 天氣查詢應用程式-步驟02
接下來的目標是:
✅ 目標
在 WeatherQuery.vue 中完成一個具備以下功能的天氣查詢 App:
🔧 建議步驟
✅ 1. 先去中央氣象局註冊並取得 API Key
前往 https://opendata.cwb.gov.tw/index,註冊後取得一組「授權碼 (Authorization)」。
✅ 2. API 測試網址(可用 fetch 測試)
| 1
 | https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=你的API_KEY&locationName=臺北市
 | 
🧱 WeatherQuery.vue 初始版結構範例(可直接用)
這是最簡單可運作的版本,之後我們再加強功能與樣式:
| 12
 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
 
 | <script setup>import { ref, watch } from 'vue'
 
 const cities = ['臺北市', '新北市', '桃園市', '臺中市', '臺南市', '高雄市']
 const selectedCity = ref('臺北市')
 
 const weatherInfo = ref(null)
 
 const fetchWeather = async () => {
 const apiKey = '你的 API KEY'
 const url = `https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=${apiKey}&locationName=${selectedCity.value}`
 
 try {
 const res = await fetch(url)
 const data = await res.json()
 const location = data.records.location[0]
 
 const elements = location.weatherElement
 weatherInfo.value = {
 description: elements[0].time[0].parameter.parameterName, // 天氣現象
 minTemp: elements[2].time[0].parameter.parameterName,     // 最低溫
 maxTemp: elements[4].time[0].parameter.parameterName,     // 最高溫
 rain: elements[1].time[0].parameter.parameterName         // 降雨機率
 }
 } catch (error) {
 console.error('讀取失敗:', error)
 }
 }
 
 // 自動偵測縣市選擇改變時重新取得天氣資料
 watch(selectedCity, fetchWeather)
 
 // 初始載入資料
 fetchWeather()
 </script>
 
 <template>
 <div>
 <h2>天氣查詢</h2>
 <label>選擇縣市:
 <select v-model="selectedCity">
 <option v-for="city in cities" :key="city" :value="city">{{ city }}</option>
 </select>
 </label>
 
 <div v-if="weatherInfo">
 <p>天氣現象:{{ weatherInfo.description }}</p>
 <p>最高溫度:{{ weatherInfo.maxTemp }}°C</p>
 <p>最低溫度:{{ weatherInfo.minTemp }}°C</p>
 <p>降雨機率:{{ weatherInfo.rain }}%</p>
 </div>
 </div>
 </template>
 
 <style scoped>
 label {
 font-weight: bold;
 margin-bottom: 1rem;
 display: block;
 }
 </style>
 
 |