前言
在制作天气查询小程序的过程中,最核心的就是天气的数据,这些数据在各大天气网都能找到,但是不能被我们小程序中直接使用。这时候就要找数据平台使用他们的接口为小程序服务。
找到合适的数据平台
市面上很多数据平台,但是好用又便宜的就不多了。这里我使用的是极速数据平台 (www.jisuapi.com)
正好这几天过节在做活动,2.5元就有10000次的接口使用次数,实属良心。
接口的对接
测试接口
这个平台大部分接口会有免费的测试套餐,我们在对接时可以先购买测试套餐(0元)试试返回的结果是不是需要的,避免后期买错接口的麻烦。
上图给大家写了详细的图解,查看返回的数据都有哪些。
为了更好查看,这里我在页面单独调用了接口地址,https://api.jisuapi.com/weather/query?appkey=这里换上你自己的APPKEY&city=北京
参数名称 | 类型 | 说明 |
---|---|---|
city | string | 城市 |
cityid | int | 城市ID |
citycode | string | 城市天气代号 |
date | string | 日期 |
week | string | 星期 |
weather | string | 天气 |
temp | string | 气温 ℃ |
temphigh | string | 最高气温 ℃ |
templow | string | 最低气温 ℃ |
img | string | 图片数字 |
humidity | string | 湿度 % |
pressure | string | 气压 hpa |
windspeed | string | 风速 m/s |
winddirect | string | 风向 |
windpower | string | 风级 |
updatetime | string | 更新时间 |
index | string | 生活指数 |
iname | string | 指数名称 |
ivalue | string | 指数值 |
detail | string | 指数详情 |
so2 | string | 二氧化硫1小时平均 μg/m³ |
so224 | string | 二氧化硫24小时平均 μg/m³ |
no2 | string | 二氧化氮1小时平均 μg/m³ |
no224 | string | 二氧化氮24小时平均 μg/m³ |
co | string | 一氧化碳1小时平均 mg/m³ |
co24 | string | 一氧化碳24小时平均 mg/m³ |
o3 | string | 臭氧1小时平均 μg/m³ |
o38 | string | 臭氧8小时平均 μg/m³ |
o324 | string | 臭氧24小时平均 μg/m³ |
pm10 | string | PM10 1小时平均 μg/m³ |
pm1024 | string | PM10 24小时平均 μg/m³ |
pm2_5 | string | PM2.5 1小时平均 μg/m³ |
pm2_524 | string | PM2.5 24小时平均 μg/m³ |
iso2 | string | 二氧化硫指数 |
ino2 | string | 二氧化氮指数 |
ico | string | 一氧化碳指数 |
io3 | string | 臭氧指数 |
io38 | string | 臭氧8小时指数 |
ipm10 | string | PM10指数 |
ipm2_5 | string | PM2.5指数 |
aqi | string | AQI指数 |
primarypollutant | string | 首要污染物 |
quality | string | 空气质量指数类别,有“优、良、轻度污染、中度污染、重度污染、严重污染”6类 |
timepoint | string | 发布时间 |
aqiinfo | string | AQI指数信息 |
level | string | 等级 |
color | string | 指数颜色值 |
affect | string | 对健康的影响 |
measure | string | 建议采取的措施 |
daily | string | 按天时间 |
night | string | 夜间 |
sunset | string | 日落时间 |
day | string | 白天 |
hourly | string | 按小时 |
time | string | 时间 |
soncity | string | 城市 有些地级市取市府的天气 |
soncityid | int | 城市ID |
soncitycode | string | 城市代号 |
sunrise | string | 日出时间 |
参考官网给出的数据解释发现有很多很详细的数据,足够使用了,挑出自己想要的字段就行。
其他细节参考 www.jisuapi.com/api/weather/
购买接口
测试完成,就是你了。
登录平台账号,找到天气预报接口,点击申请数据,选择1w次的套餐
这里的页面有点问题,一开始没找到提交订单在哪,原来在页面的右边,使用底部滑动条拉过去就能看到了…或者浏览器全屏
点击提交订单,完成支付即可。
这样我们就有了1w次的天气接口调用次数。
编写服务端代码
平台提供了几种语言的示例代码,这里我使用的是PHP,其他语言见 www.jisuapi.com/code/weather/
<?php
require_once 'curl.func.php';
$appkey = 'your_appkey_here';//你的appkey
$city = '安顺';//utf8
$cityid='111';//任选
$citycode='101260301';//任选
$url = "https://api.jisuapi.com/weather/query?appkey=$appkey&city=$city";
$result = curlOpen($url, ['ssl'=>true]);
$jsonarr = json_decode($result, true);
//exit(var_dump($jsonarr));
if($jsonarr['status'] != 0)
{
echo $jsonarr['msg'];
exit();
}
$result = $jsonarr['result'];
echo $result['city'].' '.$result['cityid'].' '.$result['citycode'].' '.$result['date'].' '.$result['week'].' '.$result['weather'].' '.$result['temp'].'<br>';
echo $result['temphigh'].' '.$result['templow'].' '.$result['img'].' '.$result['humidity'].' '.$result['pressure'].' '.$result['windspeed'].' '.$result['winddirect'].'<br>';
echo $result['windpower'].' '.$result['updatetime'].'<br>';
echo '指数:<br>';
foreach($result['index'] as $index)
{
echo $index['iname'].' '.$index['ivalue'].' '.$index['detail']. '<br>';
}
echo '空气质量指数:<br>';
$aqi = $result['aqi'];
echo $aqi['so2'].' '.$aqi['so224'].' '.$aqi['no2'].' '.$aqi['no224'].' '.$aqi['co']. '<br>';
echo $aqi['co24'].' '.$aqi['o3'].' '.$aqi['o38'].' '.$aqi['o324'].' '.$aqi['pm10']. '<br>';
echo $aqi['pm1024'].' '.$aqi['pm2_5'].' '.$aqi['pm2_524'].' '.$aqi['iso2'].' '.$aqi['ino2']. '<br>';
echo $aqi['ico'].' '.$aqi['io3'].' '.$aqi['io38'].' '.$aqi['ipm10'].' '.$aqi['ipm2_5']. '<br>';
echo $aqi['aqi'].' '.$aqi['primarypollutant'].' '.$aqi['quality'].' '.$aqi['timepoint']. '<br>';
echo $aqi['aqiinfo']['level'].' '.$aqi['aqiinfo']['color'].' '.$aqi['aqiinfo']['affect'].' '.$aqi['aqiinfo']['measure']. '<br>';
echo '未来几天天气:<br>';
foreach($result['daily'] as $daily)
{
echo $daily['date'].' '.$daily['week'].' '.$daily['sunrise'].' '.$daily['sunset']. '<br>';
echo $daily['night']['weather'].' '.$daily['night']['templow'].' '.$daily['night']['img'].' '.$daily['night']['winddirect'].' '.$daily['night']['windpower']. '<br>';
echo $daily['day']['weather'].' '.$daily['day']['templow'].' '.$daily['day']['img'].' '.$daily['day']['winddirect'].' '.$daily['day']['windpower']. '<br>';
}
echo '未来几小时天气:<br>';
foreach($result['hourly'] as $hourly)
{
echo $hourly['time'].' '.$hourly['weather'].' '.$hourly['temp'].' '.$hourly['img']. '<br>';
}
这里面有一个平台封装好的接口_curlOpen_,代码地址在 www.jisuapi.com/code/694
这里贴出来,下面就是这个文件。
require_once ‘curl.func.php’;
<?php
/**
* 使用:
* echo curlOpen('https://www.baidu.com');
*
* POST数据
* $post = array('aa'=>'ddd','ee'=>'d')
* 或
* $post = 'aa=ddd&ee=d';
* echo curlOpen('https://www.baidu.com',array('post'=>$post));
* @param string $url
* @param array $config
*/
function curlOpen($url, $config = array())
{
$arr = array('post' => false,'referer' => $url,'cookie' => '', 'useragent' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; customie8)', 'timeout' => 20, 'return' => true, 'proxy' => '', 'userpwd' => '', 'nobody' => false,'header'=>array(),'gzip'=>true,'ssl'=>false,'isupfile'=>false);
$arr = array_merge($arr, $config);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, $arr['return']);
curl_setopt($ch, CURLOPT_NOBODY, $arr['nobody']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $arr['useragent']);
curl_setopt($ch, CURLOPT_REFERER, $arr['referer']);
curl_setopt($ch, CURLOPT_TIMEOUT, $arr['timeout']);
//curl_setopt($ch, CURLOPT_HEADER, true);//获取header
if($arr['gzip']) curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
if($arr['ssl'])
{
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
if(!empty($arr['cookie']))
{
curl_setopt($ch, CURLOPT_COOKIEJAR, $arr['cookie']);
curl_setopt($ch, CURLOPT_COOKIEFILE, $arr['cookie']);
}
if(!empty($arr['proxy']))
{
//curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt ($ch, CURLOPT_PROXY, $arr['proxy']);
if(!empty($arr['userpwd']))
{
curl_setopt($ch,CURLOPT_PROXYUSERPWD,$arr['userpwd']);
}
}
//ip比较特殊,用键值表示
if(!empty($arr['header']['ip']))
{
array_push($arr['header'],'X-FORWARDED-FOR:'.$arr['header']['ip'],'CLIENT-IP:'.$arr['header']['ip']);
unset($arr['header']['ip']);
}
$arr['header'] = array_filter($arr['header']);
if(!empty($arr['header']))
{
curl_setopt($ch, CURLOPT_HTTPHEADER, $arr['header']);
}
if ($arr['post'] != false)
{
curl_setopt($ch, CURLOPT_POST, true);
if(is_array($arr['post']) && $arr['isupfile'] === false)
{
$post = http_build_query($arr['post']);
}
else
{
$post = $arr['post'];
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$result = curl_exec($ch);
//var_dump(curl_getinfo($ch));
curl_close($ch);
return $result;
}
这样我们就得到了天气预报小程序的所需要的数据。