使用Cloudflare worker搭建壁纸服务

写这篇文章的原因是记录一下自己为博客首页设置主题图的过程。

当前博客的主题使用的是 Fluid, 可以在主页设置主题图。一开始使用的是默认的图片,但是觉得不够个性化,于是就想设置一个专属的图片。

在思考选用何种图片的过程中,萌发了一个新的想法💡,就是让自己的主题图片定期去变化。但是并不想每次去手动修改图片的链接。于是便想搭建一个图片的服务,可以定期更新图片。

在思考如何搭建服务时,突然想到 bing 的每日背景图片都会改变,刚好符合我的要求。借助 bing 的接口,我只需要搭建一个静态的链接服务,将图片请求重定向至 bing 的图片链接即可。

获取 bing 的图片接口

根据 stackoverflow 上的回答 获取到了 bing 的每日接口请求,获取不同响应接口体的接口如下:

XML: http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US

JSON: http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US

RSS: http://www.bing.com/HPImageArchive.aspx?format=rss&idx=0&n=1&mkt=en-US

使用 httpie 测试响应的接口

1
$ http "http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US"

响应的 Body 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"images": [
{
"bot": 1,
"copyright": "Flamenco dancers outside Palma de Majorca, Spain (© Torleif Svensson/Getty Images)",
"copyrightlink": "https://www.bing.com/search?q=flamenco+dance&form=hpcapt&filters=HpDate%3a%2220220216_1830%22",
"drk": 1,
"enddate": "20220217",
"fullstartdate": "202202161830",
"hs": [],
"hsh": "6c3f5fff2e9235dd83cbc3e5353c5263",
"quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20220216_FlamencoDance%22&FORM=HPQUIZ",
"startdate": "20220216",
"title": "The art of flamenco",
"top": 1,
"url": "/th?id=OHR.FlamencoDance_EN-IN6108897298_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
"urlbase": "/th?id=OHR.FlamencoDance_EN-IN6108897298",
"wp": false
}
],
"tooltips": {
"loading": "Loading...",
"next": "Next image",
"previous": "Previous image",
"walle": "This image is not available to download as wallpaper.",
"walls": "Download this image. Use of this image is restricted to wallpaper only."
}
}

可以看到 images 下的 url 便是我们需要的图片链接。拼接 url 并请求

1
$ http "https://www.bing.com/th?id=OHR.FlamencoDance_EN-IN6108897298_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp" > wallpapre.jpg

就可以得到当前 bing 的壁纸了。到这里我们就理顺了如何获取到图片的流程,接下来就是搭建图片服务了

服务搭建

如果从零开始,购买服务器并搭建图片服务,对于我需求来说做的额外工作是在是太多了。

于是我使用 cloudflare woker, 使用 woker 不仅可以快速的搭建一个免费的服务,并且还可以获得一个域名。

cloudflare 的免费账号的每日请求数也足够使用了,本着能省一点是一点的原则,我选择了它。

首先是注册一个 cloudflare 的账号,并完成响应的设置。

然后就是构建一个 woker 了,在 woker 的 dashbord 选择 创建服务,定好名称,我的名字是 wallpaper,选择默认的启动器即可,点击创建服务即可。

完成服务的创建之后,选中你的 woker,点击快速编辑,将触发器的代码填入,点击保存并部署。

触发器代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
addEventListener("fetch", (event) => {
event.respondWith(
handleRequest(event.request).catch(
(err) => new Response(err.stack, { status: 500 })
)
);
});

const base = "http://www.bing.com"
const statusCode = 302

async function handleRequest(request) {
const resp = await fetch("http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US")
const data = await resp.json()
const image = data["images"][0]["url"]
const destinationURL = base + image
return Response.redirect(destinationURL, statusCode)
}

这样,服务就部署完成了,在浏览器输入服务的地址,就可以看到图片的展示效果了。

总共花费半天时间,0 ¥。


使用Cloudflare worker搭建壁纸服务
https://blog.zhangliangliang.cc/post/cloudflare-wallpaper-server.html
作者
Bobby Zhang
发布于
2022年2月17日
许可协议