开发者学堂课程【使用 API 扩展应用功能: 使用天气 API 在应用中添加天气信息】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/393/detail/5025
使用天气 API 在应用中添加天气信息
内容介绍:
一、简介与相关资料说明
二、订购获取易源天气 API 免费版使用权限
三、编码调用 API 制作简单天气预报 H5 界面
一、简介与相关资料说明
易源数据作为一家专业的 api 数据提供商,在阿里云数据市场创建初期即合作入驻阿里云数据市场,见证并参与了阿里云数据市场的建设发展。是数据市场 api 使用人数最多、用户最为认可的服务商。
我们发现在云市场 API 实际使用上还是缺少一个"HELLOWORLD"为更好服务于用户,特此制作包含完整 api 使用流程的演示"H5天气
预报”
二、订购获取易源天气 API 免费版使用权限
(一)演示内容:
·实操视频
·讲解 PPT
·H5 天气的源代码(请求 api 数据部分)与 demo
(二)源码开发环境与相关技术框架:
·开发环境:MacOS、Intellij IDEA、chrome
·开源技术框架:PHP、Node、Webpack、Vuejs、Echarts、mint-ui 等等
(三)获取流程:
1.注册并登录阿里云
2.到数据市场选购 API,这里为直接查看易源数据的天气预报 AP
3.完成购买,这里为免费订购易源数据的天气预报 API
4.在 api 测试界面确认订购授权有效,实际测试数据是否满足需求5.查看自己的密钥,准备着手开发测试
(四)选购 API 注意事项:
·数据是否满足业务需求
·API 描述是否详尽清晰
·API 的用户数量如何,一般用的多的在稳定性、易用性、服务上会好些
·是否有额外的增值服务提供。比如易源数据提供额外的 SDK 、部分数据提供离线数据如股票历史等
·用户评价如向
·售前售后服务如何。例如有部分服务商客服旺旺长期不在线
·API 价格因素考虑。这里需要注意 API 是复杂商品,不一定只看便宜。比如返回信息丰富、数据覆盖厂,调用灵活实用性强等都需要考虑
·另外一定要实际测试货比三家。服务商一般都会提供免费或者便宜的测试套餐,可以在测试界面实际使用测试后在决定使用那家的
三、编码调用 API 制作简单天气预报 H5 界面
(一)demo 需求:
●查询特定城市的天气预报
●可以搜索添加城市到我的收藏
●使用 H5 在手机上展示
(二)调用易源天气 API 的数据:
●查询地名对应的 id:用于搜索城市列表
●id 或地名查询7天预报:用于获取天气预报信息
(三)实现思路:
1、利用 PHP 作为代理访问阿里云接口数据(阿里不支持跨域无法使用is直接调用,同时为了保密授权的 APPCODE ,所以需要 PHP 代理中转
2、PHP 实现为通用代理(proxyAPl.php),透传所有参数,仅仅是添加 request 头Authorization 用来做阿里鉴权
3、考虑是 Demo 展示。PHP 尽量简单仅实现 GET 方式访问数据;is 部分将 API 数据请求独立出来(apiStore.js)方便阅读理解
4、展现部分使用了 Vueis、Echarts、mint-ui 等 is 库
5、使用 node、Webpack 打包应用
header Strin
g
'Content-type:
application/json;charset=utf-8
’
);
//设置返回头
$
error
=
'
{
"showapi_res_code":-1,"showapi_res_error":“参数不对”};
if
(is_array($_GET
)
&&
isset($
_
GET["url"
]
)
}
//判断请求中是否有接口地址参数
{
$
url
= $_GET["url"
];
$
query
=
$_SERVER["QUERY_STRING"
];
//取查询串
$
query
= remove_querystring_var($query,
key
"url");
//移除url参数
echo
request
(url
$
url.
“?”
.$query
,
$appcode);
} else {
echo
‘{
"showapi_res_code":-1,"showapi_res_error":“请传入接口地址ur"
}
';
}
Scurl
= curl
_
init();
curl
_s
etopt
($
cu
rl,
o
ption
:C
LOPT
_
C STOM EQ EST,$method);
curl
_
setopt
($
cu
rl,
o
ption
:C
LOPT
_
L, $url
);
curl
_
setopt(
$
cu
rl,
o
ption
:C
LOPT
_
HTTPHEADE
,
&
headers);
curl
_
setopt(
$
cu
rl,
o
ption
:C
LOPT_FAILONE 0 ,
Value
false);
curl
_
setopt(
$
cu
rl,
o
ption
:C
LOPT_ ET NT ANSFE , v
alue
true
);
curl
_
setopt(
$
cu
rl,
o
ption
:C
LOPT_HEAD , v
alue
true
);
return
{
weather:
{ }
,//当前天气对象
areaSearchList:
[ ]
,//当前搜索地区的结果列表
selected:'101290101,
//默认显示昆明这里正式环境可以使用ip、gps
favoriteArea:["prov"
:
“云南”
…}
],//收藏的地区列表
l
oadingWeather:fa
l
se,//正在读天气的标示
l
oadingSearchList:fa
l
se
,
/
/
在读搜索地区的标示
l
oadError://读取错误信息
methods:{
get
W
eatherByAreaId
[
areaId
]
//返回异步请求的pro ise方便使用数据的地方处
var ts=this;
ts.LoadingWeather=true
request(
{
url:"http:/
/saweat
her.market.alicloudapi.com/area-to-weathe
r
areaid:area
Id || ‘101
290101
’
,
//地名参数 如果没有传默认使用昆明对应的
need
I
ndex:"1",//需要指数参数
needMoreDay:"1"//需要7天天气参数
}).
done(function(data
){
if(data,showa
p
i
_
res
_
code
==0
//接口系统正确
l
et business=data.showapi_res
_
body
if(business
.
ret
_
code
==0){
//接口业务成功
business.day=business.fl.index;
l
et index=
1
,
temp=[
];
while(true
){
var day=business['f'
+(index++)
]
;
If(day){
Temp.push(day);