就算世界终结,也无所谓

愿你有一天,能与你最重要的人重逢

有生之年 | 辣鸡 Bing 今日美图 API

还记得我在关于 Little_Qiu 和 DreamCity 中提到过的“如果我能在有生之年在 DreamCity 上发布软件”吗?现在,真的发布了。

《有生之年 | 辣鸡 Bing 今日美图 API》 这张图就是使用辣鸡 Bing 今日美图 API 获取的 Bing 今日美图,每日自动更新

辣鸡 Bing 今日美图 API 是我用从 @GPlaneBlessing Skin Server 编写的多种首页样式插件中抠出来的相关代码加以修改后制成的一个轻量级的获取 Bing 今日美图的 API 程序。感谢 @GPlane 在开发过程中对我的帮助。项目开源在世界最大的同性交友网站 GitHub

因为在写这个程序之前我几乎没有接触过 PHP,所以 Bug 在所难免。如果你在使用中遇到了什么问题,可以在 GitHub 提交 Issue(不过八成不会被我解答及解决…)。如果有大佬发现了哪里有虫,也烦请在抓出来后提交个 Pull Request。

这篇博文更多的是想分享开发过程,如果你想要获取关于辣鸡 Bing 今日美图 API 的更加详细的信息的话,可以查看 GitHub 页面上的 README.md

为什么给这个程序取名「辣鸡」?

  1. 我是只辣鸡
  2. 自我感觉这个程序写的是真的烂…

为什么要做辣鸡 Bing 今日美图 API?

还是要从 DreamCity 的一次主题升级说起。

Ass we can♂know,现在 DreamCity 用的是 Kratos 主题。以前我使用的是旧版本(v2.2.2)的,在前天升级到了新版本(v2.5.3)。但是在升级后,Kratos 主题自带的个人简介小工具变样了。头像变得更小且上半部分有背景图片。说真的我找不到什么好的图片可以用来做背景,于是就像 LittleSkin 的首页一样使用了每天更新的 Bing 今日美图。

一开始使用的是和 LittleSkin 一样的一个公众 API 获取图片,然而不知道是因为这个公众 API 太多人用了还是怎么的,加载速度变得非常慢,甚至拖慢了网页主体的加载。然而又没有其他合适的公众 API,以前收藏过的一份程序也因为会害怕存储的图片太多而导致 CVM 磁盘空间爆炸没有使用。

求人不如求己。就在这时我想起了自己偶然接触过的 @GPlane 编写的 Blessing Skin Server 的多种首页样式插件中有自带一个获取 Bing 今日美图并作为首页背景的功能,而上次碰巧抓到一只虫发现了相关代码片段,查看后发现原理是直接向 Bing 请求然后解析返回的 json 获取图片的真实地址。这就非常 Exciting 了啊,如果是直接获取 Bing 的地址然后引用的话不但可以解决速度的问题,还可以不写存储相关的片段就不用怕磁盘空间爆掉了。

那么,你又是怎么干的?

说干就干,虽然说在此之前我几乎没有接触过 PHP,但是凭着我深厚的搜索功底和对 (Ctrl+C)*(Ctrl+V)=Good 公式的熟练的运用,我就有一种莫名的信心相信我一定能做好。

创建一个无格式文本文件,改后缀名 .php,把多种首页样式插件中的相关代码复制了进去。然后 Google 了一圈 PHP 输出图片的方法,不知道是我理解能力太差还是搜索到的文章太辣鸡,我始终无法理解那些函数的用法。遂求助 GPlane 大佬。首先 GPlane 大佬给的解答也是和搜索到的文章一样的用函数输出(抱歉是在记不清是什么函数了),但是在我问能否与 HTML 混写时 GPlane 大佬给了一个使用 echo() 函数输出 HTML 给浏览器解析的方案。虽然说这样成了,但是输出的是 HTML,不能作为图片被调用…

然后,GPlane 大佬给了一个函数:header()。这个函数可以发送 HTTP 头。而 HTTP 状态码就包括在 HTTP 头中。在这个函数的参数中,有一个 Location: 参数,它可以返回给浏览器一个 HTTP 302 状态码。这就非常 Exciting 了啊,我可以直接 302 到 Bing,速度快而且不存储,岂不是美滋滋?

最后,在 GPlane 大佬的指点下,我写出了这样一个包括注释只有 25 行的单文件的 Bing 今日美图 API。

哇,看起来很厉害的样子。那这个和其他公众 API 有什么区别吗?

看起来是没什么区别,对吧?实际上区别大了。

就拿我之前使用的那个公众 API 举例子,直接上数据:

从这张图可以看到,使用辣鸡 Bing 今日美图 API 时,加载时间约为 1.26s

《有生之年 | 辣鸡 Bing 今日美图 API》

而在使用某公众 API 时…

袜!完全加载耗时 2.6 分钟诶!

《有生之年 | 辣鸡 Bing 今日美图 API》

《有生之年 | 辣鸡 Bing 今日美图 API》

虽然理论上来说肯定会有更好的公众 API 的,但是这是目前为止我找到的唯一一个能用的公众 API。

所以,用辣鸡 Bing 今日美图 API 的好处是显而易见的!

BB 了这么久,到底要怎么部署及使用?

辣鸡 Bing 今日美图 API 对机器配置的要求非常低,对 PHP 的要求也只有带有JSON 扩展且版本不低于 5.2.0,更是不需要 URL 重写。基本上是台机器就能跑(没有安装 PHP 和 Web 引擎的机器可以安装这俩)。

虽然说部署非常简单,但我还是懒得复制一遍,所以你们直接去 GitHub 上的开源地址看 README.md 好了。

对于使用,辣鸡 Bing 今日美图 API 几乎就是万金油。你可以在任何可以使用 URL 加载图片的地方使用,比如用 <img> 标签在网页中插入图片。

v1.1 新增并没有什么卵用的获取过去的图片的功能,只要在 settings.php 中设置天数就好了。
v1.2 开始可以使用在 URL 后加 daysago 参数的方法设置天数,更灵活。
e.g.

<img src="http://your-domain.com/bingpic.php" /> // 获取当天的 Bing 今日美图

或者

<img src="http://your-domain.com/bingpic.php?daysago=1"> // 获取 1 天前的 Bing 今日美图

你甚至可以配合 Wallpaper Engine 使用,每天开机时自动获取当天的 Bing 今日美图并设置为你的电脑桌面壁纸。详情请戳https://github.com/Minecraft-LittleQiu/laji-bing-pic-api/wiki/将-Bing-今日美图设为电脑桌面壁纸

所以说不给颗 Star 么?

根据关于 Little_Qiu 和 DreamCity 页面的规定,辣鸡 Bing 今日美图 API 是基于 GPLv3 协议的开源程序。你可以根据 GPLv3 协议中的相关规定进行二次开发及发布。开源地址在这里:GitHub

既然看都看了,就顺手给颗 Star 呗。

若您只是打算单纯的转载该程序到你的站点,请注明原作者为 Little_Qiu。如果你只是想转载本文,DreamCity 原创文章均使用 知识共享署名-非商业性使用-相同方式共享协议 进行许可,请注意遵守协议。

点赞
由于 LiveRe 使用的头像 API 不支持 HTTPS,现在已经禁用了 QQ、微信和微博的 OAuth 登录。
我也不想就这样因噎废食,但事实是我根本没有能力去搭建一个反代。
如果你发现了有评论被删除的痕迹,八成是这些评论使用的 OAuth 方式是 QQ 或者微信或者微博。