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

最近用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 年 04 月 25 日 01 时 10 分 PM
如果觉得我的文章对你有用,请随意赞赏

1 条评论

  1. 香港云服务器

    站长不错,不错的干货

发表评论