简述

Z-BlogPHP 接入随机图 API 用于缩略图

代码

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
* 提取或者设置图片
*
* @param object $article
* @param string $type 用于决定返回形式
* @return string imgurl | <img />
*/
function demoAPP_Thumbnail($article, $type = 'imgurl')
{

$matches = null;
preg_match_all("/<img[^>]*src=\"([^\"]+)\"[^>]*>/i", $article->Content, $matches);
if (isset($matches[1]) && count($matches[1]) > 0) {
$imgurl = $matches[1][0];
} else {
$imgurl = demoAPP_setRndImg($article->ID);
// $imgurl = demoAPP_setRndImgNetwork(); // 在当前需求下此种方式并不科学。可能会被服务方限制
}
// 默认返回图片地址
if ($type == 'imgurl') {
return $imgurl;
}
// 传入任意其他值可返回 <img /> 标签
$tplImg = '<img src="imgurl" alt="title">';
return strtr($tplImg, array('imgurl' => $imgurl, 'title' => $article->Title));
}

/**
* 可直接引用的随机图接口
*
* @param string $rndhash 传入一个参数用于防止图片重复
* @return string
*/
function demoAPP_setRndImg($rndhash)
{
return "https://picsum.photos/350/260?random={$rndhash}";
}

/**
* 接口本身返回 json ,需要额外提取图片地址
*
* @return string
*/
function demoAPP_setRndImgNetwork()
{
global $zbp;
// 失败时的默认图
$imgurl = "{$zbp->host}zb_users/theme/demoAPP/var/images/no-image.jpg";
// 接口地址
$url = "https://api.vvhan.com/api/acgimg?type=json";
$http = Network::Create();
$http->open('GET', $url);
// $http->setTimeOuts(10, 10, 0, 0);
$http->send();
// 对抓取内容进行解析
if ($http->status == 200 && $json = json_decode($http->responseText, true)) {
// 返回字段以实际接口为准
$imgurl = $json['imgurl'];
}
return $imgurl;
}

模板内调用:

1
2
3
<a href="{$article.Url}" title="{$article.Title}">
{demoAPP_Thumbnail($article,1)}
</a>

推荐

关于 Z-BlogPHP 1.7 缩略图的一些记录_电脑网络_沉冰浮水:

https://www.wdssmq.com/post/20210224481.html

[开发者]正则表达式相关专贴-开发者中心-ZBlogger 技术交流中心:

https://bbs.zblogcn.com/thread-101713.html