使用Node.js每日自动保存Bing美图教程

更新:10-29 民间故事 我要投稿 纠错 投诉

一、找接口

一些大型网站上较大的背景图片是异步加载的。我也在Bing上验证过。当网速慢时,背景显示为黑色,图像显示较晚。所以我觉得应该从接口返回图片地址,然后异步加载。然后我使用Chrome的调试工具Network,发现了这样一个接口:http://cn.bing.com/HPImageArchive.aspx?format=jsidx=0n=1mkt=zh-CN

点击一看,就知道图片信息都在里面了。

图片界面

二、得到图片并保存

这里用到了请求模块,也是常用的获取界面内容的模块。

const request=require("请求");

const fs=require("fs");

const 路径=require("路径");

request.get("http://cn.bing.com/HPImageArchive.aspx?format=jsidx=0n=1mkt=zh-CN", (错误、响应、正文)={

const img=JSON.parse(body).images[0];

const arr=img.url.split("/");

const str=arr[arr.length - 1];

request(img.url).pipe(fs.createWriteStream(path.join("./img", str)));

console.log(`${new Date()}${str} 没问题!`);

});代码其实很简单

首先取出img资源,然后使用fs文件模块将img资源放入目录中的"img"文件夹中。

但问题来了。该代码仅用于将当天的图片保存到文件夹中。你仍然需要每天输入node app.js来获取图片。与之前的右键保存相比,并没有提高多少效率。

三、定时任务

既然我们每天必须运行一次,为什么我们不使用计划任务来执行呢?这里我们使用一个名为node-schedule的新模块。

node-schedule专门用来做定时任务。详细内容可以阅读官方文档。我将简单地将代码粘贴到此处。

const Schedule=require("节点计划");

const 规则=新的Schedule.RecurrenceRule();

Rule.dayOfWeek=[0, 新的Schedule.Range(1, 6)];

规则.小时=8;

规则. 分钟=0;

Schedule.scheduleJob(规则, ()={

require("./src/get.js");

});那么问题又来了,我总不能天天开着电脑吧?解决方案其实很简单,放到服务器上执行即可。但是如何在服务器本地使用壁纸呢?这个就更简单了,直接使用git来同步壁纸就可以了!一个git pull 命令和所有以前保存的图像都在这里!

四、服务器执行代码,并自动上传git

要在节点中使用git 命令行,我们需要另一个模块child_process。该模块是node自带的,可以直接使用。

const childProcess=require("child_process");

const cmd=(c)=c;

const shell="bash";

常量配置={

env: {

NODE_ENV: "生产",

编码:"utf8",

},

壳,

};

常量执行=(c)={

返回新的Promise((解决, 拒绝)={

childProcess.exec(c, config, (err, stdout, stderr)={

如果(错误){

拒绝(错误);

} 别的{

解决(标准输出,标准错误);

}

});

});

};

console.log("部署开始。");

exec(cmd("git status"))

.then(()=exec(cmd("git add .")))

.then(()=exec(cmd("git commit -m "ss"")))

.then(()=exec(cmd("git push -u origin master")))

.then(()=console.log("部署结束。"))

.catch(错误={

控制台.错误(错误);

});这里的代码有点多,但是其实很简单。它只是让节点执行命令行。所有命令行都位于底部。

五、上线

将代码放在服务器上运行,并将执行请求更改为以下内容:

const request=require("请求");

const fs=require("fs");

const 路径=require("路径");

request.get("http://cn.bing.com/HPImageArchive.aspx?format=jsidx=0n=1mkt=zh-CN", (错误、响应、正文)={

const img=JSON.parse(body).images[0];

const arr=img.url.split("/");

const str=arr[arr.length - 1];

request(img.url).pipe(fs.createWriteStream(path.join("./img", str)));

设置超时(()={

require("./cmd.js");

}, 20000);

console.log(`${new Date()}${str} 没问题!`);

});这里的20 秒延迟是一个简单的方法,以确保fs 在上传到git 之前保存文件。当然,还有其他解决方案。这种粗略的解决方案只是因为这是一个计划任务,没有时间要求。

六、验收成果

几天后本地

这几天git pull保存的壁纸都是保存在本地的!

真的很酷!

用户评论

话少情在

这也太酷了吧!省时又省力

    有19位网友表示赞同!

◆残留德花瓣

每天自动下载Bing美图,岂不美滋滋?

    有19位网友表示赞同!

海盟山誓总是赊

我一直在寻找一款能完成这个任务的工具,终于找到了!

    有20位网友表示赞同!

未来未必来

学习一下用nodejs的自动化脚本操作网站功能?

    有13位网友表示赞同!

抚笙

这样可以一直都有最新的Bing美图作为壁纸啊!

    有11位网友表示赞同!

放肆丶小侽人

分享一下代码吗?我想试试。

    有18位网友表示赞同!

来自火星的我

这能省下很多时间,非常实用!

    有10位网友表示赞同!

墨城烟柳

我一直在想怎么批量下载Bing美图,这下不用愁了。

    有12位网友表示赞同!

大王派我来巡山!

nodejs真强大!

    有7位网友表示赞同!

信仰

请问这个脚本需要自己搭建服务器吗?

    有12位网友表示赞同!

寻鱼水之欢

用nodejs实现自动化脚本,是不是比较难?

    有20位网友表示赞同!

站上冰箱当高冷

希望教程详细一些,方便小白学习。

    有10位网友表示赞同!

惯例

Bing美图真的很漂亮啊!有了这个工具,可以每天欣赏它们了。

    有10位网友表示赞同!

疯人疯语疯人愿

感觉这个项目的难度系数应该不高吧?

    有10位网友表示赞同!

凉月流沐@

请问脚本能够根据用户设置自动下载特定主题的美图吗?

    有12位网友表示赞同!

素婉纤尘

期待看到更多关于nodejs的自动化脚本教程!

    有9位网友表示赞同!

可儿

这样的工具简直太棒了,希望作者能继续更新!

    有14位网友表示赞同!

纯真ブ已不复存在

有没有其他网站也可以通过nodejs这种方法进行美图下载?

    有15位网友表示赞同!

裸睡の鱼

用nodejs实现自动化每天保存Bing美图这种任务很常见?

    有17位网友表示赞同!

【使用Node.js每日自动保存Bing美图教程】相关文章:

1.动物故事精选:寓教于乐的儿童故事宝库

2.《寓教于乐:精选动物故事助力儿童成长》

3.探索动物旅行的奇幻冒险:专为儿童打造的童话故事

4.《趣味动物刷牙小故事》

5.探索坚韧之旅:小蜗牛的勇敢冒险

6.传统风味烤小猪,美食探索之旅

7.探索奇幻故事:大熊的精彩篇章

8.狮子与猫咪的奇妙邂逅:一场跨界的友谊故事

9.揭秘情感的力量:如何影响我们的生活与决策

10.跨越两岸:探索彼此的独特世界

上一篇:揭秘你生命中最宝贵的瞬间 下一篇:巴黎奥运会第七日:征程过半,中国疾驰领跑,法国与澳大利亚分列第二第三