缘由

逛一些博客时发现不少网站都有随机图片api,挺羡慕的,于是我自己也搞了一个。图片的话为了节省服务器空间我基本用的外链,也有我自己图床的图片,目前大部分图片在语雀,用的阿里的CDN,速度还是不错的。

实现

API的实现方法很简单:

  1. 从储存图片url的文本文件中随机读取一行
  2. 使用header跳转
  3. 检查referer和调用参数
  4. 显示相关图片

第一步的操作和 一言 里面一样,检查referer以及界面参考 @后宫学长 开源的 随机图片服务

API地址:https://api.spiritx.xyz/images/

分类默认跳转到acg,目前有acg、meizi、bing可选。emmm...其实还有的(输入萝莉有惊喜~~~

目前API里的图片较少,暑假再去添加更多图片吧

部分代码

代码实在是太简陋,没什么好展示的,不过我还是贴出来吧 :捂脸:

/**
 * 域名白名单校验函数
 * @param $domain_list
 * @return true/false
 */
function checkReferer($domain_list = array('spiritx.xyz','other domain')) {
    $status = false;
    $refer = $_SERVER['HTTP_REFERER'];
    //前一URL
    if ($refer) {
        $referhost = parse_url($refer);
        /**来源地址主域名**/
        $host = strtolower($referhost['host']);
        if ($host == $_SERVER['HTTP_HOST'] || in_array($host, $domain_list)) {
            $status = true;
        }
    }
    return $status;
}
/**
 * 从文本文件中读取图片url并跳转
 */
function echo_img() {
    if (checkReferer()) {
        //调用参数
        $type = $_GET['key'];
        switch ($type) {
            case 'xxx':
                ## 省略中间部分代码
        }
    } else {
        //未授权域名
        $img = 'https://view.spiritx.xyz/images/2019/03/13/404.th.png';
        header("Location:$img");
        exit();
    }
}
## 省略中间部分代码

//前一URL
$refer = $_SERVER['HTTP_REFERER'];
//存在前一URL
if ($refer) {
    echo_img();
} else {
    //直接访问API地址
    $type = $_GET['key'];
    switch ($type) {
        case 'xxx':
            ## 省略中间部分代码
    }
    exit();
}

预览效果

刷新会变哦~ ~
动漫图:

妹子图:

必应图:(外链调用是今日的bing cn图)