最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2023年12月27日 08:52:39   作者:我不愛(ài)吃魚啦  
這篇文章主要為大家詳細(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)制
 */

開始擼代碼

這里我選擇了比較方便的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)前日期開頭的文件就可以啦。

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ù)都寫完了,那么就需要在接口中開始調(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處理圖片。就不多贅述,自行編寫~很簡(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.js中EJS 模板快速入門教程

    node.js中EJS 模板快速入門教程

    本篇文章主要介紹了EJS 模板快速入門學(xué)習(xí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • npm?ERR!?Node.js?v20.11.0錯(cuò)誤的解決

    npm?ERR!?Node.js?v20.11.0錯(cuò)誤的解決

    在使用?npm?進(jìn)行包管理和構(gòu)建項(xiàng)目的過(guò)程中,有時(shí)會(huì)遇到錯(cuò)誤信息?npm?ERR!?Node.js?v20.11.0,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下
    2024-02-02
  • Node.js如何實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接池

    Node.js如何實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接池

    文章介紹了Node.js中實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接池的方法,通過(guò)預(yù)先建立和管理數(shù)據(jù)庫(kù)連接對(duì)象,優(yōu)化數(shù)據(jù)庫(kù)連接的使用效率
    2024-11-11
  • Nodejs--post的公式詳解

    Nodejs--post的公式詳解

    本篇文章主要介紹了Nodejs--post公式的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • NodeJS之優(yōu)缺點(diǎn)及適用場(chǎng)景討論

    NodeJS之優(yōu)缺點(diǎn)及適用場(chǎng)景討論

    這篇文章主要介紹了NodeJS之優(yōu)缺點(diǎn)及適用場(chǎng)景討論,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • node.js根據(jù)不同請(qǐng)求路徑返回不同數(shù)據(jù)詳解流程

    node.js根據(jù)不同請(qǐng)求路徑返回不同數(shù)據(jù)詳解流程

    本篇文章介紹了我在開發(fā)過(guò)程中發(fā)現(xiàn)的一個(gè)小問(wèn)題,就是node.js如何能夠根據(jù)不同的請(qǐng)求路徑來(lái)返回得到不同數(shù)據(jù),通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Nodejs連接mysql并實(shí)現(xiàn)增、刪、改、查操作的方法詳解

    Nodejs連接mysql并實(shí)現(xiàn)增、刪、改、查操作的方法詳解

    這篇文章主要介紹了Nodejs連接mysql并實(shí)現(xiàn)增、刪、改、查操作的方法,結(jié)合實(shí)例形式詳細(xì)分析了nodejs針對(duì)mysql數(shù)據(jù)庫(kù)的的連接、mysql數(shù)據(jù)庫(kù)的創(chuàng)建及nodejs針對(duì)mysql增刪改查等相關(guān)操作具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • node使用Koa2搭建web項(xiàng)目的方法

    node使用Koa2搭建web項(xiàng)目的方法

    本篇文章主要介紹了node使用Koa2搭建web項(xiàng)目的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Node.js的MongoDB驅(qū)動(dòng)Mongoose基本使用教程

    Node.js的MongoDB驅(qū)動(dòng)Mongoose基本使用教程

    這篇文章主要介紹了Node.js的MongoDB驅(qū)動(dòng)Mongoose的基本使用教程,前端js+后端Node.js+數(shù)據(jù)庫(kù)MongoDB是當(dāng)下流行的JavaScript全棧開發(fā)方案,需要的朋友可以參考下
    2016-03-03
  • node crawler如何添加promise支持

    node crawler如何添加promise支持

    這篇文章主要介紹了node crawler如何添加promise支持,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論

罗源县| 玉溪市| 雅安市| 健康| 香港 | 灵山县| 弥渡县| 突泉县| 普兰店市| 温州市| 衡东县| 清远市| 哈密市| 工布江达县| 安新县| 隆昌县| 会东县| 许昌县| 禄丰县| 鄱阳县| 获嘉县| 肃宁县| 岳池县| 晋江市| 南昌市| 南华县| 霍林郭勒市| 增城市| 关岭| 汶上县| 黄石市| 大丰市| 东阳市| 海淀区| 杭州市| 景宁| 类乌齐县| 阳江市| 阳谷县| 定州市| 容城县|