当前位置

MediaWiki网站内容迁移到Drupal平台

James Qi 在 2016年4月8日 - 11:02 提交
内容摘要:2010年前我们主要使用MediaWiki平台来建网站,2011年后改用更为通用的Drupal内容管理系统,新网站就用Drupal搭建,而老的Wiki网站就维持运行、管理留言等,两个系统中可能有一部分......

  2010年前我们主要使用MediaWiki平台来建网站,2011年后改用更为通用的Drupal内容管理系统,新网站就用Drupal搭建,而老的Wiki网站就维持运行、管理留言等,两个系统中可能有一部分相同的内容,都是独立导入添加的。现在想把一个MediaWiki中用户创建的页面内容迁移到Drupal网站中,思路是从MediaWiki导出XML文件,变换为CSV格式,然后导入Drupal站,具体记录如下:

  1. 获取需要迁移内容的页面标题:如果数量不多可以直接复制下来或者从分类页、搜索结果、DPL列表等地方复制,如果是同属于一个分类且页面比较多而又不超过5000条可以用[[特殊:导出页面]]中的“从分类添加页面”功能获取标题,如果有成千上万的页面就可以用SQL命令直接从数据库获取,例如SELECT jinglepage.page_title FROM `jinglepage` join `jinglecategorylinks` on jinglepage.`page_id`= `jinglecategorylinks` . `cl_from` WHERE jinglecategorylinks.`cl_to`= '骗子号码' and jinglepage.`page_namespace` = 0 ;
  2. 导出XML文件:如果不超过5000页,可以用[[特殊:导出页面]],把标题列表复制到输入框中,勾选“仅包含当前版本,而不是完整历史”,不勾选“包含模板”,勾选“另存为文件”,点击按钮“导出”就可以,如果页面数量超过5000页,可以分多次进行,也可以用maintenance/dumpBackup.php来进行,带参数pagelist指定页面列表文件;
  3. XML转CSV文件:尝试了直接在Drupal中用Feeds导入XML但不成功,就还是先转为熟悉的CSV格式,办法是自己编写一段小程序xml2csv.php(程序例子见下面);
  4. CSV导入Drupal站:使用Feeds模块,设置导入策略、映射关系,就可以把CSV文件导入。

  自己编写的xml2csv.php主要内容如下:

<?php
/*
* xml to csv convert
* input example: *.xml
* input fields: from mediawiki: title, ns, id, revision etc.
* output example: *.csv
* output fields: title, body, tags
* james qi 2016-4-7
*/

//print $argc;

ini_set('memory_limit','1024M');

if ( isset( $argv[1] ) ) {
  $xml_file_name = $argv[1];
} else {
  print "please provide xml file name arg\n";
  exit;
}

if ( isset( $argv[2] ) ) {
  $limit = $argv[2];
} else {
  $limit = -1;
}

$path_input = ".";
$name_input = $xml_file_name;

$path_output = $path_input;
$name_output = "$xml_file_name.csv";

$file_input = "$path_input/$name_input";
$file_output = "$path_output/$name_output";

$f_input = fopen($file_input,"r");
$f_output = fopen($file_output,"w");

$xml_array=simplexml_load_file($name_input); //将XML中的数据,读取到数组对象中 
$siteinfo = $xml_array->siteinfo;
$page = $xml_array->page;
//print_r($siteinfo);
//print_r($page);
$count = 0;
$head = "title\tbody\ttags";

fwrite( $f_output, "$head\n" );

foreach($xml_array as $key=>$tmp){ 
  if ($key == 'siteinfo') continue;
  $count++;
  $title = $tmp->title;
  $ns = $tmp->ns;
  $id = $tmp->id;

  $revision = $tmp->revision;
  $revision_id = $revision->id;
  $revision_timestamp = $revision->timestamp;
  $revision_text = $revision->text;

  echo "count=$count, title=$title, revision_timestamp=$revision_timestamp\n";
  $body = str_replace('<!--请在下面补充骗术细节-->{{骗子号码提示}}{{号码页面顶部}}','',$revision_text);
  $body = str_replace('<!--请在上面补充骗术细节-->{{号码页面底部}}<!--不要删除或者修改本行-->','',$body);
  $body = str_replace('特殊:用户贡献/','',$body);
  $body = str_replace('<!--不要删除或者修改本行-->','',$body);
  $body = str_replace('“[[{{PAGENAME}}]]”','这',$body);
  
  $output_line = "$title\t\"$body\"\t骗子曝光";
  fwrite( $f_output, "$output_line\n" );
}

fclose ($f_input);
fclose ($f_output);
?>

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符