建立个人品牌,把你的名字变成钱 [登录·注册]

吕滔博客

首页 开发 运维 工具 摄影

修改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了,以后再遇到其它的再说...哈哈哈....

相关推荐

添加新评论

网站状态

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

最新回复

  • memory: php64位? 这个我还真没有注意。。。回头再试试
  • Kngstr: 这个很简单,你用的PHP不是64位的,64位的dll只能在64位...
  • memory: 使用的是typecho.
  • GavinHsueh: 您好,我了解下您的博客是自己开发的么?看着很不错
  • 个人博客: 看看先
  • memory: 谢谢,已修正。
  • jrotty: 方法一中next后面少个'符号
  • daxia: mark
  • 企业孵化器: 厉害了
  • Bearox: 我也遇到了同样的问题,yum install dev86* 没用...
  • themebetter: 优化方法很不错。
  • 架构之路: 总结和nice,网站速度很快。
  • 架构之路: 总结的很好,简单、完整、高效。
  • memory: 我正在犹豫要不要更新了~~~ 因为1.2撇弃了php5.2,最低...
  • 灵九哲: medoo已经更新到v1.2了,博主更新下中文版网站内容
  • 灵九哲: medoo已经更新了v1.2,麻烦博主更新下中文版的网站,然后把...
  • memory: 用的typecho.
  • einsan: 涛哥,你的博客后端是自己开发的吗?还是使用哪一款开源产品?
  • yfly962464: 不行啊
  • memory: 哥们儿~非常不好意思,之前有段时间折腾jpress,后来就没有玩...