跳至主要內容

heStudio BingWallpaper Get

undefined...约 2512 字大约 8 分钟

目录

demo

这是一张自动更换的图片

调用方法

提示

运行端口在3000

获取图片

GET /getimage

获取图片标题

GET /gettitle

返回参数:

参数说明
title标题

获取图片版权信息

GET /getcopyright

返回参数:

参数说明
copyright版权信息
copyrightlink版权信息所对应的链接

安装方法

Docker 部署 (推荐)
docker pull hestudio/bingwallpaper_get
docker run -d -p 3000:3000 hestudio/bingwallpaper_get

警告

请在更新版本之前仔细阅读版本更新日志open in new window,并决定是否更新版本。盲目的更新版本可能会导致程序崩溃。建议在更新之前请先记录之前版本的版本号,在遇到兼容问题时可以回退到之前的版本。

注意

我们将在v1.3.2版本之后将开发时使用的包管理器切换到pnpm,建议使用手动部署的也使用pnpm包管理器,Docker部署和NPM部署的用户不受影响。

提交问题

https://github.com/hestudio-community/bing-wallpaper-get/issuesopen in new window

高级用法

小白慎入

在使用高级用法之前,你需要了解nodejs,docker,javascriptlinux的一些知识。如果你是小白,你应当只使用基本用法。

假设条件

在下文中,我们将假设你将服务运行在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: 是否检查更新 v1.4.0

  • 默认值: true
  • 注意,你应当只传入false以禁用自动检查更新。如果你不需要禁用自动检查更新,应当传入true或者不传入任何值。

警告

我们已经在v1.3.1将此开关移至external.js文件,请浏览检查更新开关

请注意,我们将在v1.4.0版本移除此环境变量。

hbwg_packageurl: package.json对应 URL

  • 默认值: https://raw.githubusercontent.com/hestudio-community/bing-wallpaper-get/main/package.json

hbwg_header: 传入真实 IP 的请求头

  • 默认值: x-real-ip

hbwg_tempdir: 修改缓存目录 v1.4.0

  • 默认值为项目根目录的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)
参数参数类型
ipString
pathString

输出效果大概是这样:

[YYYY-MM-DD HH:mm:ss] ${ip} GET ${path}
postback(ip, path)
参数参数类型
ipString
pathString

输出效果大概是这样:

[YYYY-MM-DD HH:mm:ss] ${ip} POST ${path}
logback(log)
参数参数类型
logString

输出效果大概是这样:

[YYYY-MM-DD HH:mm:ss] ${log}
logerr(err)
参数参数类型
errString

输出效果大概是这样:

[YYYY-MM-DD HH:mm:ss] ERROR: ${err}
logwarn(warn)
参数参数类型
warnString

输出效果大概是这样:

[YYYY-MM-DD HH:mm:ss] WARN: ${warn}

另外还有 9 个指示器。他们被包含在hbwgConfig对象当中,你只能查看它们的值,无法直接修改它们。该指示器提供给开发人员调试使用,不要在生产环境使用。 v1.4.0

  • hbwgConfig.port(String): 程序端口号,可以在hbwg_port修改。
  • hbwgConfig.api(String): 服务地址,可以在hbwg_hosthbwg_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-scheduleopen in new window

已导入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_zonesopen in new window

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 配置 v1.4.0

修改 API 对应路径
module.exports = {
  api: {
    rename: {
      getimage: "/getimage",
      gettitle: "/gettitle",
      getcopyright: "/getcopyright",
    },
  },
};
禁用 API
module.exports = {
  api: {
    ban: ["getimage", "gettitle", "getcopyright"],
  },
};

robots.txt v1.4.0

添加默认robots.txt,默认禁止所有搜索引擎爬取。

可以关闭,通过:

module.exports = {
  robots: false,
};

可以指定代码。

module.exports = {
  robots: `
User-agent: *
Disallow: /
`,
};

/debug (GET)调试接口 v1.4.0

  1. 默认关闭,可在external.js中开启
module.exports = {
  debug: true,
};
  1. 允许修改默认 URL
module.exports = {
  debug: {
    url: "/debug",
  },
};
  1. 允许加设密码
module.exports = {
  debug: {
    passwd: "yourpassword",
  },
};

开发者可以如下格式在浏览器访问:

/debug?passwd=yourpassword

返回 bing 服务器原始请求结果 (/bingsrc) v1.4.0

  1. 用户可以通过 GET /bingsrc 获取
  2. 默认禁用,可以通过external.js开启
module.exports = {
  bingsrc: true,
};
  1. 允许修改默认 URL
module.exports = {
  bingsrc: {
    url: "/bingsrc",
  },
};

定时任务 v1.4.0

开发者可以在服务器刷新资源时自定义执行一些任务。

module.exports = {
  refreshtask: () => {
    // 这里面是你要执行的定时任务
  },
};
上次编辑于:
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3