需求
项目源代码地址(欢迎star) https://github.com/studychen/SeeNewsV2
本文链接 http://www.alijava.com/random-image/ 转载请注明出处
在实现APP 过程中,有些文章没有图片,想随机获取一张图片作为封面。
网上找到一个 API,访问 https://unsplash.it/300/200/?random 可以获取一张随机产生的图片。
后面笔者为了方便国内网络访问,把图片转移到了七牛云,共享给大家。
方案一
把图片的 src 设为 https://unsplash.it/300/200/?random ,图片是随机的了,但是两张随机图片是一模一样的,参加下面的代码和效果图。
1 2 3
| <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,从而获取随机图片
1 2
| 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 注册七牛,享受优惠及免费空间。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| 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; } } }
|
总结
可以访问 http://7xr4g8.com1.z0.glb.clouddn.com/671 获取图片,后面数字671是图片编号
目前有效图标编号的是 0 到 964,可以通过随机产生 id 来获取随机图片
1 2
| Random randrom = new Random(47); String url = "http://7xr4g8.com1.z0.glb.clouddn.com/" +randrom.nextInt(964+1);
|
项目源代码地址(欢迎star) https://github.com/studychen/SeeNewsV2