首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 將火車頭采集器 DB3 數據導入 DedeCMS 的完整方案

     編輯:PHP 相關知識

背景與痛點

火車頭采集器(LocoySpider)默認使用 SQLite (.db3) 存儲采集數據,而 DedeCMS 使用 MySQL。將數萬條采集數據高效、準確遷移至 DedeCMS,涉及表結構映射、字符集轉換、HTML 內容清洗、關鍵詞提取、縮圖處理、附件關聯等多個環節。本文提供一個經實戰驗證的完整 PHP 腳本,涵蓋從 DB3 讀取到 DedeCMS 多表寫入的全流程。

核心邏輯流程

  1. 連接 DB3:使用 PDO SQLite 驅動讀取 content 表。
  2. 字符集統一:采集數據多為 GBK/UTF-8 混雜,統一 mb_convert_encoding(..., 'gbk', 'auto') 轉為 DedeCMS 所需的 GBK。
  3. 字段映射與清洗:
    • 標題:mysql_escape_string() 防注入 + 拼接后綴。
    • 正文:替換相對圖片路徑為絕對 URL,提取第一張圖作為縮圖(litpic)。
    • 下載鏈接:構造 DedeCMS 專用 {dede:link} 標簽。
    • 關鍵詞:調用 SplitWord 分詞類(需自行實現或引入第三方如 PSCWS)。
  4. 事務性寫入三張核心表:
    • dede_addonsoft:軟件模型擴展表(文件大小、下載鏈接、介紹等)。
    • dede_archives:主文檔表(標題、縮圖、點擊數、關鍵詞、描述等)。
    • dede_arctiny:微型索引表(僅含 ID、欄目、排序等核心字段,用于列表頁高速查詢)。
  5. 輔助字段生成:隨機點擊數 mt_rand(1000,10000)、發布時間 time()、固定 IP/作者等。

關鍵代碼片段

<?php
$pdo = new PDO('sqlite:d:/pdoSpiderResult.db3');
$split = new SplitWord(); // 需自行實現分詞接口

$stmt = $pdo->query('SELECT * FROM content LIMIT 160, 80'); // 分批處理
foreach ($stmt as $row) {
    // 1. 基礎字段處理
    $title = mysql_escape_string(mb_convert_encoding($row[3], 'gbk', 'auto')) . '-js相册';
    $content = str_replace('Image/', 'https://g.111cn.cn/javascript教程/Image/', mb_convert_encoding($row[4], 'gbk', 'auto'));
    $size = '未知';
    $downUrl = 'https://g.111cn.cn/javascript/' . str_replace('.zip', '', $row['address']) . '.rar';
    $preview = '<br />效果預覽地址<a href="https://g.111cn.cn/javascript/' . str_replace('.zip', '', $row['address']) . '" target="_blank">' . $title . '</a>';

    // 2. 提取首圖作為縮圖
    preg_match_all('/(src|SRC)=["\'\s]{0,}((.*).(gif|jpg|jpeg|png|bmp))/isU', $content, $imgs);
    $litpic = str_replace(['"', "'"], '', $imgs[2][0] ?? '');

    // 3. 關鍵詞與描述
    $keywords = str_replace(' ', ',', $split->SplitRMM($title));
    $description = ''; // 可自動摘要前 200 字
    $introduce = $content . $description . $preview;

    // 4. 寫入 dede_addonsoft
    $addonSql = "INSERT INTO dede_addonsoft (typeid, filetype, language, softtype, accredit, os, softrank, officialUrl, officialDemo, softsize, softlinks, introduce, templet, userip, redirecturl)
                 VALUES ('$typeid', '$filetype', '$language', '', '', 'Win2003,WinXP,Win2000,Win9X', '3', '', '', '$size', '{dede:link islocal=1 text=本地下载}$downUrl{/dede:link}', '$introduce', '', '222.103.69.94', '')";
    mysql_query($addonSql) or die('addonsoft: ' . mysql_error());
    $aid = mysql_insert_id();

    // 5. 寫入 dede_archives
    $arcSql = "INSERT INTO dede_archives (id, typeid, typeid2, sortrank, flag, ismake, channel, arcrank, click, money, title, litpic, writer, source, pubdate, senddate, mid, description, keywords)
               VALUES ('$aid', '$typeid', '0', '$sortrank', 'p', '1', '3', '0', '$click', '0', '$title', '$litpic', '$writer', 'unknown', '$sortrank', '$sortrank', 1, '$description', '$keywords')";
    mysql_query($arcSql) or die('archives: ' . mysql_error());

    // 6. 寫入 dede_arctiny
    $tinySql = "INSERT INTO dede_arctiny (id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid)
                VALUES ($aid, $typeid, 0, 0, 3, '$sortrank', '$sortrank', 1)";
    mysql_query($tinySql) or die('arctiny: ' . mysql_error());
}
echo '導入完成';
?>

關鍵注意事項

1. 字符集陷阱

DedeCMS 歷史版本多為 GBK,而現代采集數據常為 UTF-8。務必在入庫前統一轉為 GBK,否則前台顯示亂碼、搜索失效。若站點已為 UTF-8 版 DedeCMS,則無需轉碼,但需確保數據庫連接 SET NAMES utf8。

2. SQL 注入防範

示例使用 mysql_escape_string(),但 強烈建議改用 PDO/MySQLi 預處理語句,徹底消除注入風險。

3. 分詞組件選擇

代碼中的 SplitWord 為占位符。生產環境可接入:

  • PSCWS (PHP Chinese Word Segmentation) C 擴展,性能最佳。
  • jieba-php 純 PHP 實現,部署簡單。
  • SCWS 簡單中文分詞系統,提供 PHP 擴展與命令行工具。

4. 圖片與附件遷移

腳本僅處理數據庫記錄,**實體文件(圖片、壓縮包)需單獨同步到服務器對應目錄**,并確保 URL 路徑一致。建議使用 rsync 或對象存儲(OSS/COS)批量遷移。

5. 批量與性能

  • 使用 LIMIT offset, count 分批處理,避免內存溢出。
  • 開啟 MySQL 事務 BEGIN; ... COMMIT; 包裹每批次,提升寫入速度並保證原子性。
  • 導入后需在 DedeCMS 后台「更新系統緩存」→「更新主頁/列表頁/文檔頁」生成靜態頁。

擴展建議

  • 封裝為 DedeCMS 后台插件,提供可視化導入界面、進度條、錯誤日誌。
  • 支持自定義模型(如圖集、文章、商品)的字段映射配置。
  • 集成圖片自動下載、水印、縮略圖生成功能(參考 DedeCMS 內建 ImageResize 類)。
  • 增加重複檢測(基于標題 MD5 或源 URL),支持增量同步。

總結

本方案提供了從火車頭 DB3 到 DedeCMS 多表寫入的完整數據流,涵蓋編碼轉換、內容清洗、關鍵詞提取、縮圖關聯、三表聯動寫入等關鍵環節。實際部署時請務必補全分詞組件、改用預處理語句、做好文件同步與緩存更新,即可構建穩定高效的采集入庫管道。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved