NodeJs 调用百度天气API

Nodejs cyanprobe 8年前 (2015-12-27) 7035次浏览 已收录 6个评论

前言:

今天柴犬君又给本菜准备了一道题,nodeJS request 模块调用百度API并在前台进行渲染输出。经过一天的折腾终于折腾出来了,另外获得了新技能API调用。2015-12-27_213202

开始:

先百度一下,百度天气API,果断发现了了下图,百度支持开发者调试, 经过观察,我们需要先调用城市ID API获得城市的唯一IP然后带入通过自己的apikey加上城市name和城市ID就可以获得天气信息。
2015-12-27_211108
好了,知道我们需要什么了就可以动手了,由于我直接用了visual studio (装了个插件),之间新建个express 4 改个 ejs模版渲染引擎,好了直接到routes文件夹下载入index 路由文件写入。

index.js文件:

 var express = require('express');
var router = express.Router();
var request = require('request');
//构建一个函数用来查询返回信息。
function tRequest(cityName, callback) {
 request.get(
 {
 url: 'http://apistore.baidu.com/microservice/cityinfo?cityname='+ encodeURI(cityName),
 }, function (error, response, body) {
 if (!error && response.statusCode == 200) {
 var cityCode = JSON.parse(body).retData.cityCode;
 if (JSON.parse(body).errNum=="0") {
 var querya= {
 url: 'http://apis.baidu.com/apistore/weatherservice/recentweathers?cityname=' + encodeURI(cityName)+ '&cityid=' + cityCode,
 headers: {
 "apikey":"d10ace00d1d553c6ac00b20c8076323e"
 }
 }
 } else {
 console.log('城市代号请求错误!')
 }
 request.get(querya, function (error, response, body) {
 if ((JSON.parse(body).errNum) == "0") {
 var queryb = JSON.parse(body).retData;
 console.log(queryb);
 var outCome = {
 "cityName": cityName,
 "data": queryb.today.date,
 "week": queryb.today.weak,
 "curTemp":queryb.today.curTemp,
 "fengxiang":queryb.today.fengxiang,
 "fengji": queryb.today.fengji,
 "hightemp": queryb.today.hightemp,
 "lowtemp": queryb.today.lowtemp,
 "Type": queryb.today.type,
 "index": queryb.today.index[0]
 }
 callback(outCome);
 } else {
 console.log('城市天气请求错误')
 }
 });
 }
 });
}
/* GET home page. */
router.get('/', function (req, res) {
 var cityName = '章丘';
 tRequest(cityName, function (data) {
 var resource = data;
 res.render('index',resource);
 });
});
module.exports = router;

注意:第二次查询的时候要使用百度开发者appkey,写在头文件里,因为不能使用中文来查询必须进行转码所以使用encodURL();对中文进行处理,我们以json的方式获得信息,并在前台进行渲染。

index.ejs (VIEW)前台文件:

由于API提供的信息很多,甚至有各种建议,就不依次进行渲染了,反正能够实现的了,在调试过程中我们要充分使用console.log();来分析程序的执行

<h1 style="margin-top:2px;margin-left:60px;"><%= cityName %></h1>
<div style="border:3px solid red; height:300px;width:700px;margin-top:2px;margin-left:60px;">
<h1><%= data %></h1>
 <%= week %>
 平均气温: <%= curTemp %>
 <%= fengxiang %>
 <%= fengji %></br>
最高气温 : <%= hightemp %>
最低气温: <%= lowtemp %>
 <%= Type %></br>
 <%= index.name %>
 <%= index.details %>
</div>

后记:

OK,完成了这个目标了,可以正常输出渲染了,今天的任务圆满结束,今天自己写的东西比较多,但是回调仍然生一些,需要更加努力。


CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:NodeJs 调用百度天气API
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(6)个小伙伴在吐槽
  1. 厉害,是不是同样的原理可以实现来访者的ip来显示所在地的天气
  2. 夢幻辰風祝博主元旦快乐!
    姜辰2015-12-31 22:03 回复
  3. 看看!
    199728382016-01-05 09:38 回复
  4. 厉害厉害