heStudio BingWallpaper Get
demo
调用方法
提示
运行端口在3000
获取图片
GET /getimage
获取图片标题
GET /gettitle
返回参数:
参数 | 说明 |
---|---|
title | 标题 |
获取图片版权信息
GET /getcopyright
返回参数:
参数 | 说明 |
---|---|
copyright | 版权信息 |
copyrightlink | 版权信息所对应的链接 |
安装方法
docker pull hestudio/bingwallpaper_get
docker run -d -p 3000:3000 hestudio/bingwallpaper_get
npm install hestudio-bingwallpaper-get
echo "require('hestudio-bingwallpaper-get')" >> server.js
node server.js
git clone https://github.com/hestudio-community/bing-wallpaper-get.git
cd bing-wallpaper-get
npm install -global pnpm
pnpm install
pnpm run server
警告
请在更新版本之前仔细阅读版本更新日志,并决定是否更新版本。盲目的更新版本可能会导致程序崩溃。建议在更新之前请先记录之前版本的版本号,在遇到兼容问题时可以回退到之前的版本。
注意
我们将在v1.3.2
版本之后将开发时使用的包管理器切换到pnpm
,建议使用手动部署的也使用pnpm
包管理器,Docker
部署和NPM
部署的用户不受影响。
在其他地方找到本项目
- GitHub: https://github.com/hestudio-community/bing-wallpaper-get
- NPM: https://www.npmjs.com/package/hestudio-bingwallpaper-get
- Docker Hub: https://hub.docker.com/r/hestudio/bingwallpaper_get
提交问题
https://github.com/hestudio-community/bing-wallpaper-get/issues
高级用法
小白慎入
在使用高级用法之前,你需要了解nodejs
,docker
,javascript
和linux
的一些知识。如果你是小白,你应当只使用基本用法。
假设条件
在下文中,我们将假设你将服务运行在localhost:3000
请根据自己的实际需求按需修改,默认配置并不适合所有人
环境变量
hbwg_port
: 自定义程序端口
- 默认值:
3000
hbwg_host
: 自定义 Bing 前置 URL
- 默认值:
https://cn.bing.com
hbwg_config
: 自定义请求参数
- 默认值:
format=js&idx=0&n=1&mkt=zh-CN
hbwg_external
: 外部文件路径
- 默认值:
./external.js
- 注意:
external.js
如手动修改,需在环境变量输入绝对值
hbwg_getupdate
: 是否检查更新
- 默认值:
true
- 注意,你应当只传入
false
以禁用自动检查更新。如果你不需要禁用自动检查更新,应当传入true
或者不传入任何值。
hbwg_packageurl
: package.json
对应 URL
- 默认值:
https://registry.npmjs.com/hestudio-bingwallpaper-get/latest
镜像源
以下是几个我们认可的 CDN 源。当然,你也可以自定义成你自己的 CDN 源。
- Github: https://raw.githubusercontent.com/hestudio-community/bing-wallpaper-get/main/package.json
- NPM: https://registry.npmjs.com/hestudio-bingwallpaper-get/latest
- NPMMirror: https://registry.npmmirror.com/hestudio-bingwallpaper-get/latest
- jsDelivr: https://cdn.jsdelivr.net/npm/hestudio-bingwallpaper-get@latest/package.json
- UNPKG: https://unpkg.com/hestudio-bingwallpaper-get@latest/package.json
hbwg_header
: 传入真实 IP 的请求头 v1.4.2
- 默认值:
x-forwarded-for
注意
请注意,该请求头可以被篡改,具体请参考X-Forwarded-For - HTTP | MDN
hbwg_tempdir
: 修改缓存目录
- 默认值为项目根目录的
tmp
文件夹 - 需输入绝对值,如
/workspace/bing-wallpaper-get/tmp
修改组件行为
修改前你需要在根目录创建external.js
文件。你可以自定义创建的路径和文件名称,只需添加hbwg_external
环境变量即可。
在开始这部分内容之前,你需要了解以下内容。
本项目导出了 5 个项目函数用于日志记录。它们分别是getback(ip, path)
, postback(ip, path)
, logback(log)
, logerr(err)
, logwarn(warn)
。我们分别来讲一下:
getback(ip, path)
参数 | 参数类型 |
---|---|
ip | String |
path | String |
输出效果大概是这样:
[YYYY-MM-DD HH:mm:ss] ${ip} GET ${path}
postback(ip, path)
参数 | 参数类型 |
---|---|
ip | String |
path | String |
输出效果大概是这样:
[YYYY-MM-DD HH:mm:ss] ${ip} POST ${path}
logback(log)
参数 | 参数类型 |
---|---|
log | String |
输出效果大概是这样:
[YYYY-MM-DD HH:mm:ss] ${log}
logerr(err)
参数 | 参数类型 |
---|---|
err | String |
输出效果大概是这样:
[YYYY-MM-DD HH:mm:ss] ERROR: ${err}
logwarn(warn)
参数 | 参数类型 |
---|---|
warn | String |
输出效果大概是这样:
[YYYY-MM-DD HH:mm:ss] WARN: ${warn}
另外还有 9 个指示器。他们被包含在hbwgConfig
对象当中,你只能查看它们的值,无法直接修改它们。该指示器提供给开发人员调试使用,不要在生产环境使用。
hbwgConfig.port
(String): 程序端口号,可以在hbwg_port
修改。hbwgConfig.api
(String): 服务地址,可以在hbwg_host
和hbwg_config
修改。hbwgConfig.host
(String): Bing 前置 URL,可以在hbwg_host
修改。hbwgConfig.getupdate
(String): 获取更新开关,可以在获取更新开关修改。hbwgConfig.packageurl
(String): 更新源,在检查更新时会请求该地址。可以在package.json
对应 URL修改。hbwgConfig.header
(String): IP 地址传入请求头,可以在hbwg_header
hbwgConfig.tempDir
(String): 缓存目录,可以在hbwg_tempdir
修改。hbwgConfig.apiconfig
(Object): API 配置,可以在设置 API 配置修改。hbwgConfig.robots
(String | Boolean): robots.txt 配置,可以在robots.txt
修改。
当然,你也直接可以用hbwgConfig
对象获取到他们的全部信息。详见示例。
将以下初始化内容粘贴到external.js
:
// external.js
const {
// 项目函数
// getback
// postback
// logback
// logerr
// logwarn
//
// 配置信息
// hbwgConfig
} = require(`${process.cwd()}/node_modules/hestudio-bingwallpaper-get`);
module.exports = {
// 组件配置
};
上述模板中均已注释项目函数和指示器,可根据需要自行取消注释。
getupdate
: 获取更新开关
此开关决定系统是否提示更新版本。
在默认状态下,这个开关是开启状态。程序会在刚开始运行时和每个资源刷新周期自动请求更新源。如果检测到更新源有更新的版本,将会在日志中提示。
提示
不会自动更新本程序,仅提示更新。
如果需要禁用更新提示,可以在external.js
中进行如下修改。
// external.js
module.exports = {
getupdate: false;
}
rootprogram
: 自定义GET /
的行为
注意
修改此部分需要你额外具有express.js
的知识。如果不是太了解,可以参考:
在默认情况下,访问localhost:3000
会跳转到这里,你可以通过修改rootprogram
函数以修改此行为。
示例项目如下:
// external.js
module.exports = {
rootprogram: (req, res) => {
//在这里修改内容
res.send("helloworld");
},
};
示例
一个输出程序配置信息的示例程序,你应当仅在开发调试环境使用
// external.js
const {
hbwgConfig,
} = require(`${process.cwd()}/node_modules/hestudio-bingwallpaper-get`);
module.exports = {
rootprogram: (req, res) => {
res.send(hbwgConfig);
},
};
beforestart
: 在服务运行前导入代码
在开始这部分内容之前,你需要了解以下内容。
本组件中导入了app
变量,该变量由express.js
导入,修改此部分需要你额外具有express.js
的知识。如果不是太了解,可以参考:
你不能使用app.listen()
,因为这会导致项目出现致命错误。当然,你也不能将 URL 路由至/
, /getimage
, /geititle
, /getcopyright
等,它们也会导致项目无法正常运行。你可以自定义/
,但是仅限于GET请求。如果需要自定义/
,请参考rootprogram
函数。
好的,现在可以通过以下结构在服务运行前导入代码
// external.js
module.exports = {
beforestart: (app) => {
//在这里修改内容
},
};
refreshtime
: 设置资源刷新时间
在修改本部分内容之前,需要了解一下node-schedule
已导入rule
变量,需修改 rule 变量才能有效果。
官方教程
Recurrence Rule Scheduling
You can build recurrence rules to specify when a job should recur. For instance, consider this rule, which executes the function every hour at 42 minutes after the hour:
const schedule = require("node-schedule");
const rule = new schedule.RecurrenceRule();
rule.minute = 42;
const job = schedule.scheduleJob(rule, function () {
console.log("The answer to life, the universe, and everything!");
});
You can also use arrays to specify a list of acceptable values, and the Range object to specify a range of start and end values, with an optional step parameter. For instance, this will print a message on Thursday, Friday, Saturday, and Sunday at 5pm:
const rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0, new schedule.Range(4, 6)];
rule.hour = 17;
rule.minute = 0;
const job = schedule.scheduleJob(rule, function () {
console.log("Today is recognized by Rebecca Black!");
});
Timezones are also supported. Here is an example of executing at the start of every day in the UTC timezone.
const rule = new schedule.RecurrenceRule();
rule.hour = 0;
rule.minute = 0;
rule.tz = "Etc/UTC";
const job = schedule.scheduleJob(rule, function () {
console.log("A new day has begun in the UTC timezone!");
});
A list of acceptable tz (timezone) values can be found at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
RecurrenceRule properties
second (0-59)
minute (0-59)
hour (0-23)
date (1-31)
month (0-11)
year
dayOfWeek (0-6) Starting with Sunday
tz
Note: It's worth noting that the default value of a component of a recurrence rule is null (except for second, which is 0 for familiarity with cron). If we did not explicitly set minute to 0 above, the message would have instead been logged at 5:00pm, 5:01pm, 5:02pm, ..., 5:59pm. Probably not what you want.
以下是示例代码,当然,它也是项目默认配置:
// external.js
module.exports = {
refreshtime: (rule) => {
//在这里修改内容
rule.hour = 0;
rule.minute = 0;
rule.second = 0;
rule.tz = "Asia/Shanghai";
},
};
设置 API 配置
修改 API 对应路径
module.exports = {
api: {
rename: {
getimage: "/getimage",
gettitle: "/gettitle",
getcopyright: "/getcopyright",
},
},
};
禁用 API
module.exports = {
api: {
ban: ["getimage", "gettitle", "getcopyright"],
},
};
robots.txt
添加默认robots.txt
,默认禁止所有搜索引擎爬取。
可以关闭,通过:
module.exports = {
robots: false,
};
可以指定代码。
module.exports = {
robots: `
User-agent: *
Disallow: /
`,
};
/debug
调试接口 v1.4.2
- 默认关闭,可在
external.js
中开启
module.exports = {
debug: true,
};
- 允许修改默认 URL
module.exports = {
debug: {
url: "/debug",
},
};
- 允许修改
method
module.exports = {
debug: {
method: "POST", // GET 或者 POST
},
};
我们允许使用GET
和POST
两种方式访问调试接口。如果你不填写该值,则默认为GET
- 允许加设密码
module.exports = {
debug: {
passwd: "yourpassword",
},
};
开发者可以如下格式在浏览器访问:
/debug?passwd=yourpassword
警告
请注意,在GET
的query
中使用密码是及其不明智的。如果使用密码,请改用POST
我们将在v1.4.3
版本禁止在GET
模式下启动Debug Mode,如果在后续的版本仍然使用GET
密码,我们将不允许你启动服务器。
返回 bing 服务器原始请求结果 (/bingsrc
)
- 用户可以通过 GET /bingsrc 获取
- 默认禁用,可以通过
external.js
开启
module.exports = {
bingsrc: true,
};
- 允许修改默认 URL
module.exports = {
bingsrc: {
url: "/bingsrc",
},
};
定时任务
开发者可以在服务器刷新资源时自定义执行一些任务。
module.exports = {
refreshtask: () => {
// 这里面是你要执行的定时任务
},
};