成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

開發(fā)一個(gè)天氣預(yù)報(bào) npm 包

Winer / 2571人閱讀

摘要:新建項(xiàng)目使用快速生成一個(gè)來創(chuàng)建一個(gè)新的項(xiàng)目封裝腳本新建一個(gè)包含我們的腳本說明這是一個(gè)可執(zhí)行的應(yīng)用在中新建字段,用于存放一個(gè)可執(zhí)行文件接著執(zhí)行把這個(gè)字段復(fù)制到的全局模塊安裝文件夾內(nèi),并創(chuàng)建符號(hào)鏈接,軟鏈接,也就是將的路徑加入環(huán)境變量中去運(yùn)行

新建項(xiàng)目

使用 npm init 快速生成一個(gè) package.json 來創(chuàng)建一個(gè)新的 npm 項(xiàng)目:

{
  "name": "happyday",
  "version": "1.0.5",
  "description": "Happy every day",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [
    "Nodejs",
    "JavaScript",
    "bash",
    "shell"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/HuangXiZhou/happyday.git"
  },
  "author": "[email protected]",
  "license": "MIT"
}
封裝腳本

新建一個(gè) index.js 包含我們的腳本

#!/usr/bin/env node // 說明這是一個(gè)可執(zhí)行的應(yīng)用

console.log("Happy everyday!")

package.json 中新建 bin 字段,用于存放一個(gè)可執(zhí)行文件

"bin": {
    "happyday": "./index.js"
 }

接著執(zhí)行 npm i -g && npm linkhappyday 這個(gè)字段復(fù)制到 npm 的全局模塊安裝文件夾 node_modules 內(nèi),并創(chuàng)建符號(hào)鏈接(symbolic link,軟鏈接),也就是將 index.js 的路徑加入環(huán)境變量 PATH 中去

運(yùn)行 happyday

可以看到我們已經(jīng)成功打印出 Happy everyday!,現(xiàn)在我們可以開始開發(fā) npm 包了

解析命令行參數(shù)

安裝 tj 大神的commander: npm i commander -S

The complete solution for node.js command-line interfaces, inspired by Ruby"s commander.

安裝 chalk 使得你的命令行更漂亮: npm i chalk -S

現(xiàn)在讓我們寫一下 demo 測(cè)試一下:

#! /usr/bin/env node

const program = require("commander")
const chalk = require("chalk") 

program
    .command("weather") // 命令行指令
    .alias("w") // 定義別名
    .description(chalk.green("Get weather forecast ;)")) // 這行文字變綠~
    // 注冊(cè)一個(gè) `callback` 函數(shù)
    .action(option => { 
        console.log("biubiubiu~")
    })
    // 生成幫助信息
    .on("--help", () => { 
        console.log("  Examples:")
        console.log("")
        console.log("$ happyday weather")
        console.log("$ happyday w")
    })
program.parse(process.argv) // 解析命令行

執(zhí)行一下 happyday -h

  Usage: happyday [options] [command]


  Options:

    -h, --help  output usage information


  Commands:

    weather|w   Get weather forecast ;)

這樣第一步就完成了,可以正式開發(fā)我們的 天氣預(yù)報(bào) 小玩具了

使用百度地圖 API 獲取天氣預(yù)報(bào)

先在百度開發(fā)者中心注冊(cè)一個(gè) KEY

因?yàn)閼?.. 所以我直接引入 axios 實(shí)行 GET 請(qǐng)求:

const URL_IP = "http://api.map.baidu.com/location/ip"
const KEY = { ak: "..." }

...

.action(option => {
  axios.get(URL_IP, {
    params: KEY
  })
  .then(res => {
      console.log(res)
  })
  .catch(error => {
    console.log(chalk.red("emmmmm... I don"t know what happened."))
  })
})

...

先獲取用戶所在城市,再根據(jù)所在城市獲取用戶所在地的天氣預(yù)報(bào)

const URL_FORECAST = "http://api.map.baidu.com/telematics/v3/weather"

const KEY = { ak: "..." }

let getweatherModel = {
    location: "",
    output: "json",
    ak: KEY.ak,
}

...

getweatherModel.location = res.data.content.address_detail.city
axios.get(URL_FORECAST, {
  params: getweatherModel
})
.then(res => {
  if(res.status !== 200) {
    console.log(chalk.red("Whoops!!! There is something wrong with your network."))
  } else {
    let resource = res.data
    if(resource.status !== "success") {
      console.log(chalk.red("emmmmm... I don"t know what happened."))
    } else {
      console.log(resource)
    }
  }
})
.catch(error => {
  console.log(chalk.red("emmmmm... I don"t know what happened."))
})

...

獲取到數(shù)據(jù)之后,讓我們處理一下數(shù)據(jù)

`城市: ${chalk.green(resource.results[0].currentCity)} ??`

打印天氣預(yù)報(bào)

resource.results[0].weather_data.forEach(item => {
  console.log(
    `${item.date.slice(0, 2)}: ${chalk.green(item.weather)} | ${chalk.green(item.temperature)}`
  )
}, this)

這樣,我們的小玩具初步成型

然而... 百度地圖 API 只支持國(guó)內(nèi)的天氣預(yù)報(bào),所以像我們這些海外黨還是需要一些其他的手段

獲取海外城市天氣預(yù)報(bào)

我選擇的是 Yahoo Weather API,因?yàn)楹芎闷嫠麄兗掖竺ΧΦ?YQL ...

引入 lodash,inquireryql 這三個(gè)庫(kù)

先上代碼

let config = _.assign({
    cityName: ""
}, option)

let promps = []

if(config.cityName !== "string") {
  promps.push({
    type: "input",
    name: "cityName",
    message: "Input your cityname:",
    validate: input => {
      if(!input) {
        return chalk.red("You should input something here...")
      }
      return true
    }
  })
}
inquirer.prompt(promps).then(answers => {
  var query = new YQL(`select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="${answers.cityName}")`)
  query.exec((err, data) => {
    if(err) {
      console.log(chalk.red("emmmmm... I don"t know what happened."))
    } else {
      if(!data.query.count) {
        console.log(chalk.red("Please... Enter the correct city name."))
      } else {
        console.log(data)
      }
    }
  })
})

先來說說 inquirer 這個(gè)庫(kù)

功能簡(jiǎn)介:

input–輸入

validate–驗(yàn)證

list–列表選項(xiàng)

confirm–提示

checkbox–復(fù)選框等等

YQL 可謂是有些驚人,它可以像 SQL 那樣設(shè)計(jì),然后整合至 URL 上,確實(shí)有點(diǎn)奇葩

這樣,我們海外黨就也可以使用 happyday

發(fā)布 npm 包

這個(gè)很簡(jiǎn)單啦

一步一步來:

在 npm 官網(wǎng)上 注冊(cè)一個(gè)賬號(hào)

bash 中輸入 npm login 登錄

npm publish 一個(gè)回車鍵搞定(每次 publish 之前都需要改一下包的版本號(hào),不然報(bào)錯(cuò))

就這樣我們就擁有了自己的第一個(gè) npm 包

本文代碼均在 https://github.com/HuangXiZhou/happyday 歡迎各位 Star

使用 happyday

npm i happyday -g && happday w 即可

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89423.html

相關(guān)文章

  • 微信天氣小程序教程

    摘要:前言這是一個(gè)微信天氣小程序開發(fā)教程,簡(jiǎn)單易學(xué),半天即可完成。報(bào)錯(cuò)不能為空由于位置服務(wù)使用的騰訊位置服務(wù)微信小程序,請(qǐng)自行申請(qǐng)自己的密鑰。審核通過后授權(quán)給當(dāng)前要使用的微信小程序還需將微信小程序域名添加到白名單。 前言 這是一個(gè)微信天氣小程序開發(fā)教程,簡(jiǎn)單易學(xué),半天即可完成??筛鶕?jù)天氣不同,配置不同的背景圖片。初始默認(rèn)實(shí)時(shí)定位當(dāng)前位置天氣,也可搜索查詢各地區(qū)天氣。具體實(shí)現(xiàn)效果如下:show...

    PingCAP 評(píng)論0 收藏0
  • 尚學(xué)堂 react -后臺(tái)管理系統(tǒng)開發(fā)流程

    摘要:項(xiàng)目開發(fā)準(zhǔn)備描述項(xiàng)目技術(shù)選型接口接口文檔測(cè)試接口啟動(dòng)項(xiàng)目開發(fā)使用腳手架創(chuàng)建項(xiàng)目開發(fā)環(huán)境運(yùn)行生產(chǎn)環(huán)境打包運(yùn)行管理項(xiàng)目創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)創(chuàng)建本地倉(cāng)庫(kù)配置將本地倉(cāng)庫(kù)推送到遠(yuǎn)程倉(cāng)庫(kù)在本地創(chuàng)建分支并推送到遠(yuǎn)程如果本地有修改新的同事克隆倉(cāng)庫(kù)如果遠(yuǎn)程修 day01 1. 項(xiàng)目開發(fā)準(zhǔn)備 1). 描述項(xiàng)目 2). 技術(shù)選型 3). API接口/接口文檔/測(cè)試接口 2. 啟動(dòng)項(xiàng)目開發(fā) 1). 使用react...

    lemon 評(píng)論0 收藏0
  • WebService就是這么簡(jiǎn)單

    摘要:它使用方式,接收和響應(yīng)外部系統(tǒng)的某種請(qǐng)求?;仡櫸覀?cè)趯W(xué)習(xí)基礎(chǔ)網(wǎng)絡(luò)編程章節(jié)已經(jīng)知道了這么一個(gè)連接了。使用指定名稱的命名空間。名詞簡(jiǎn)單對(duì)象訪問協(xié)議作為一個(gè)基于語言的協(xié)議用于有網(wǎng)上傳輸數(shù)據(jù)。以的根元素出現(xiàn)。代理這么一個(gè)概念就更加清晰了。 WebService介紹 首先我們來談一下為什么需要學(xué)習(xí)webService這樣的一個(gè)技術(shù)吧.... 問題一 如果我們的網(wǎng)站需要提供一個(gè)天氣預(yù)報(bào)這樣一個(gè)需求...

    SwordFly 評(píng)論0 收藏0
  • 初學(xué)NodeJS(三)

    摘要:中的模塊在中有模塊的概念,類似于語言中的頭文件,都是函數(shù)庫(kù)。靈活運(yùn)用模塊可以非常便捷的操作后端操作前端。最好在運(yùn)行文件的同個(gè)文件夾下下載方便使用,也可以在上級(jí)文件夾下載全局調(diào)用。他可以為文檔增刪改查。 nodeJS中的模塊 在nodeJS中有模塊的概念,類似于C語言中的頭文件,都是函數(shù)庫(kù)。靈活運(yùn)用模塊可以非常便捷的操作后端操作前端。而在nodeJS中引入模塊要使用require();這...

    寵來也 評(píng)論0 收藏0
  • 中華萬年歷得到天氣接口

    摘要:抓包中華萬年歷得到天氣接口首先,我說一說我遇到這個(gè)需求的場(chǎng)景。甲方要求可以按照登陸地顯示當(dāng)?shù)靥鞖?。首先,介紹一下中國(guó)天氣網(wǎng)的以及規(guī)范。固定通過城市名字獲得天氣數(shù)據(jù),數(shù)據(jù)。這個(gè)功能就是簡(jiǎn)單的利用從中華萬年歷的接口拿到數(shù)據(jù)。 抓包中華萬年歷得到天氣接口 首先,我說一說我遇到這個(gè)需求的場(chǎng)景。我正在維護(hù)一個(gè)關(guān)于地方政府的政務(wù)后臺(tái)系統(tǒng)。甲方要求可以按照登陸地顯示當(dāng)?shù)靥鞖?。我分析了一下,這種功能應(yīng)...

    quietin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<