利用pm25.in接口实现在公众号里获取输入城市的空气质量

写在前面

之前偶然看到pm25.in这个网站,发现免费提供了API,真是很不错,还提供了用于测试的公共的AppKey,但试了下老是提示次数已达上限,于是申请了私有AppKey,等了两天没见回邮件就没注意了,没想到今天一看原来已经给我发了。不多说,开始动手。

开始

  1. 实现目标: 在公众号中输入城市名(包括汉字和拼音),得到空气质量情况
  2. 编程语言:依旧是nodejs,原因自然是有丰富、方便的包
  3. 思路:单独写一个js文件,然后提供接口在公众号的代码中调用;使用superagent来发送get请求,以回调函数形式返回数据。

代码

1 pm.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var superagent = require('superagent');
module.exports = PM;

function PM(){
};

PM.prototype.get_pm2_5 = function(city, callback) {
var result;
var pm2_5_url = 'http://www.pm25.in/api/querys/pm2_5.json?city=' + city.toLowerCase().replace(/\s+/g,'') + '&token=yourtoken';
superagent.get(pm2_5_url).end(function(err,res){
if(err) {
result = '未能从pm25.in取到数据,可能是该网站已经挂了!';
return callback(result);
}
var data = JSON.parse(res.text);

var avg = data[data.length-1];
if(!avg) {
result = '未能获取该城市的数据,可能原因为pm25.in暂未收录该城市数据,或者是输入的城市的中文或者拼音错误';
return callback(result);
}
var primary = avg.primary_pollutant;
if(primary == '') primary = '无';

var result = '综合空气质量: ' + avg.quality + '\n首要污染物: ' + primary + '\n\n下面是' + avg.area + '的各个监测点的情况——\n';
for(var i in data){
if(i == data.length-1) break;
var o = data[i];
var position_name = o.position_name;
if(position_name == null || position_name == '' || position_name == 'null') continue;
var quality = o.quality;
if(quality == null || quality == '' || quality == 'null') quality = '未获取数据';
result += position_name + ': ' + quality + '\n';
}
result += '\n-发布时间: ' + avg.time_point.replace(/[T,Z]/g," ");
return callback(result);
});
};
2 test.js(调用)
1
2
3
4
5
6
var PM = require('./pm');
var pm = new PM();

pm.get_pm2_5('Beijing',function(res) {
console.log(res);
});

欢迎测试

小鹏 wechat
公众号:数据Man
0%