NodeJs 调用百度天气API

Nodejs cyanprobe 9年前 (2015-12-27) 7579次浏览 已收录 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文件:

  1.  var express = require('express');
  2. var router = express.Router();
  3. var request = require('request');
  4. //构建一个函数用来查询返回信息。
  5. function tRequest(cityName, callback) {
  6. request.get(
  7. {
  8. url: 'http://apistore.baidu.com/microservice/cityinfo?cityname='+ encodeURI(cityName),
  9. }, function (error, response, body) {
  10. if (!error && response.statusCode == 200) {
  11. var cityCode = JSON.parse(body).retData.cityCode;
  12. if (JSON.parse(body).errNum=="0") {
  13. var querya= {
  14. url: 'http://apis.baidu.com/apistore/weatherservice/recentweathers?cityname=' + encodeURI(cityName)+ '&cityid=' + cityCode,
  15. headers: {
  16. "apikey":"d10ace00d1d553c6ac00b20c8076323e"
  17. }
  18. }
  19. } else {
  20. console.log('城市代号请求错误!')
  21. }
  22. request.get(querya, function (error, response, body) {
  23. if ((JSON.parse(body).errNum) == "0") {
  24. var queryb = JSON.parse(body).retData;
  25. console.log(queryb);
  26. var outCome = {
  27. "cityName": cityName,
  28. "data": queryb.today.date,
  29. "week": queryb.today.weak,
  30. "curTemp":queryb.today.curTemp,
  31. "fengxiang":queryb.today.fengxiang,
  32. "fengji": queryb.today.fengji,
  33. "hightemp": queryb.today.hightemp,
  34. "lowtemp": queryb.today.lowtemp,
  35. "Type": queryb.today.type,
  36. "index": queryb.today.index[0]
  37. }
  38. callback(outCome);
  39. } else {
  40. console.log('城市天气请求错误')
  41. }
  42. });
  43. }
  44. });
  45. }
  46. /* GET home page. */
  47. router.get('/', function (req, res) {
  48. var cityName = '章丘';
  49. tRequest(cityName, function (data) {
  50. var resource = data;
  51. res.render('index',resource);
  52. });
  53. });
  54. module.exports = router;

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

index.ejs (VIEW)前台文件:

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

  1. <h1 style="margin-top:2px;margin-left:60px;"><%= cityName %></h1>
  2. <div style="border:3px solid red; height:300px;width:700px;margin-top:2px;margin-left:60px;">
  3. <h1><%= data %></h1>
  4. <%= week %>
  5. 平均气温: <%= curTemp %>
  6. <%= fengxiang %>
  7. <%= fengji %></br>
  8. 最高气温 : <%= hightemp %>
  9. 最低气温: <%= lowtemp %>
  10. <%= Type %></br>
  11. <%= index.name %>
  12. <%= index.details %>
  13. </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. 厉害厉害