axios实战学习——使用高德地图api接口数据实现天气查询案例

举报
黛琳ghz 发表于 2023/02/11 00:26:24 2023/02/11
【摘要】 关于这个Vue + axios 获取接口数据的操作,这篇文章就不过多的讲解了,上一篇关于axios的文章已经介绍过了,接下来我们直接来学习和了解一下如何使用高德开放平台(就是那个鲜为人知的高德地图)api接口来实现天气查询的案例。

📋前言

关于这个Vue + axios 获取接口数据的操作,这篇文章就不过多的讲解了,上一篇关于axios的文章已经介绍过了,接下来我们直接来学习和了解一下如何使用高德开放平台(就是那个鲜为人知的高德地图)api接口来实现天气查询的案例。

详细看这篇文章:axios基础学习——通过 Vue + axios 获取接口数据的小demo

🎯案例介绍

首先在编写代码之前,我们要知道高德开放平台api接口怎么使用和创建。

🧩关于高德开发平台

1️⃣创建应用生成Key

网站地址:高德开放平台 | 高德地图API
首先注册好账号,然后在导航栏找到Web服务API。

在这里插入图片描述

找到天气查询这个API

在这里插入图片描述

然后点击申请Key创建应用并且生成Key密钥

在这里插入图片描述
在这里插入图片描述

随便起一个名字,然后选择应用类型为“天气”

在这里插入图片描述

建好以后,添加一个Key,选择“Web服务”

在这里插入图片描述
在这里插入图片描述

提交以后,自动生成Key密钥

在这里插入图片描述

2️⃣查看API文档

在使用的过程中发现,参数city的值可以为adcode(城市编码),也可以为中文名称。
在这里插入图片描述

主要请求头的名称以及返回数据的名称

在这里插入图片描述

🧩测试接口

完成以上的步骤以后,我们来试一下调用这个接口,看看返回的数据。
因为是js文件,所以运行在终端,node xxx.js。

const axios=require('axios')
const params = {
    key: '你的Key',
    city: '广州',
    extensions: 'all'
}
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
axios.get(
    'https://restapi.amap.com/v3/weather/weatherInfo?parameters', {
        params: {
            key: '你的Key',
            city: '广州',
            extensions: 'all'
        }
    }
).then((res) => {
    console.log(res.data);
    console.log(res.data.forecasts[0].casts[0]);
}).catch((err) => {
    console.log(err);
})

成功运行,调用接口获取到了广州的天气数据。

在这里插入图片描述

🎯案例编写

  • 首先这个案例用的是Vue3+axios,页面布局很简单,表单布局加内容显示,表单布局是输入框加一个按钮,在输入框输入你想查询的城市名字(输入框通过v-model双向绑定所要查询的城市),然后点击按钮进行查询。内容显示区域分为四个部分,分别是当天的天气情况以及未来三天的天气预测。

  • 上面的代码是用于测试的,以下代码是案例的完整代码,是写在脚手架上面的。

<template>
  <!-- <router-link to="/home-tools">
    <h1>返回</h1>
  </router-link> -->
  <p class="title">weather fortecast</p>
  <div class="serach">
      <input type="text" placeholder="Enter the city" v-model="params.city">
      <!-- <van-button plain type="primary">朴素按钮</van-button> -->
      <button @click="serachWeather">serach</button>
  </div>
  <div>
  </div>
  <div v-for=" item,index in params.weatherList" :key="index" class="msg">
        <div>
          <p v-show="index<1">城市:{{ params.area.province }}-{{ params.area.city }}</p>
          <p>日期:{{ item.date }} 星期{{ week[item.week] }}</p>
          <p>白天天气:{{ item.dayweather }}</p>
          <p>晚间天气:{{ item.nightweather }}</p>
          <p>白天温度:{{ item.daytemp }}℃</p>
          <p>晚间温度:{{ item.nighttemp }}℃</p>
          <p>风向:向{{ item.daywind }}~向{{ item.nightwind }}</p>
          <p>风力:{{ item.daypower }}级~{{ item.nightpower }}级</p>
        </div>

  </div>
</template>
<script>
import axios from 'axios'
export default {
  data () {
    return {
      week: [
        '日',
        '一',
        '二',
        '三',
        '四',
        '五',
        '六'
      ],
      params: {
        key: 'd540cda8c346b7efb5a558bb8b6a30a5',
        city: '广州',
        extensions: 'all',
        weatherList: {

        },
        area: {

        }
      }
    }
  },
  created () {
    this.serachWeather()
  },
  methods: {
    async serachWeather () {
      const params = this.params
      axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
      axios.get(
        'https://restapi.amap.com/v3/weather/weatherInfo', {
          params: this.params
        }
      ).then((res) => {
        params.weatherList = res.data.forecasts[0].casts
        params.area = res.data.forecasts[0]
        console.log(params.area)
      }).catch((err) => {
        console.log(err)
      })
    }
  }
}
</script>
<style lang="less" scoped>
*{
  margin: 0;
  padding: 0;
}

@font-face {
    font-family: 'ds';
    src: url('../../../font/DS-DIGIB.TTF');
}
.title{
  text-align: center;
  line-height: 2em;
  font-size: 24px;
  font-family: 'ds';
}
.serach{
  width: 18rem;
  height: auto;
  border: 2px solid #000;
  border-radius: 1rem;
  margin: 0 auto;
  display: flex;
  justify-content: flex-end;
  & input{
    border: none;
    outline: none;
    width: 10rem;
  }
  & input:hover{
    // border-bottom:1px solid #000;
    // text-decoration: underline;
  }
  & button{
    border: none;
    width: 6rem;
    border-radius: 1rem;
    margin-left: 1rem;
  }

}

.msg{
  // text-align: center;
  width: 20rem;
  height: auto;
  border: 1px solid #000;
  margin: 0 auto;
  margin-bottom: 2rem;
}
.msg:nth-last-child(4){
  margin-top: 1rem;
  & p:nth-child(1){
    color: red;

  }
  }
</style>

🎯实现效果

案例中接口返回的城市是广州,因此默认查询的是广州。

在这里插入图片描述


🎯点赞收藏,防止迷路🔥

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。