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

使用Nodejs獲取bing每日圖片

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

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

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

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

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

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

開始擼代碼

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

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

# 安裝node-fetch為我們做請求
pnpm add node-fetch

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

啟動express

做了一下簡單的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)啟動成功了~

useBing

其實(shí)bing的每日圖片,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

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

// 請求
    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

// 請求
    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è)鏈接會直接返回一個(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圖片存儲路徑

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

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

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

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

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)下載過了
 * 2. 如果沒有下載過,那么就下載
 * 3. 如果下載過了,就直接返回本地文件
 * @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ù)都寫完了,那么就需要在接口中開始調(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處理圖片。就不多贅述,自行編寫~很簡單
  ...
  res.send(blob)
})

測試一下

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

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

相關(guān)文章

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

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

    因?yàn)閚odejs是單線程的,所以一旦發(fā)生錯(cuò)誤或異常,如果沒有及時(shí)被處理整個(gè)系統(tǒng)就會崩潰。下面這篇文章主要給大家介紹了關(guān)于Node錯(cuò)誤處理筆記之挖坑系列的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧
    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)用的開發(fā)效率,也優(yōu)化了開發(fā)過程。在這里,我們收集整理了十個(gè)高效的 Node.js 框架,希望對你有幫助。
    2017-06-06
  • nodejs服務(wù)內(nèi)存泄露排查過程和優(yōu)化方法

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

    在開發(fā)和部署Node.js應(yīng)用程序時(shí),內(nèi)存泄露是一個(gè)常見的挑戰(zhàn),本文將探討如何對于一個(gè)陌生項(xiàng)目進(jìn)行內(nèi)存排查和優(yōu)化的方法,文章通過圖文介紹的非常詳細(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)行端口掃描還是比較方便的,一般會有廣播和輪詢兩種方式。下文重點(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模塊來搭建HTTP服務(wù)器的示例過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • Node.js如何實(shí)現(xiàn)注冊郵箱激活功能 (常見)

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

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

    node.js中的buffer.copy方法使用說明

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

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

    npm是Node.js默認(rèn)的包管理器,以javascript?編寫的軟件包管理系統(tǒng)用于分享和使用代碼,下面這篇文章主要給大家介紹了關(guān)于npm主版本升級及其相關(guān)知識點(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è)開始,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-01-01
  • Node.js圖片處理庫sharp的使用

    Node.js圖片處理庫sharp的使用

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

最新評論