懒人图库:分享 DIY 的一组随机图片 API

需求

在实现APP 过程中,有些文章没有图片,想随机获取一张图片作为封面。
网上找到一个 API,访问 https://unsplash.it/300/200/?random 可以获取一张随机产生的图片。

后面笔者为了方便国内网络访问,把图片转移到了七牛云,共享给大家。

你可以访问 http://7xr4g8.com1.z0.glb.clouddn.com/671 来获取图片,后面数字671是图片编号

懒人图库:分享 DIY 的一组随机图片 API_第1张图片

目前有效图标编号的是 0 到 964,可以通过随机产生 id 来获取随机图片

Random randrom = new Random(47);
String url = "http://7xr4g8.com1.z0.glb.clouddn.com/" +randrom.nextInt(964+1);

方案一

把图片的 src 设为 https://unsplash.it/300/200/?random ,图片倒是随机的了,但是两张随机图片是一模一样的,参加下面的代码和效果图。

<img src="https://unsplash.it/300/200/?random" alt="blog.csdn.net/never_cxb" title="">

<img src="https://unsplash.it/300/200/?random" alt="blog.csdn.net/never_cxb" title="">

效果图:两张随机图片,虽是随机获取,但是两张图片相同。你可以刷新本博客文章,两张图会随机变化,但是两张图依然保持一样。

不知道这是不是和浏览器缓存有关系,请大神赐教。

方案二

该网站也提供了根据 id 来获取图片,使用方法在 url 后面加上 ?image参数。

https://unsplash.it/200/200?image=100 的图片内容为:

笔者使用下面的代码来随机产生 id,从而获取随机图片

Random randrom = new Random(47);
String url = "https://unsplash.it/640/427/?image=" +randrom.nextInt(1000);

但是测试发现,一小部分id对应的图片不存在,比如 https://unsplash.it/200/300?image=86 、 https://unsplash.it/200/300?image=105 等等。

方案三

笔者把该 API 提供的图片抓取到了七牛云上,保证上传到七牛云上的 id 是连续的。

可以通过我的邀请链接 https://portal.qiniu.com/signup?code=3lpzf1unpyr0y 注册七牛。

代码如下:

package com.chenxb.biz;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Random;

import com.qiniu.storage.BucketManager;
import com.qiniu.util.Auth;

public class UploadRandomImage {

    private static final String RANDOM_URL = "https://unsplash.it/640/427/?image=";
    private static final String ACCESS_KEY = "*****"; // 你的access_key
    private static final String SECRET_KEY = "*****"; // 你的secret_key
    private static final String BUCKET_NAME = "*****"; // 你的空间名称

    public static void main(String[] args) throws InterruptedException, IOException {
        Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
        // 获取空间管理
        BucketManager bucketManager = new BucketManager(auth);

        int key = 0;
        for (int i = 0; i < 1025; i++) {
            // 如果 i 对应的图片存在,上传七牛
            if (exists(i)) {
                bucketManager.fetch(RANDOM_URL + i, BUCKET_NAME, key + "");
                // 只有上传了七牛,key 才+1,保证七牛的 key 连续
                key++;
                // sleep一段时间,免得对网站负载过大
                Thread.sleep(1000 * 10 + new Random().nextInt(1000 * 10));
            } else {
                System.out.println(i + "不存在");
            }
        }
        System.out.println(key + "最终图片数目");

    }

    /** * 判断地址对于的图片是否存在 * @param id * @return */
    public static boolean exists(int id) {
        try {
            HttpURLConnection.setFollowRedirects(false);
            HttpURLConnection con = (HttpURLConnection) new URL(RANDOM_URL + id).openConnection();
            con.setRequestMethod("HEAD");
            return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

你可能感兴趣的:(java,api,图片,随机,库)