Drupal + SimpleFeed 避免文章重複的 hack

edited 十月 2013 in Drupal
也許有些朋友早就知道,開放原始碼新聞網( http://news.oss.tw/ )是以 Drupal + SimpleFeed 提供服務,只是 SimpleFeed 對於重複內容的辨識方式可能不是非常合用(或是我自己沒有看清楚設定方式),造成網站經常出現些重複性的內容;為此決定進行一些調整,其實過去有調整過,只是在更新版本時不小心刪除了(恩...),所以重新來過。

SimpleFeed 中取得文章主要是透過 simplefeed_item.module 中的 function simplefeed_item_feed_parse() ,下面這一行是用來判斷文章是否重複:
$duplicate = db_result(db_query("SELECT iid FROM {simplefeed_feed_item} WHERE iid = '%s'", $iid));

我還不確定 iid 是怎麼產生的,我只想到一個簡單的規則,如果網址重複就不要使用(雖然這樣子會忽略一些更新的新聞內容),所以將這一行做了些調整:
$duplicate = db_result(db_query("SELECT iid FROM {simplefeed_feed_item} WHERE url = '%s'", $link));

其中 $link 的執行順序是在這之後,所以我將它搬到這一行的上面:
$link = $item->get_permalink();

這樣一來就可以了,只是原本存在的重複文章呢?我在根目錄新增了個暫時的程式,例如 hello.php ,透過下面程式刪除舊有的重複文章:
<?php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$result = db_query("SELECT nid, url FROM {simplefeed_feed_item} ORDER BY nid ASC");
$stack = array();
while ($feed = db_fetch_object($result)) {
    if(in_array($feed->url, $stack)) {
        node_delete($feed->nid);
    } else {
        $stack[] = $feed->url;
    }
}
db_query('OPTIMIZE TABLE {simplefeed_feed_item}');

記得,類似的動作執行前,備份是很重要的

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=3061

評論

Sign In or Register to comment.