放牧代码和思想
专注自然语言处理、机器学习算法
    Why join the Navy if you can be a pirate?

多说自动摘要与防剽窃代码

多说还算是WordPress上一款不错的社交网络评论框插件,不过它有“剽窃”博主文章的嫌疑。在wp-content/plugins/duoshuo/WordPress.php中有如下“剽窃”代码:

红色方框内的代码直接将整个post的content发送到多说服务器,而且是不含版权信息的。这样就会造成几个问题:

“多说服务器是否会保存我的文章?这些文章数据作何用途?”

“假如我勾选了同时发布到豆瓣,那么豆瓣上就会存在一篇一模一样的文章(虽然有一个小小的原文链接),搜索引擎会不会认为是我剽窃了豆瓣这篇文章?”

“豆瓣这些站点的权重远远大于我的博客,搜索引擎会不会优先收录豆瓣上的同步文章,放弃收录本博客的文章?”

“豆瓣收录了全文,后来我想修改这篇文章,又不好意思再同步一次(这样会打扰我的关注者),难道要我专门过去手动修改?”

这几个问题无论成不成立,都是隐患。虽然我的博文价值不大,但好歹都是辛辛苦苦码出来的,不希望被任何人轻易抓走。同时,作为博主,我又希望自己的豆瓣等社交媒体上能有一个入口进入到博客。所以最好的办法是参照微博的做法,只同步前140个字,想阅读更多,还是麻烦移步博客吧。

作为一个爱折腾的人,我决定给多说做个手术。

要改动的话很简单,打开wp-content/plugins/duoshuo/WordPress.php,添加如下几个方法:

/**
     * 获取缩略图
     * @param $post
     * @return string
     */
    private function get_thumbnail($post) {
        if ( has_post_thumbnail() ) {
            $domsxe = simplexml_load_string(get_the_post_thumbnail());
            $thumbnailsrc = $domsxe->attributes()->src;
            return '<img src="'.$thumbnailsrc.'" alt="'.trim(strip_tags( $post->post_title )).'" />';
        } else {
            $content = $post->post_content;
            preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $content, $strResult, PREG_PATTERN_ORDER);
            $n = count($strResult[1]);
            if($n > 0){
                return '<img src="'.$strResult[1][0].'" alt="'.trim(strip_tags( $post->post_title )).'" />';
            }else {
                return '<img src="'.get_bloginfo('template_url').'/img/logo.png" alt="'.trim(strip_tags( $post->post_title )).'" />';
            }
        }
    }

    /**
     * 摘要提取
     * @param $str
     * @param $start
     * @param $width
     * @param $trimmarker
     * @return string
     */
    private function strimwidth($str ,$start , $width ,$trimmarker ){
        $output = preg_replace('/^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$start.'}((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$width.'}).*/s','\1',$str);
        return $output.$trimmarker;
    }

    /**
     * 获取一片文章的摘要
     * @param $post
     * @return string
     */
    private function get_summary($post){
        return $this->strimwidth(strip_tags($post->post_content), 0, 256, '...');
    }

    /**
     * 文章末尾加版权说明
     * @param $post
     * @return string
     */
    private function get_copyright($post) {
        return '<p>阅读更多:<a href="'.get_bloginfo('url').'">'.get_bloginfo('name').'</a> &raquo; <a href="'.get_permalink($post).'">'.$post->post_title.'</a></p>';
    }

然后在那句涉嫌剽窃的代码之前做一个防剽窃处理:

// 自动摘要防剽窃
$post->post_content = $this->get_thumbnail($post) . $this->get_summary($post) . $this->get_copyright($post);

看看效果:

首先勾选同时发布到这些社交媒体:

开心网等等受到“防剽窃”处理:

新浪微博不受影响:

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » 多说自动摘要与防剽窃代码

分享到:更多 ()

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #3

    用的什么编辑器? 觉得很好看! 很能读!!

    AA2年前 (2016-02-26)回复
  2. #2

    编写了无数对象,现实生活里一直是SingleTon。——————韩雪童鞋 ,我很关心你现在咋样了? [嘻嘻]

    linczone2年前 (2015-05-27)回复
  3. #1

    不错

    无语西风3年前 (2014-08-25)回复

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机