您在這裡

導入大量名錄數據到Drupal網站的例子

James Qi 在 2010年12月26日 - 00:21 發表

  2010年5月17日我在日志中寫了一篇《導入大量名錄數據到MediaWiki網站的例子》,詳細記錄了導入數據的過程步驟,後面進行了不少導入工作,也都是基本上按照那個步驟來的。

  前段時間在國外的空間中安裝了Drupal以及一些模塊,進行了數據導入的嘗試工作,這個月又在國内的服務器上設置了Drupal平台的新站jamesqi.com和adsensebook.cn,明年初将會開始導入大量數據的工作。這幾天還在讓技術部的同事幫忙修改php模闆來實現一些功能。為了讓自己後面的工作更清晰,也将過程記錄如下:

1 導入前

1.1 搭建安裝

先架設好網站,安裝Drupal軟件及需要的模塊,讓網址可以訪問。

一般安裝以下的模塊:

  • 核心模塊
  • 核心可選模塊
  • pathauto: 自動生成路徑别名
  • token: 被其他模塊調用
  • cck: 自定義字段
  • views: 視圖(暫未用)
  • xmlsitemap: 生成sitemap提交給搜索引擎
  • boost: 文件緩存
  • node import: 導入txt, csv文件到頁面
  • contemplate: cck輸出模闆
  • taxonomy import/export via xml: 導出、導入分類(暫未用)
  • taxonomy menu: 用戶生成分類菜單
  • taxonomy manager: 用于分類管理、批量增加
  • page title: 自定義頁面标題

另外有幾個方便管理和編輯的模塊,也可以根據需要安裝:

  • admin_menu: 管理菜單
  • ckeditor(暫未用)
  • imce(暫未用)
  • imce_wysiwyg(暫未用)
  • wysiwyg(暫未用)
  • capcha: 驗證碼
  • external links: 判斷處理外部鍊接
  • Devel: 開發調試

如果是導入一系列的數據做網站群,可以隻安裝一套Drupal系統,采用多網站共享的安裝方式。如果是站群,可以考慮這幾個方面:

  • 一組類似的子站群隻需要安裝一套Drupal程序以及模塊
  • 一組類似的子站群建議使用同一MySQL服務器中不同的數據庫,特别是數據量非常大的時候,便于分别備份等操作
  • 用戶帳号、密碼共享的問題,待解決

1.2 初始設置

安裝完成後進行基本的設置,例如:

  • 站點信息設置,包括名稱、口号、使命、頁腳、首頁等設置;
  • 站點主題選擇,以及顔色、logo、favicon.ico等設置;
  • 區塊設置,嵌入Google DFP, Analytics等代碼;
  • 角色添加、權限設置;
  • 留言設置,驗證碼方式設置;
  • 在線聯絡提交郵件的分類設置、外部SMTP設置。

另外,每種添加的新模塊都需要設置權限以及設置配置,例如:

  • autopath: 路徑别名自動生成的規則;
  • pagetitle: 各種類型頁面的标題構成規則;
  • boost: 緩存的各種設置;
  • xmlsitemap: 生成sitemap的規則。

1.3 準備數據

  • 從.mdb的Aceess文件(或者.xls的Execl文件)導出文本文件,注意字段間隔用制表符;
  • 如果有需要修改的地方,可以批量修改替換;
  • 注意編輯保存為UTF-8字符形式,以免漢字不被Drupal識别;
  • 在Drupal中新建内容類型,例如:機器可讀名稱“minglu”,人類可讀名稱“名錄”;
  • 在Drupal中的CCK模塊設置新的字段,例如:公司名稱、公司類型、法定代表人等,可全部用text類型字段,可以先手工新建内容類型,然後導入從其他站導出的相同結構字段列表;
  • 在Drupal中設置需要的Taxonomy詞彙表和術語,可用Taxonomy Import/Export via XML批量導入或者用Taxonomy Manager批量添加。

2 導入中

2.1 導入實驗

可先用少量數據來做導入實驗,例如10條、100條數據,隻需要很短時間可以完成導入,檢查是否有報錯、字段設置是否合理等。

2.2 正式導入

在Drupal後台用node import來導入.cvs或者.txt數據,第一行為标題,還要設置标題對應的CCK字段,然後開始導入。如果數據量大,例如10萬條、100萬條數據,需要較長時間完成,實測大約1秒5條左右。

3 導入後

3.1 内部工作

  • 修改字段設置、顯示設置、字段權限;
  • 修改Content Template,達到需要的變換效果;
  • 編寫php程序來更新node_term表,将頁面進行歸類;
  • 生成taxonomy菜單,添加主鍊接菜單等其它菜單項;
  • 如果需要,修改node.tpl.php和garland.info來添加新區域(Region)來放置區塊(Block);
  • 如果需要,模拟蜘蛛爬去,提前批量生成緩存文件;
  • 檢查内部搜索,批量生成文本索引。

3.2 外部工作

  • 修改robots.txt,包含提交sitemap的鍊接,允許訪問“/分類”開頭的頁面,禁止不需要訪問的頁面;
  • 修改sitemap的設置,定期自動生成網站地圖;
  • www.google.com/webmastertools中添加該網站;
  • www.google.com/adsense中添加URL渠道來跟蹤收入;
  • www.google.com/analytics中添加配置來跟蹤流量;
  • 服務器crontab設置,定期執行cron。

筆記先做到這裡,有新遇到的問題再回頭來補充修改。

回應

我整理成這樣幾步:

  1. 網站初設:創建數據庫、創建文件目錄、設置文件權限、Web方式(或者drush批量安裝和設置)運行安裝、設置網站名稱、添加模塊、外觀設置、用戶設置和添加等;
  2. 文件處理:文件分析、導出csv文件、編輯csv文件、上傳到服務器;
  3. 設置導入:新建術語表、内容類型、添加字段設置feeds import、導入;
  4. 後期處理:修改模闆添加views、添加block、生成搜索索引、網站地圖、提交搜索引擎等。

其中粗體字的幾個步驟比較麻煩,需要人工花費較多時間精力,其它部分可以盡量多用drush來批量處理。

我在Drupal 7與Drupal 6導入過程中最大的區别是用的導入模塊不一樣,Drupal 7下的Feeds有兩個大的優點:

  1. 對于術語字段可以自動分類(所以需要先建術語表、再設置内容類型中對應的字段、再在Feeds map中設置導入數據的對應),不需要導入後運行自己寫的PHP程序來歸類;
  2. 新增導入内容更新功能,用了GUID字段,避免重複導入。

James Qi / 祁勁松

新增導入内容更新功能,用了GUID字段,避免重複導入。
這個功能是怎麼實現更新的,試了很多次也沒摸索出來,求大神指教

Feeds導入内容避免重複很容易啊,你添加了GUID字段是對的,在做字段映射mapping的時候,将GUID設置成Used as unique,再就是“Node processor 的設置”中每個選項的意思都看明白、不選錯就可以。

James Qi / 祁勁松

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。