logo
GitHub

天气查询功能实现

在这一节中,我们将实现一个完整的天气查询功能。主要包括以下内容:

  1. 设计和实现天气查询页面
  2. 创建天气卡片组件
  3. 集成聚合数据天气 API
  4. 实现城市搜索功能

weather_query

准备工作

其中的数据来自于:聚合数据,这是国内一个非常不错的数据供应商,提供了很多免费的数据接口。

juhe

  1. 注册聚合数据账号并获取 API Key:

    • 访问 聚合数据官网
    • 注册账号并实名认证
    • 申请天气预报 API
    • 获取 API Key
  2. 创建环境变量文件:

.env
JUHE_WEATHER_KEY=your_api_key_here

组件实现

接下来的代码可以由 AI 生成,你可以这样对 AI 说:

Terminal window
生成一个天气卡片组件,要求:
- 使用 TailwindCSS DaisyUI 实现天气卡片组件
- 使用 Astro 实现天气卡片组件,并添加天气数据
- 代码写入 src/components/WeatherCard.astro 文件中
生成一个天气查询页面,要求:
- 使用 Vue 实现天气查询页面
- 使用 Astro 实现天气查询页面,并添加天气数据
- 代码写入 src/components/WeatherPage.astro 文件中

以下是我得到的代码,供你参考:

Astro 页面集成

创建 Astro 页面来使用 WeatherCard 组件,你可以这样对 AI 说:

Terminal window
生成一个 Astro 页面,要求:
- 使用 Astro 实现天气查询页面,并添加天气数据
- 要使用 WeatherCard WeatherPage 组件
- 代码写入 src/pages/weather/index.astro 文件中

以下是我得到的代码,供你参考:

pages/weather/index.astro
---
import AppLayout from '../../layouts/AppLayout.astro'
import WeatherCard from '../../components/WeatherCard.vue'
// 示例天气数据
const exampleWeather = {
city: '北京',
date: new Date().toLocaleDateString('zh-CN'),
temperature: '25',
weather: '晴',
wind: '东北风 3级',
humidity: '45%'
}
---
<AppLayout>
<div class="max-w-4xl mx-auto">
<h1 class="text-3xl font-bold mb-8">天气查询</h1>
<!-- 使用 Vue 组件 -->
<div class="flex justify-center">
<WeatherCard client:load weather={exampleWeather} />
</div>
<div class="mt-8 text-center text-gray-600">
<p>这是一个示例展示,完整功能请参考上方 Vue 组件的实现。</p>
</div>
</div>
</AppLayout>

在这个示例中:

  1. 使用 client:load 指令确保组件在客户端加载时进行水合(hydration)
  2. 通过 props 传递天气数据到 Vue 组件
  3. 使用 AppLayout 保持页面布局一致
  4. 添加响应式样式确保良好的展示效果

API 路由实现

src/pages/api 目录下创建天气相关的 API 路由,你可以这样对 AI 说:

Terminal window
生成一个天气查询接口,要求:
- 使用 Astro 实现天气查询接口,并添加天气数据
- 使用聚合数据天气 API 获取天气数据
- 代码写入 src/pages/api/weather/index.ts 文件中
生成一个城市搜索接口,要求:
- 使用 Astro 实现城市搜索接口,并添加城市数据
- 代码写入 src/pages/api/weather/cities.ts 文件中

以下是我得到的代码,供你参考:

这两个 API 端点的功能说明:

  1. 天气查询接口 (/api/weather):

    • 接收城市名称作为查询参数
    • 调用聚合数据天气 API 获取实时天气信息
    • 返回格式化后的天气数据
  2. 城市搜索接口 (/api/weather/cities):

    • 接收搜索关键词作为查询参数
    • 在预设的城市数据中进行模糊搜索
    • 返回匹配的城市列表