免费好用的天气服务 - Tuya(结尾附视频)(下)

简介: 免费好用的天气服务 - Tuya(结尾附视频)(下)

四、项目案例 - 天气变化图

1. 实现效果

首先通过正向地址解析接口,根据城市名称获得经纬度。然后调用获取7日天气预报接口获得天气数据,再通过Echarts进行可视化展示。

2. index.html

Tips:前文中的签名工具代码对应toos.js

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>天气查询</title>
    <!-- Start 引入计算sign所需js库文件 Start -->
    <script src="js/core-min.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/hmac-min.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/sha256-min.js" type="text/javascript" charset="utf-8"></script>
    <!-- End 引入计算sign所需js库文件 End -->
    <script src="js/jquery-3.6.0.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/echarts.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/tool.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/index.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body style="text-align: center;">
    <span>请输入城市:</span><input type="text" id="city" style="font-size: 1rem;" />
    <input type="button" id="address" value="天气查询" style="font-size: 1rem;" />
    <br /><br />
    <div id="main" style="height: 37.5rem;width: 56.25rem;margin: 0 auto;"></div>
  </body>
</html>

3. index.js

var accessToken = "";
// 日期格式化函数
function timeFormat(time) {
  var date = new Date(time);
  var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
  var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
  return month + "-" + day;
}
$(function() {
  // 页面加载后自动获取token
  if (accessToken == "") {
    accessToken = getToken();
  }
  $("#address").on("click", function() {
    var city = $("#city").val();
    if ($.trim(city) == "") {
      alert("地址不能为空");
      return;
    }
    var query = "address=" + city;
    var path = "v1.0/iot-03/geocode-cities/address";
    timestamp = new Date().getTime();
    var settings = {
      "url": host + "/" + path + "?" + query,
      "method": "GET",
      "timeout": 0,
      "headers": {
        "client_id": clientId,
        "sign": getSignService(accessToken, query, path),
        "t": timestamp,
        "sign_method": sign_method,
        "access_token": accessToken
      }
    };
    // 调用地址解析接口获取坐标
    $.ajax(settings).done(function(response) {
      var lat = response.result.latitude;
      var lon = response.result.longitude;
      var query = "lat=" + lat + "&lon=" + lon;
      var path = "v2.0/iot-03/weather/forecast/daily";
      timestamp = new Date().getTime();
      var settings = {
        "url": host + "/" + path + "?" + query,
        "method": "GET",
        "timeout": 0,
        "headers": {
          "client_id": clientId,
          "sign": getSignService(accessToken, query, path),
          "t": timestamp,
          "sign_method": sign_method,
          "access_token": accessToken
        }
      };
      // 调用天气接口获取未来一周天气情况
      $.ajax(settings).done(function(response) {
        var xAxisData = [];
        var maxSeriesData = [];
        var minSeriesData = [];
        // 解析数据,准备填充Echarts图表
        for (var item of response.result.data) {
          xAxisData.push(timeFormat(item.time));
          maxSeriesData.push(parseFloat(item.temperature_max.Value).toFixed(
            1));
          minSeriesData.push(parseFloat(item.temperature_min.Value).toFixed(
            1));
        }
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        // 指定图表的配置项和数据
        var option = {
          title: {
            text: (city.indexOf("市") == -1 ? city + "市" : city) +
              " - 未来7天温度变化",
            left: 'center'
          },
          tooltip: {
            trigger: 'axis'
          },
          legend: {
            left: 'right'
          },
          grid: {
            top: "15%"
          },
          xAxis: {
            type: 'category',
            boundaryGap: false,
            data: xAxisData
          },
          yAxis: {
            type: 'value',
            axisLabel: {
              formatter: '{value} °C'
            }
          },
          series: [{
              name: '最高温度',
              type: 'line',
              data: maxSeriesData,
              markPoint: {
                data: [{
                    type: 'max',
                    name: 'Max'
                  },
                  {
                    type: 'min',
                    name: 'Min'
                  }
                ]
              },
              markLine: {
                data: [{
                  type: 'average',
                  name: 'Avg'
                }]
              }
            },
            {
              name: '最低温度',
              type: 'line',
              data: minSeriesData,
              markPoint: {
                data: [{
                    type: 'max',
                    name: 'Max'
                  },
                  {
                    type: 'min',
                    name: 'Min'
                  }
                ]
              },
              markLine: {
                data: [{
                  type: 'average',
                  name: 'Avg'
                }]
              }
            }
          ]
        };
        myChart.setOption(option);
      });
    });
  });
})

4. 完整案例源码

五、视频直达

视频地址:https://www.bilibili.com/video/BV1Wg411w7mE/,喜欢的小伙伴儿一定要三连加关注哦~

免费好用的天气服务 - Tuya

写在结尾:作者力求做到将每个知识点细化,并且对于有关联的知识点都会使用传送门挂载链接。文章采用:“文字 + 配图 + 视频”的方式来进行展现,均是挤时间所作,希望看到这里能留下评论点个赞,略表支持!

目录
相关文章
|
4月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
2月前
|
JSON 数据库 数据格式
[开发技巧] 如何获取汉字笔画数?
在开发卜筮小脚本时遇到获取汉字笔画数的需求,起初尝试使用`pypinyin`库却未得理想结果。经过探索,发现Unicode联盟维护的Unihan数据库提供准确的汉字笔画数据。通过下载Unihan数据库文件,解析其中的`kTotalStrokes`字段,利用正则表达式提取所需信息,并将其保存为JSON格式以供快速查询。最终编写函数`get_character_stroke_count`实现任意汉字笔画数的高效获取,满足了项目需求并提供了准确的数据支持。此方法不仅解决了问题,还为类似需求提供了参考方案。
67 10
[开发技巧] 如何获取汉字笔画数?
|
6月前
|
数据采集 Python
[python]爬取手机号码前缀和地区信息
[python]爬取手机号码前缀和地区信息
|
9月前
【从800+CSDN支持的Emoji表情中筛选出文章标题可用的 1️⃣ 2️⃣ 4️⃣ 个表情并进行分类】(文章标题如何使用Emoji表情)⚽️
【从800+CSDN支持的Emoji表情中筛选出文章标题可用的 1️⃣ 2️⃣ 4️⃣ 个表情并进行分类】(文章标题如何使用Emoji表情)⚽️
201 0
|
程序员 Python
免费制作国旗头像,1行Python代码搞定,小白可用
免费制作国旗头像,1行Python代码搞定,小白可用
143 0
免费制作国旗头像,1行Python代码搞定,小白可用
|
XML 存储 安全
Unicode 15.0 标准已发布,新增鹅、豌豆等 20个emoji
Unicode 15.0 标准已发布,新增鹅、豌豆等 20个emoji
541 0
|
算法 JavaScript API
免费好用的天气服务 - Tuya(结尾附视频)(上)
免费好用的天气服务 - Tuya(结尾附视频)(上)
201 0
|
算法 Python
【Python 百练成钢】报时助手、成绩分析、购物清单、字符串对比、FJ的字符串
【Python 百练成钢】报时助手、成绩分析、购物清单、字符串对比、FJ的字符串
|
数据采集 Python
Python爬虫:正则匹配网址中的数字
Python爬虫:正则匹配网址中的数字
189 0
|
PHP 数据安全/隐私保护