本期主要内容
1.网络域名的配置
2.微信小程序异步获取服务器数据
3.豆瓣电影的项目实践
1.网络域名的配置
1.1 微信小程序访问外部数据时的限制
域名只支持 HTTPS
域名必须经过 ICP 备案
域名不能配置为本机 IP 地址
每个小程序最多配置 20 个域名
1.2 微信小程序访问外部数据时的域名配置
A.小程序后台-开发-开发设置-服务器域名
B.进行域名的配置
C.查看开发者工具是否正常启用配置的域名
2.微信小程序异步获取服务器数据
wx.request()方法用于发送HTTPS网络请求,其语法结构为:
wx.request({
url:"URL地址",
method:"请求方式(GET|POST|PUT|DELETE)",
data:"请求参数(string|object)",
header:{
//设置HTTP请求头信息
},
success:res=>{
//成功时调用的回调函数
},
fail:err=>{
//失败时调用的回调函数
},
complete:()=>{
//完成时调用的回调函数
}
})
content-type 默认为 application/json
3.豆瓣电影的项目实践
3.1 首页的实现
A.修改 app.json 实现标题的设置,代码如下:
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#0aa1ed",
"navigationBarTitleText": "学子影院",
"navigationBarTextStyle":"white"
}
B.修改app.json,添加tabBar属性实现底部选项卡的业务功能,示例代码如下:
"tabBar": {
"color":"#888",
"selectedColor":"#0aa1ed",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath":"images/home_disabled.png",
"selectedIconPath":"images/home_enabled.png"
},
{
"pagePath":"pages/ranking/ranking",
"text":"排行榜",
"iconPath":"images/ranking_disabled.png",
"selectedIconPath":"images/ranking_enabled.png"
}
]
}
因为底部选项卡需要两个页面,所以还需要在pages属性中指定另一个页面的路径,示例代码如下:
"pages": [
"pages/index/index",
"pages/ranking/ranking",
"pages/logs/logs"
]
C.修改app.wxss设置全局样式,示例代码如下:
/**app.wxss**/
.container {
height: 100%;
}
page{
width: 100%;
height: 100%;
background-color: #f9f9f9;
}
3.2 豆瓣电影API
以正在上映为例(注意:这是豆瓣电影返回的数据):
{
//电影信息列表
subjects:[
{
alt:"当前影片的详情的URL地址",
title:"当前影片的名称",
year:"上映年份",
images:{
small:"当前影片的小图URL地址",
medium:"当前影片的中图URL地址",
large:"当前影片的大图URL地址"
},
rating:{
average:数字(当前影片的评分)
}
}
],
title:"当前访问的API的标题信息"
}
3.3 首页轮播图的实现 第一步:从豆瓣电影的官网中异步获取相关的数据
A.确定在什么情况下向豆瓣电影的官网发送异步请求 -- 首页的onLoad事件 示例代码如下:
onLoad(options){
//获取轮播图数据 -- 是豆瓣电影的正在上映的影片
wx.request({
url: 'https://api.douban.com/v2/movie/new_movies?apikey=0df993c66c0c636e29ecbb5344252a4a',
method:'GET',
header:{
'content-type':'application/x-www-form-urlencoded'
},
success:res=>{
console.log(res.data);
}
});
}
因为微信小程序默认在请求时,请求头的类型为json类型,而豆瓣电影官网只接受
application/x-www-form-urlencoded类型的请求,故要修改之。
为了保证能够在wxml文件中进行遍历操作,所以将需要返回的数据保证起来,故需要在data中声明一个属性,示例代码如下:
data:{
//用于保存轮播图数据
swiperArray:[]
}
B.当服务器返回结果后,就应该将返回的数据存储到刚刚的swiperArray数组中,示例代码如下:
success:res=>{
this.setData({
//res.data指服务器的返回数据
//subjects是返回数据的组成成员(豆瓣电影官网规定的)
swiperArray:res.data.subjects
});
}
第二步:在index.wxml中遍历相关的数据,形成轮播图效果,示例代码如下:
<!-- 顶部轮播图开始 -->
<view class="swiper">
<swiper autoplay="true" indicator-dots="true" indicator-active-color="#fff" circular="true">
<swiper-item wx:for="{{swiperArray}}" wx:key="index">
<image src="{{item.images.large}}"></image>
</swiper-item>
</swiper>
</view>
<!-- 顶部轮播图结束 -->
3.4 首页中其他版块的实现
首页中其他版块包括:即将上映的影片、正在热映的影片、Top250的影片 版块的结构代码如下:
<!-- 影片版块开始 -->
<view class="board">
<!-- 标题信息开始 -->
<view class="board-title">即将上映的影片</view>
<!-- 标题信息结束 -->
<!-- 影片列表开始 -->
<view class="movie-list">
<!-- 单一影片开始 -->
<view class="movie-item">
<image src="https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2591289975.webp"></image>
<text>电影1</text>
</view>
<!-- 单一影片结束 -->
</view>
<!-- 影片列表结束 -->
</view>
<!-- 影片版块结束 -->
如何获取相关版块的数据或者说先分析豆瓣电影的API接口的地址:
每个版块在获取相关的数据的时候可能需要指定参数,如start表示从第几条记录开始返回,count表示返回多少条记录。
以"即将上映的影片"为例
第一步:从豆瓣电影官网异步获取即将上映的影片数据,API地址参见文档
说明:即将上映和最新热映的影片只获取前4个,而TOP250则获取前12个 同样需要在首页的onLoad()钩子函数触发时异步发送请求,代码如下:
//获取即将上映的影片数据 -- 只返回前4条
wx.request({
url: 'https://api.douban.com/v2/movie/coming_soon?apikey=0df993c66c0c636e29ecbb5344252a4a',
method:'GET',
data:{
start:0,
count:4
},
header:{
'content-type':'application/x-www-form-urlencoded'
},
success:res=>{
//console.log(res.data.subjects);
this.setData({
coming_soon:res.data.subjects
});
}
});
上述代码中的coming_soon变量的使用,也就意味着必须在data中声明才可以,示例代码如下:
data:{
coming_soon:[]
}
第二步:将获取的数据通过循环结构在WXML的页面中输出,代码如下:
<!-- 即将上映的影片版块开始 -->
<view class="board">
<!-- 标题信息开始 -->
<view class="board-title">即将上映的影片</view>
<!-- 标题信息结束 -->
<!-- 影片列表开始 -->
<view class="movie-list">
<!-- 单一影片开始 -->
<view class="movie-item" wx:for="{{coming_soon}}" wx:key="index">
<navigator url="/pages/detail/detail?id={{item.id}}">
<image src="{{item.images.large}}"></image>
<text>{{item.title}}</text>
</navigator>
</view>
<!-- 单一影片结束 -->
</view>
<!-- 影片列表结束 -->
</view>
<!-- 即将上映的影片版块结束 -->