亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Nodejs獲取bing每日?qǐng)D片

 更新時(shí)間:2023年12月27日 08:52:39   作者:我不愛(ài)吃魚(yú)啦  
這篇文章主要為大家詳細(xì)介紹了如何使用Nodejs獲取bing每日?qǐng)D片,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有興趣的小伙伴可以學(xué)習(xí)一下

我準(zhǔn)備做成一個(gè)接口的形式,訪問(wèn)就直接返回當(dāng)日的bing圖片。當(dāng)然這個(gè)圖片得適應(yīng)于更多場(chǎng)景~

所以,我對(duì)他做了一下設(shè)計(jì):

  • 可以自定義寬高
  • 也可以傳入size,這個(gè)size可以理解為等比例縮放。
  • 會(huì)影響圖片大小

由此得到了一個(gè)注釋

/** 
 * @description 獲取必應(yīng)圖片
 * @param {Number} req.body.w 寬度
 * @param {Number} req.body.h 高度
 * @param {Number} req.body.size 圖片大小
 * @returns {BinaryData} 圖片二進(jìn)制
 */

開(kāi)始擼代碼

這里我選擇了比較方便的express

mkdir bing && cd bing && pnpm init
pnpm add express

# 安裝node-fetch為我們做請(qǐng)求
pnpm add node-fetch

# 還需要安裝一下sharp對(duì)我們的圖片進(jìn)行處理
pnpm add sharp

啟動(dòng)express

做了一下簡(jiǎn)單的router分離

// app.js

import 'dotenv/config';
import express from "express"
import cors from "cors"
import imagesRouter from './src/router/images.js'

const app = express();
app.use(cors());

app.use("/images", imagesRouter);

app.get("/", (req, res) => { 
  res.send("Hello World");
})

app.listen(process.env.RUN_TIME_PORT, () => { 
  console.log(`Server running on port ${process.env.RUN_TIME_PORT}`);
})

到這里 我們的express服務(wù)器已經(jīng)啟動(dòng)成功了~

useBing

其實(shí)bing的每日?qǐng)D片,bing提供了API,也就是

https://global.bing.com/HPImageArchive.aspx?format=js&idx=0&n=9&pid=hp&FORM=BEHPTB&uhd=1&uhdwidth=3840&uhdheight=2160&setmkt=%25s&setlang=en

訪問(wèn)他,獲取數(shù)組中的第一個(gè),就是今天的圖片哦~

// 請(qǐng)求
    const base = "https://www.bing.com";
    const reqUrl = base + '/HPImageArchive.aspx?format=js&idx=0&n=9&pid=hp&FORM=BEHPTB&uhd=1&uhdwidth=3840&uhdheight=2160&setmkt=%s&setlang=en';
    const data = await fetch(reqUrl)
    const json = await data.json()

分析一下返回的json

// 請(qǐng)求
    const base = "https://www.bing.com";
    const reqUrl = base + '/HPImageArchive.aspx?format=js&idx=0&n=9&pid=hp&FORM=BEHPTB&uhd=1&uhdwidth=3840&uhdheight=2160&setmkt=%s&setlang=en';
    const data = await fetch(reqUrl)
    const json = await data.json()

需要的其實(shí)就url這個(gè)鏈接~。

這個(gè)鏈接會(huì)直接返回一個(gè)圖片。

所以處理一下這個(gè)地方的BASE_URL='https://www.bing.com'+url

我們就得倒了圖片的資源路徑~

下載

當(dāng)我們已經(jīng)得倒了資源路徑,就繼續(xù)下載

export async function downloadImage(src = '',name='bing.jpg') {
  const response = await fetch(src);
  const buffer = await response.buffer();
  fs.writeFileSync(BING_PATH(name), buffer)
}
  • src就是圖片的資源路徑
  • name圖片存儲(chǔ)路徑

但是這個(gè)地方有個(gè)問(wèn)題,我們總不能每次都去下載吧?

所以,就需要做一下判斷。如果這個(gè)圖片已經(jīng)下載好了,那么就直接返回我們下載好的圖片~

判斷文件是否已經(jīng)存在

我這里是直接用當(dāng)前日期做的文件名,比較方便。 我們只需要遍歷一下,存儲(chǔ)bing文件夾下的文件,是否有以當(dāng)前日期開(kāi)頭的文件就可以啦。

export function bingIsExist() { 
  const today = dayjs().format("YYYY-MM-DD");
  const data = fs.readdirSync(BASE_PUBLIC_DIR + '/bing')
  const isExist = some(data, v => v.startsWith(`${today}`))
  return isExist
}

完整的useBing

/**
 * 下載bing圖片
 * 1. 判斷今天的圖片是否已經(jīng)下載過(guò)了
 * 2. 如果沒(méi)有下載過(guò),那么就下載
 * 3. 如果下載過(guò)了,就直接返回本地文件
 * @returns {BinaryData} 圖片二進(jìn)制
 */
export async function useBing() {
  const canFind = bingIsExist()
  const toDay = dayjs().format("YYYY-MM-DD");
  if (!canFind) {
    const base = "https://www.bing.com";
    const reqUrl = base + '/HPImageArchive.aspx?format=js&idx=0&n=9&pid=hp&FORM=BEHPTB&uhd=1&uhdwidth=3840&uhdheight=2160&setmkt=%s&setlang=en';
    const data = await fetch(reqUrl)
    const json = await data.json()
    const url = json.images[0].url
    const realURL = base + url
    await downloadImage(realURL, toDay + ".jpg")
  }
  const data = fs.readFileSync(BING_PATH(toDay + ".jpg"))
  return data
}

接口返回

當(dāng)我們工具函數(shù)都寫(xiě)完了,那么就需要在接口中開(kāi)始調(diào)用,完成這個(gè)接口。

router.get("/bing", async (req, res) => {
  const { w, h, size } = req.query // 需要使用body-paser哦
  const blob = await useBing()
  res.setHeader("Content-Type", "image/jpeg")
  // 中間使用sharp處理圖片。就不多贅述,自行編寫(xiě)~很簡(jiǎn)單
  ...
  res.send(blob)
})

測(cè)試一下

還需注意一點(diǎn),不同區(qū)域獲取到的圖片會(huì)有所不同。需要自己去處理,根據(jù)訪問(wèn)ip去定位,最后修改api中的區(qū)域。

到此這篇關(guān)于使用Nodejs獲取bing每日?qǐng)D片的文章就介紹到這了,更多相關(guān)Nodejs獲取bing圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Node錯(cuò)誤處理筆記之挖坑系列教程

    Node錯(cuò)誤處理筆記之挖坑系列教程

    因?yàn)閚odejs是單線程的,所以一旦發(fā)生錯(cuò)誤或異常,如果沒(méi)有及時(shí)被處理整個(gè)系統(tǒng)就會(huì)崩潰。下面這篇文章主要給大家介紹了關(guān)于Node錯(cuò)誤處理筆記之挖坑系列的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2018-06-06
  • 十大 Node.js 的 Web 框架(快速提升工作效率)

    十大 Node.js 的 Web 框架(快速提升工作效率)

    Node.js 系統(tǒng)含有多種不同的結(jié)構(gòu),如 MVC、全棧、REST API 和生成器等。這些結(jié)構(gòu)不僅提升了 Web 應(yīng)用的開(kāi)發(fā)效率,也優(yōu)化了開(kāi)發(fā)過(guò)程。在這里,我們收集整理了十個(gè)高效的 Node.js 框架,希望對(duì)你有幫助。
    2017-06-06
  • nodejs服務(wù)內(nèi)存泄露排查過(guò)程和優(yōu)化方法

    nodejs服務(wù)內(nèi)存泄露排查過(guò)程和優(yōu)化方法

    在開(kāi)發(fā)和部署Node.js應(yīng)用程序時(shí),內(nèi)存泄露是一個(gè)常見(jiàn)的挑戰(zhàn),本文將探討如何對(duì)于一個(gè)陌生項(xiàng)目進(jìn)行內(nèi)存排查和優(yōu)化的方法,文章通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Node.JS中快速掃描端口并發(fā)現(xiàn)局域網(wǎng)內(nèi)的Web服務(wù)器地址(80)

    Node.JS中快速掃描端口并發(fā)現(xiàn)局域網(wǎng)內(nèi)的Web服務(wù)器地址(80)

    在 Node.JS 中進(jìn)行端口掃描還是比較方便的,一般會(huì)有廣播和輪詢兩種方式。下文重點(diǎn)給大家介紹node.js 掃描端口并發(fā)現(xiàn)局域網(wǎng)內(nèi)的web服務(wù)器地址的方法,一起看看吧
    2017-09-09
  • 基于Node.js的http模塊搭建HTTP服務(wù)器

    基于Node.js的http模塊搭建HTTP服務(wù)器

    這篇文章主要為大家介紹了基于Node.js的http模塊來(lái)搭建HTTP服務(wù)器的示例過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • Node.js如何實(shí)現(xiàn)注冊(cè)郵箱激活功能 (常見(jiàn))

    Node.js如何實(shí)現(xiàn)注冊(cè)郵箱激活功能 (常見(jiàn))

    今天了解了node如何實(shí)現(xiàn)郵箱激活功能,這個(gè)功能非常常見(jiàn),當(dāng)我們注冊(cè)一個(gè)賬號(hào)時(shí),肯定會(huì)有這步,下面看下如何實(shí)現(xiàn)這個(gè)功能
    2017-07-07
  • node.js中的buffer.copy方法使用說(shuō)明

    node.js中的buffer.copy方法使用說(shuō)明

    這篇文章主要介紹了node.js中的buffer.copy方法使用說(shuō)明,本文介紹了buffer.copy的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 關(guān)于npm主版本升級(jí)及其相關(guān)知識(shí)點(diǎn)總結(jié)

    關(guān)于npm主版本升級(jí)及其相關(guān)知識(shí)點(diǎn)總結(jié)

    npm是Node.js默認(rèn)的包管理器,以javascript?編寫(xiě)的軟件包管理系統(tǒng)用于分享和使用代碼,下面這篇文章主要給大家介紹了關(guān)于npm主版本升級(jí)及其相關(guān)知識(shí)點(diǎn)總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 利用Node.js和MySQL實(shí)現(xiàn)創(chuàng)建API服務(wù)器

    利用Node.js和MySQL實(shí)現(xiàn)創(chuàng)建API服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了如何使用Node.js和MySQL創(chuàng)建API服務(wù)器的步驟,這也是從前端邁向全棧的一個(gè)開(kāi)始,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-01-01
  • Node.js圖片處理庫(kù)sharp的使用

    Node.js圖片處理庫(kù)sharp的使用

    這篇文章主要介紹了Node.js圖片處理庫(kù)sharp的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評(píng)論