微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发,与我们一起共同发力推动微信小程序的发展,微信小程序应用数量超过了一百万,覆盖200多个细分的行业,日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。本文以设计了天气预报的的微信小程序,实现对全国各地天气情况的快速查询。
该项目是基于微信小程序实现了一个实时显示天气状况的系统,该系统所研究的的问题如下:
系统运行平台的选取。该系统主要采用Javascript进行web开发。
确定系统的基本功能,该设计主要包括基本天气显示模块、预报城市模块和其他天气指标。基本天气显示模块有图标、温度和天气情况;预报城市模块包含手动设置和自动设置;其他天气指标单元,主要包括湿度、气压、能见度、风向、风速和风力等情况。
实时天气API网络接口配置。系统需要从云端实时的获取全国4000+个市县区天气数据,并对获取的数据进行解析。
对系统进行详细的介绍和分析。根据系统所实现的功能,进行模块前后端的设计。
在开发微信小程序前要做好相应的环境,包括账号注册、APPID的获取和开发环境(微信开发者工具)的安装。

图1:微信开发平台界面
扫码登录后,就可以创建项目,并进行信息配置,主要包括项目名称、位置和APPID等。之后便可以进入主界面,主要包括五个分区,编译生成页面区、资源目录区、代码编辑区、调试输出区和基本设置分区,这五大分区协同实现系统设计。

图2:微信开发平台编辑界面
小程序框架提供了自救的视觉图层描述语言WXML和WXSS,以及JavaScript;并在视图层和逻辑层之间提供数据传输和时间系统,让开发者能够专注于逻辑和数据。
系统一共有三个全局文件,分别是app.json,app.js和app.wxss,三者名字不可更改。其中app.json用来对微信小程序进行全局配置,决定页面的路径、窗口表现、设置网络超时时间、设置多Tab等。app.js作为项目的入口文件,用于创建应用程序对象。app.wxss是一个全局的样式文件,在这个文件里面定义的样式,对每个页面均有效。
Pages字段用于描述当前小程序所有页面的路径,是为了让微信客户端知道当前小程序定义在那个目录下。且每个页面也包含4个配置文件,以index为例,则有index.ts,index.json,index.wxml和index.wxss,它们分别负责页面的逻辑实现、标题栏和状态栏、管理页面内容和页面排布等。
该模块主要包括基本天气显示模块、预报城市模块和其他天气指标。基本天气显示模块主要包括文字内容和图标等,采用的主要语法为’内容’和,其中前者主要负责显示文本内容,后者显示对应路径下的图片。
便于实现对全国多个城市的选择预报,我们引入了一个选择组件,它是从底部弹起的滚动选择器组件,目前根据mode属性值的不同共支持5种选择器,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器。若省略mode值不写,则默认效果是普通选择器。当mode=’region’时为省市区选择器效果。
为了提供更加丰富的天气信息,该系统也报告了城市的湿度、气压、能见度、风向、风速和风力等情况,也采用’内容’组件时间。最后通过index.wxss实现对页面的优化排布,实现如图3所示。

图3:城市选择界面(左);天气预报系统主界面(右)
该系统的目标是根据用户需要,能够从云端实时的获取全国各个市县区天气数据,和风天气提供了全国4000+个市县区和海外15万个城市实时天气数据,包括实时温度、体感温度、风力风向、相对湿度、大气压强、降水量、能见度、露点温度、云量等数据。本实验通过API网络接口配置,实现对所需数据(温度,湿度等)的读取。
请求。URL为https://devapi.qweather.com/v7/weather/now?[请求参数],该链接用于获取所需天气数据,其中请求参数包括必选和可选参数,如不填写可选参数将使用其默认值,参数之间使用&进行分隔。必选参数有key 和location ,Key是用户通过网站认证获得的,而且还支持数字签名的方式进行认证。为了实现对特定城市的数据获取,我们需要得到查询地区的LocationID,本设计主要通过请求URL:https://geoapi.heweather.net/v2/city/lookup?[请求参数]来获取LocationID,之后再通过上述https://devapi.qweather.com/v7/weather/now?[LocationID]&key来获得编号为LocationID的城市天气情况,以北京的实况天气为例,在浏览器中输入https://devapi.qweather.com/v7/weather/now?location=101010100&key=3d14f494489d4552a3114c1fdc2688b0,可获得北京天气的实时数据。如下:
{"code":"200",
"updateTime":"2022-06-07T21:12+08:00"
"fxLink":"http://hfx.link/2ax1",
"now":{
"obsTime":"2022-06-07T21:06+08:00",
"temp":"22",
"feelsLike":"16",
"icon":"104",
"text":"阴",
"wind360":"135",
"windDir":"东南风",
"windScale":"5",
"windSpeed":"33",
"humidity":"42",
"precip":"0.0",
"pressure":"1002",
"vis":"26",
"cloud":"100",
"dew":"7"},
"refer":{
"sources":["QWeather","NMC","ECMWF"],
"license":["no commercial use"
]}}
以上数据为北京市的实时天气原始数据,还需要对该数据进行解析,获得本系统所需的关键数据,这些数据的的意义如表1所示。
表1 参数以及意义
| 参数 | 意义 |
|---|---|
| now.obsTime | 数据观测时间 |
| now.temp | 温度,默认单位:摄氏度 |
| now.feelsLike | 体感温度,默认单位:摄氏度 |
| now.icon | 天气状况和图标的代码 |
| now.text | 天气状况的文字描述,包括阴晴雨雪等天气状态的描述 |
| now.wind360 | 风向360角度 |
| now.windDir | 风向 |
| now.windScale | 风力等级 |
| now.windSpeed | 风速,公里/小时 |
| now.humidity | 相对湿度,百分比数值 |
| now.precip | 当前小时累计降水量,默认单位:毫米 |
| now.pressure | 大气压强,默认单位:百帕 |
| now.vis | 能见度,默认单位:公里 |
| now.cloud | 云量,百分比数值。可能为空 |
| now.dew | 露点温度。可能为空 |
接下来便是如何从天气信息数据库中获取目标信息的代码实现,思路与上文分析一致,需要注意的是需要在微信开发者工具绑定请求网站的域名,如图4(左)所示,这样才能下载到所需的天气信息,如图4(右):
getWeater:function(){
var that=this; //this不可以在微信api使用
wx.request({
url: 'https://geoapi.heweather.net/v2/city/lookup?',
data:{
location:that.data.region[2],
key:'3d14f494489d4552a3114c1fdc2688b0',
},
success:function(res){ //如果城市ID找到了,则找对应ID的城市详细信息
that.setData({Place_ID:res.data.location[0].id}) //将城市ID用变量存储
wx.request({ //寻找城市的详细信息
url: 'https://devapi.qweather.com/v7/weather/now?',
data: {
location:that.data.Place_ID,
key:'3d14f494489d4552a3114c1fdc2688b0'
},
success:function(res){ //如果找到了
console.log(res.data)
that.setData({now:res.data.now}) //将详细信息用Place_Message存储
}
})
}
})
}

图4:服务器域名设置(左);下载获得数据(右)
在完成所用程序的编写后,需要对其编译获得最终的视图层,本实验将初始所在地定位河南省许昌市禹州市,初始界面如图5(左)所示,之后以查询吉林省长春市净月区天气为例,如图6(中,右)实现系统的验证。

图5:禹州市天气情况界面(左);选择城市(中);长春市南关区天气情况界面(右)
本实验设计了一个可查询全国实时天气的微信小程序,使我充分了解了微信小程序这一轻量应用的重要实际意义,也系统学习了小程序设计的基本流程,在一定程度的提升了对问题的解决能力。未来将尝试增加一些新的功能,比如灾难预警和空气质量播报等。
完整代码下载:
0002使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的rubyyaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵