【vps】教你写一个自己的随机图API

前言

刚刚开始使用halo博客的时候,我就发现halo博客系统是可以使用随机图当背景的,所以也是使用了网上一些比较火的随机图API。

在上次发现了各种图片API接口之后,我发现这些接口都是使用随机图的原理的,然后大部分的随机图都是二次元浓度过高,自己是有点受不了的,所以准备自己写一个随机图的API接口。正好最近的vps备案成功了,就写一个API网页吧。

1、寻找图片

这一步肯定是不用多说的,自己就是因为嫌弃以前使用的api二次元浓度太高了,所以想自己找一些好看的图片来当随机图。那么从哪里找图片呢?我这里有几个推荐的好看的壁纸网站,都是免费下载的

Wallpaper Abyss

Awesome Wallpapers

WallpapersWide.com

当然,还有很多的地方可以找到好看的图片,就比如我最近刷短视频的时候,就会经常给我推荐好看的壁纸

2、压缩图片

我们都知道,如果一张图片的大小太大,那么网页打开时加载时间就会比较长,这个样子就会有网页打开了,但是图片未加载完全的情况出现。

那么如何避免这种情况的出现呢,我们可以使用一些图片压缩工具,这里推荐使用在线的图片压缩网站TinyPNG

这个网站的压缩率非常的高,使用的图片压缩算法基本上可以达到70%左右的压缩了,这已经是高得离谱了。

3、上传图片

在压缩图片完成之后,就到了我们的上传图片的时间了

然后我上传图片使用的是github+jsdelivr图床来上传的。

最后的上传效果就是图片地址为

https://cdn.jsdelivr.net/gh/{你的github用户名}/{仓库名称}/{具体路径}

那么这边使用的图床插件是PicGo,配置好之后的样子长这样

那么上传图片的问题解决了

4、创建API

api怎么创建呢?

首先第一步,我们打开vps的宝塔面板,如果没安装的推荐安装一个,因为这个对建站小白来说非常的方便。

我们参加一个API站点

然后申请一个ssl认证,再打开强制https

然后打开这个站点的目录,创建一个img.txt和一个random.php

我们在img.txt中将我们上传的图片的url写在里面,效果如图所示

这里提一点,如何一件复制你上传图片的url呢,如果你使用的是PicGo上传的话,可以在“相册”一栏里,选择你想要的图片,然后一件复制url

然后我们在random.php中写下这段代码

<?php
//存有image链接的文件名img.txt
$filename = "img.txt";
if(!file_exists($filename)){
die('文件不存在');
} //从文本获取链接
$pics = [];
$fs = fopen($filename, "r");
while(!feof($fs)){
$line=trim(fgets($fs));
if($line!=''){
array_push($pics, $line);
}
} //从数组随机获取链接
$pic = $pics[array_rand($pics)]; //返回指定格式
$type=$_GET['type'];
switch($type){ //JSON返回
case 'json':
header('Content-type:text/json');
die(json_encode(['pic'=>$pic])); default:
die(header("Location: $pic"));
}
?>

到此大功告成!我们的随机图API就做好了!

我们只需要访问这个API链接(random.php)就可以立即跳转到我们img.txt中的随机一张图片的地址啦!

后话

那么到此自己的随机图API就做好啦

这里也是附上自己的随机图API接口

api.woodwhale.top

【vps】教你写一个属于自己的随机图API的更多相关文章

  1. 只有20行Javascript代码!手把手教你写一个页面模板引擎

    http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

  2. 半个小时教你写一个装(bi)逼(she)之地图搜租房

    半个小时教你写一个装(bi)逼(she)之地图搜租房 首先需要一个Python3环境,怎么准备我就不多说了,实在不会的出门右转看一下廖雪峰老师的博客. HTML部分 代码来自:高德API+Python ...

  3. 教你写一个Android可快速复用的小键盘输入控件

    引子 在Android项目开发中特别是一些稍大型的项目,面对需求文档的时候你经常会发现很多地方用到了同样的组件,但是又略有不同.比如这个: 右边是一个小键盘输入板,左边当焦点不同的时候分别用右边的小键 ...

  4. 手把手教你写一个java的orm(五)

    生成sql:where 上一篇里我们实现了生成insert的sql,下面要开始实现update,delete,select的sql语句了.但是这些语句有一个比较麻烦的地方是:它们一般后面都会有wher ...

  5. 手把手教你写一个java的orm(一)

    写之前的说明 其实吧. 这个东西已经写好了,地址在:https://github.com/hjx601496320/JdbcPlus 这系列文章算是我写的过程的总结吧.(恩系列,说明我可能会写好久,╮ ...

  6. 手把手教你写一个RPC

    1.1 RPC 是什么 定义:RPC(Remote Procedure Call Protocol)--远程过程调用协议 ,RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数 ...

  7. 80行代码教你写一个Webpack插件并发布到npm

    1. 前言 最近在学习 Webpack 相关的原理,以前只知道 Webpack 的配置方法,但并不知道其内部流程,经过一轮的学习,感觉获益良多,为了巩固学习的内容,我决定尝试自己动手写一个插件. 这个 ...

  8. 让我手把手教你写一个强大、方便使用的 IOC 容器

    一.介绍 1.介绍 最近无聊,也没什么事做,没事做总是要给自己找点事情做吧,毕竟人的生活在与折腾.于是,决定自己手动写一个 IOC 的框架.我们知道在 NetCore 的版本里面已经内置了 IOC 容 ...

  9. 手把手教你写一个RN小程序!

    时间过得真快,眨眼已经快3年了! 1.我的第一个App 还记得我14年初写的第一个iOS小程序,当时是给别人写的一个单机的相册,也是我开发的第一个完整的app,虽然功能挺少,但是耐不住心中的激动啊,现 ...

随机推荐

  1. AtCoder Beginner Contest 172 题解

    AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...

  2. PowerDotNet平台化软件架构设计与实现系列(08):缓存平台

    几乎所有后端应用都会或多或少用到缓存,尤其是分布式缓存服务,以及和本地缓存构造的二级缓存.根据我们一贯的节约代码的风格,为了复用的目标,抽象出缓存平台,进行缓存管理. 考虑到很多公司都会自己造或者直接 ...

  3. Docker从入门到精通(八)——Docker Compose

    恭喜大家,学到这里,对于 docker 的基础玩法大家应该都会了,下面会介绍 docker的一些编排工具. 1.为什么需要 Docker Compose? 官网镇楼:https://www.runoo ...

  4. GBK 和 UTF8

    首先来看一下常用的编码有哪些,截图自Notepad++.其中ANSI在中国大陆即为GBK(以前是GB2312),最常用的是 GBK 和 UTF8无BOM 编码格式.后面三个都是有BOM头的文本格式,U ...

  5. Linux报错:ERROR>the input device is not a TTY

    docker执行命令的时候报错 这是时候去掉docker后面的 -it参数

  6. 【LeetCode】932. Beautiful Array 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 构造法 递归 相似题目 参考资料 日期 题目地址:h ...

  7. 【LeetCode】899. Orderly Queue 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/orderly- ...

  8. codeforces(Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) )(C,D)

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. 【剑指Offer】二叉搜索树的第k个结点 解题报告(Python)

    [剑指Offer]二叉搜索树的第k个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  10. 1269 - Consecutive Sum

    1269 - Consecutive Sum    PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 64 MB ...