1、前几天网上看到的,于是自己小改了一下,更换了天气查询的接口,当作练习一下node。

2、收获挺大的,捣鼓了一天,终于学会了发布npm包。

3、接下来,就介绍一下这个 mini-tianqi 的主要代码及实现。

安装方法:

$ npm install mini-tianqi -g

使用方法:

$ mini-tianqi shanghai // 中文和中文拼音都可以

源代码:https://github.com/tangxu2424/mini-tianqi

希望大家star一下,算是对我的鼓励哈


1、天气接口

我们使用心知天气的逐日天气预报接口:

https://api.seniverse.com/v3/weather/daily.json?key=your_api_key&start=0&days=3&location=

location参数: 可以允许很多种类型:

1、城市中文名,

2、城市拼音/英文,

3、ip地址 等等

start和days参数: 代表起始时间和需要从起始时间返回的天数

返回结果及具体参数,参考:https://www.seniverse.com/doc#now

2、核心代码

mini-tianqi

#!/usr/bin/env node

var colorful = require("colorful");
colorful.toxic(); //Let's posion the string object, just like colors does:'hello'.red
var package = require("../package.json");
//node mini-tianqi -h
//node mini-tianqi abcd mdzz
var param = process.argv[2];
if(process.argv.length > 3 || (param && param.toUpperCase() == "-H")){
console.log('tianqi ~ ' + package.version.green);
console.log(package.description.grey);
console.log(" $ ".cyan + "mini-tianqi 上海");
console.log(" $ ".cyan + "mini-tianqi shanghai");
return;
}
//如果有城市名这个参数,或者没有城市名这个参数则调用index.js的函数
//node mini-tianqi shanghai
//node mini-tianqi
var tianqi = require("../src/index");
tianqi(param);

1、第一行代码很关键,就是让此文件用node命令来执行,install以后可直接用mini-tianqi命令。

2、图片中命令行的字体颜色就是用了colorful这个包

3、根据参数数量来显示提示语或调用主函数显示天气

index.js

var request = require("request");
var config = require("../config");
var print = require("./print"); module.exports = function (word) {
if (word) {
getDataByCityName(word);
} else {//没有输入城市名则默认根据读取当前城市的天气
request.get(config.ip.url, function (error, response, body) {
var ipResult = JSON.parse(body);
getDataByCityName(ipResult.ip);
});
}
}; function getDataByCityName(word) {
word = encodeURIComponent(word);//可把字符串作为 URI 组件进行编码
var options = {
url: config.weather.url + word,
};
request.get(options.url, function (error, response, body) {
//console.log(body);
if (!error && response.statusCode == 200) {
print.print(JSON.parse(body));
}
});
}

这两段代码其实很简单,就是用request做请求,

第一段是获取你当前所在城市的ip,http://whois.pconline.com.cn/ipJson.jsp?json=true

第二段是根据城市ip或者名称获取天气json

其实可以不用请求获取当前所在城市的ip地址:

“ip”两个字母 自动识别请求IP地址,例如:location=ip

print.js

exports.print = function (data) {
if (data) {
//console.log(data.results[0].location);
printToday(data.results[0].location, data.results[0].daily[0]);
printForecast(data.results[0].daily);
} else {
console.log(data.errMsg.red);
}
};
function printToday(city,today) {
console.log("\n " + city.name.cyan.bold+"今日天气".cyan.bold)
var todayStr = "\n "+today.date.bold + "白天 ".bold + today.text_day.green + " 晚上 ".bold + today.text_night.green;
todayStr += " 最低温度 " + today.low.cyan;
todayStr += " 最高温度 " + today.high.red;
todayStr += " 风力 " + today.wind_scale.yellow;
todayStr += "\n";
console.log(todayStr);
}
function printForecast(forecast) {
console.log( "\n"+" 未来两天预报~".cyan.bold);
forecast.forEach(function (data,index) {
if(index<1){return false};
var str = "\n " + data.date.bold + "白天 ".bold + data.text_day.green + " 晚上 ".bold + data.text_night.green;
str += " 最低温度 " + data.low.cyan;
str += " 最高温度 " + data.high.red;
str += " 风力 " + data.wind_scale.yellow;
str += "\n";
console.log(str);
});
}

这段代码很简单,就是打印内容的排版,对返回天气json的解析拼接

3、总结一下

这个迷你天气算是我这个node菜鸟的小练习,不算是完全原创,有模仿之嫌。

主要的收获是学会了怎么发布npm包,还涉及到了Travis-cipackage.json的配置

下个目标:做一个vue的插件,然后发布到npm,fighting~

基于node的cmd迷你天气查询工具的更多相关文章

  1. 认识Web前端、Web后端、桌面app和移动app新开发模式 - 基于Node.js环境和VS Code工具

    认识Web.桌面和移动app新开发模式 - 基于Node.js环境和VS Code工具 一.开发环境的搭建(基于win10) 1.安装node.js和npm 到node.js官网下载安装包(包含npm ...

  2. 基于node和npm的命令行工具——tive-cli

    前端开发过程中经常会用到各种各样的脚手架工具.npm全局工具包等命令行工具,如:Vue脚手架@vue/cli.React脚手架create-react-app.node进程守卫工具pm2.本地静态服务 ...

  3. 基于node实现一个简单的脚手架工具(node控制台交互项目)

    实现控制台输入输出 实现文件读写操作 全原生实现一个简单的脚手架工具 实现vue-cli2源码 一.实现控制台输入输出 关于控制台的输入输出依然是基于node进程管理对象process,在proces ...

  4. TDSQL“相似查询工具MSQL+”入选VLDB论文

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 作者介绍:王晓宇,腾讯数据库TDSQL团队成员,目前参与TDSQL数据库内核研发工 ...

  5. 【转】根据中国气象局提供的API接口实现天气查询

    本文转载自 老三 的 三叶草 中国气象局提供了三个天气查询的API接口: [1]http://www.weather.com.cn/data/sk/101190101.html [2]http://w ...

  6. C# Winform实现手机号码归属地查询工具

    摘要:本文介绍使用C#开发基于Winform的手机号码归属地查询工具,并提供详细的示例代码供参考. 一.需求描述 输入正确的手机号码,查询该号码的归属地和其他相关信息. 二.需求分析 1.实现手机号码 ...

  7. 基于nodejs的DNS查询工具

    开始这个实例之前,我们简单谈一下Node.js吧,Node.js是一个由JavaScript书写而成的强大Web开发框架,它让开发强壮的.伸缩性良好的服务器端Web应用变得更加简单.容易.这种技术诞生 ...

  8. 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)

    这个很简单,在集群机器里,选择就是了,本来自带就有Impala的. 扩展博客 给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)

  9. 给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)

    不多说,直接上干货! Impala和Hive的关系(详解) 扩展博客 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解) 参考 horton ...

随机推荐

  1. python+scrapy环境搭建步骤描述

    Python3(3.5.4)搭建爬虫系统步骤描述: 1.下载python安装包,路径:https://www.python.org/downloads/windows/  选择3.5.4版本64位的安 ...

  2. ORA-01122: 数据库文件 1 验证失败

    1.SQL>shutdown abort 如果数据库是打开状态,强行关闭 2.SQL>sqlplus / as sysdba 3.SQL>startupORACLE 例程已经启动. ...

  3. Mysql 表转换成 Sqlite表

    目前的转换仅仅支持对没有外键的Mysql数据表 准备: 下载安装 Sqlite Expert 软件 一 获取Mysql中的.sql文件,获取过程省略可以直接导出sql文件 二 在Sqlite Expe ...

  4. echarts 地图的背景色和各省颜色配置以及地图饼图联动

    myChart.on(ecConfig.EVENT.MAP_SELECTED, function (param) { var selected = param.selected; var str = ...

  5. C# Json 序列化大全--任我行

    public class JsonHelper { /// <summary> /// 将Model转换为Json字符串 /// </summary> /// <type ...

  6. 剑指Offer - 九度1518 - 反转链表

    剑指Offer - 九度1518 - 反转链表2013-11-30 03:09 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试 ...

  7. Vbs 测试程序三

    一段被写滥了的VBS代码 值得一提的是感兴趣的同学可以把 chr(13) + chr(13) + chr(13) 改为chr(11) + chr(11) + chr(11) 不赘述 on error ...

  8. 《数据结构》C++代码 线性表

    线性表,分数组和链表两种(官方名称记得是叫顺序存储和链式存储).代码里天天用,简单写写. 首先是数组,分静态.动态两种,没什么可说的,注意动态的要手动释放内存就好了. 其次是链表,依旧分静态.动态.课 ...

  9. win7 64位如何共享XP上的打印机?

    这个问题看似很简单,但是一旦你遇到了,就会发觉不是想象的那么简单. 除了网上能搜到的一些设置之外,这里还有几个诀窍: 1.首先你必须准备你的打印机的64位驱动程序 2.你在win7上必须采用添加本地打 ...

  10. 能ping通网络,也正常连接,就是打不开网页,无法访问网络

    netsh winsock reset命令,作用是重置 Winsock 目录.如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock reset命令 ...