失言就是一不小心说了实话 [登录·注册]

吕滔博客

首页 开发 运维 工具 摄影

修改PHPCMS自带采集器部分链接不能采集的BUG

开发 memory发布于April 21, 2017 标签: PHP, PHPCMS

最近用phpcms帮一个朋友搞个采集站,发现有些链接采集不过来.
简单的修改了一下源码的正则。小记
文件:phpcms/modules/collection/classes/collection.class.php 约第181行修改如下

//preg_match_all('/<a ([^>]*)>([^\/a>].*)<\/a>/isU', $html, $out);   //<---系统默认的注释掉
preg_match_all('/<a\s+href=["|\']?([^>"\' ]+)["|\']?\s*[^>]*>([^>]+)<\/a>/i', $html, $out);  //<---我新加的
//$out[1] = array_unique($out[1]);  //<---原自带的
//$out[2] = array_unique($out[2]);  //<---原自带的
$data = array();  //<---原自带的
foreach ($out[0] as $k=>$v) {. //<---out[1] 改为 out[0]

上面的有BUG,我又修改了一下。。。

/**
     * 获取文章网址
     * @param string $url           采集地址
     * @param array $config         配置
     */
    public static function get_url_lists($url, &$config) {
        if ($html = self::get_html($url, $config)) {
            if ($config['sourcetype'] == 4) { //RSS
                $xml = pc_base::load_sys_class('xml');
                $html = $xml->xml_unserialize($html);
                if (pc_base::load_config('system', 'charset') == 'gbk') {
                    $html = array_iconv($html, 'utf-8', 'gbk');
                }
                $data = array();
                if (is_array($html['rss']['channel']['item']))foreach ($html['rss']['channel']['item'] as $k=>$v) {
                    $data[$k]['url'] = $v['link'];
                    $data[$k]['title'] = $v['title'];
                }
            } else {
                $html = self::cut_html($html, $config['url_start'], $config['url_end']);
                $html = str_replace(array("\r", "\n"), '', $html);
                $html = str_replace(array("</a>", "</A>"), "</a>\n", $html);
                //preg_match_all('/<a ([^>]*)>([^\/a>].*)<\/a>/isU', $html, $out);
                preg_match_all('/<a(.*)href=["|\']?([^>"\' ]+)["|\']?\s*[^>]*>([^>]+)<\/a>/i', $html, $out);
                //$out[1] = array_unique($out[1]);
                //$out[2] = array_unique($out[2]);
                //echo '<pre>';print_r($out);exit;
                $data = array();
                foreach ($out[2] as $k=>$v) {
                    if (!empty($v) && $v!='') {
                        if ($config['url_contain']) {
                            if (strpos($v, $config['url_contain']) === false) {
                                continue;
                            } 
                        }
    
                        if ($config['url_except']) {
                            if (strpos($v, $config['url_except']) !== false) {
                                continue;
                            } 
                        }
                        $data[$k]['url'] = self::url_check($v, $url, $config);
                        $data[$k]['title'] = strip_tags($out[3][$k]);
                    } else {
                        continue;
                    }
                }
                
            }
            return $data;
        } else {
            return false;
        }
    }

这样就OK了,以后再遇到其它的再说...哈哈哈....

相关推荐

添加新评论

全部评论:仅有一条评论

香港云服务器

香港云服务器2017-05-11 18:17:07 回复

站长不错,不错的干货

网站状态

  • 栏目分类:35个
  • 发布文章:1109篇
  • 用户评论:620条

最新回复

  • 香港服务器: 很详细,学习了
  • memory: 对,这个密钥最好是自己换一下。当然不嫌麻烦甚至可以考虑将密钥做到...
  • 小明明: 在加密的时候 秘钥固定不就可以机密了吗
  • 上海代理记账: 看起来代码有一些复杂的呀。。。
  • 香港云服务器: 站长不错,不错的干货
  • yet handsome: 我看了你的这个发现历史真的是惊人的相似,我们已经做到redis集...
  • memory: 好久不玩它们了,我的相关知识来自谷歌...
  • 于小鱼: 你好,想请教一些关于xen和kvm的问题。
  • memory: 如果将图片 base64_encode 后,再想取回以前的路径不...
  • 陈凌风: 我要区正常的路径显示怎么办?
  • genuiner: 牛逼
  • haitongz: 赞
  • memory: php64位? 这个我还真没有注意。。。回头再试试
  • Kngstr: 这个很简单,你用的PHP不是64位的,64位的dll只能在64位...
  • memory: 使用的是typecho.
  • GavinHsueh: 您好,我了解下您的博客是自己开发的么?看着很不错
  • 个人博客: 看看先
  • memory: 谢谢,已修正。
  • jrotty: 方法一中next后面少个'符号
  • daxia: mark