AKCMS 采集功能的hook使用方法

akcms 代码很精简 功能很强大。用akcsm做过上十个网站,很感谢馒头同志让我更快的完成网站架构。

     我是喜欢折腾的人,用akcms做的站多半自己动手hook过,特别是采集部分,有些数据需要特殊处理,然后自己改代码,虽然功能实现了,但是每次版本升级很头痛。

现在3.8.x版本的akcms 有了采集功能的hook,以为不会让我头痛了,下面说下使用方法。

     先看手册说明:

hook程序的以函数的形式统一写在configs/hook.php中,函数命名规则:

1 采集列表页的hook,命名为hook_spidelist_123(123代表采集规则ID,下同)
2 采集内容页的hook,命名为hook_spiderurl_123

以数组的形式向hook函数传入已经采集到的全部数据。举一个例子:要把采集内容页(假设内容页采集规则的ID是1)采集到的title中的字母全部大写就在/configs/hook.php中增加这样一个函数:

function hook_spiderurl_1($value) {
$value[‘title’] = strtoupper($value[‘title’]);
return $value;
}

保存后就立即生效了,下次采集完ID1的采集规则后,会自动调用这个函数,实现你想要的功能。

在本地采集过程中,目标网站的大图和小图分别是

代码:

http://img.31345.com/flash_game/games/upload/89/84/58984.jpg 小图
http://img.31345.com/flash_game/games/upload/89/84/58984_o.jpg 大图

因为当前内容中只能采到大图的地址,小图在列表中。akcms暂时没有采集列表图片作为缩略图的功能,
当然这个可以采用列表页的hook功能。现在让我们来通过大图地址得到小图地址。注意自定义字段在代码中要在字段名前面加 _
以下是过滤处理代码

代码:

<?php
function hook_spiderurl_1($value) {
$value['picture'] = str_replace("_o", '', $value['_bigpicture']);//过滤自定义字段的
return $value;
}
?>

以下是将内容中的第一图片作为缩略图

代码:

<?php
function hook_spiderurl_1($value) {
if (preg_match("/<img(.*?)src=(.+?)['\" >]+/is",$value['data'],$str2)) { //使用正则获取内容中第一幅图像地址作为缩略图
    $picture = str_replace('"', '', $str2['2']);
    $picture = str_replace('\'', '', $picture);
    $value['picture'] = $picture;
    }
return $value;
}
?>

以下是将采集到的文件地址下载保存到本地

代码:

<?php
function hook_spiderurl_1($value) {
$picname = calspiderpicturename($value['picture'],'');
$pictureurl = calrealurl($value['picture'],'');//注意 这个地方如果采集的内容中,图片地址不带http://,请这样写 calrealurl($value['picture'],'http://www.baidu.com')
addtask('spiderpicture', $pictureurl."\t".FORE_ROOT.$picname);
$value['picture'] = $picname;
return $value;
}
?>

发表评论

您的电子邮箱地址不会被公开。