如何优雅地将Discuz转换为Flarum论坛

2020.11.21更新:
最近有意愿用MyBatis重写一个,这个太臃肿了。具体就坐等我另开新坑吧!

以下为原文:

什么是D2F?

这是一个可以将Discuz系统的论坛内基本数据移动到Flarum系统的小工具

简单说就是Discu转换Flarum的工具,论坛系统转换。

GitHub地址:https://github.com/KeKe12030/DiscuzToFlarum
演示站点:
DZ站点:https://bbs.mcplugin.cn
转换后的Flarum站点:http://test.mcplugin.cn

注:这里的Flarum一定是没有添加任何第三方插件的纯净Flarum,否则会出现导入失败的问题。
过您想要使用D2F,请您仔细阅认真读本博客!


目前D2F实现的功能

  • 转移Discuz用户的邮箱、注册时间、回复内容、头像 (密码无法迁移怎么办?看我上面的博客教程里写了)
  • 讲指定fid(Discuz论坛版块ID)中的帖子,转移到对应的discussion_id当中(Flarum的板块ID)
    目前帖子仅支持displayorder>-1(即可以被展示的帖子,被删除的帖子暂不支持)
  • 帖子只有帖子内容、作者、阅览量、、回复的迁移(预计未来版本添加帖子附件的转化)
  • DZ论坛FID(板块ID)与Flarum论坛ids.yml的对照表文件,方便自动化转化论坛所有帖子
  • replace.yml里新增自定义替换文字

未来D2F添加的功能

  • 论坛用户密码、注册IP的转化
  • 帖子附件的转化
  • 帖子锁帖的转化
  • 更多细节的开发尚待发现

1.如何获得D2F?

1.下载源码后,自行编译。
Github地址:https://github.com/KeKe12030/DiscuzToFlarum
2.直接下载Jar包。
Github Relesases:https://github.com/KeKe12030/DiscuzToFlarum/releases

需要的第三方Jar包:JDBC

2.如何运行D2F?

运行前的提示:
1.请清空Flarum论坛的Users表和Discussion表和Discussion_tag表,这三个表中不要留存任何数据。
2.请不要安装其他的第三方插件,Flarmn必须是纯净的,未经过使用的。
Ⅰ.如果您是下载的源码:
打开您下载好的源码,找到src目录下的三个配置文件,根据提示配置(下方将会讲解如何配置)
配置好之后,添加运行环境(JDBC需要添加到库中)后运行Main.java


Ⅱ.如果您下载的是Jar包:
压缩程序(如360压缩包,WINRAR等)打开您下载好的Jar包,找到三个配置文件,根据提示配置(下方将会讲解如何配置)
配置好之后,输入java -jar xxxx.jar运行Jar包(xxxx.jar为您下载的jar包文件名)


3.如何配置D2F?

根据上一步的教程,您现在已经找到了配置文件。

通过记事本/其他的文本工具打开它们后,根据下面的提示进行配置:


  1. config.properties
    此配置文件用于配置D2F的数据库配置,以及一些其他拓展功能的配置
#使用flarum论坛系统的数据库配置

# FL数据库用户名
flarumUserName:flarum
# FL数据库密码
flarumUserPass:example
# FL数据库链接地址
#(这里的 /flarum 请修改成您的数据库的库名)
flarumAddress:jdbc:mysql://127.0.0.1:3306/flarum?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
# flarum论坛系统的数据表前缀(在安装flarum的时候填写的那一个)
flarumStartName:flarum_

##################

# 使用discuz论坛系统的数据库配置

# DZ数据库用户名
discuzUserName:discuz
# DZ数据库密码
discuzUserPass:example
# 数据库链接地址
#(这里的 /discuz 请修改成您的数据库的库名)
discuzAddress:jdbc:mysql://127.0.0.1:3306/discuz?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
# discuz论坛系统的数据表前缀(在安装discuz的时候填写的那一个,默认是`pre_`)
discuzStartName:pre_
# discuz论坛系统的uc_server的地址
# (如果没有手动修改过uc_server服务器地址
# 就填写http(s)://您的域名/uc_server 【http括号内的s根据您的实际情况添加】)
ucserverAddress:https://example.com/uc_server
# 是否开启用户如果未上传头像,自动获取discuz自带的默认头像(true为开启,false为关闭)
# 开启之后,未上传用户头像的用户将会显示您的discuz自带的默认头像
# 如果关闭,将会显示flarum论坛默认的头像
defaultDiscuzAvatar:false


##################
# 其他配置


# 是否开启自定义替换文本(在replace.yml中配置您所需要替换的文本)
replaceStrs:true

2. replace.yml
此配置文件用于配置您所需要替换的字符(config.yml中的replaceStrs设置为true则开启,false则关闭)

# 这里是配置您所需要替换的自定义文本的,如需使用,请将config.yml中的replaceStrs设置为true,关闭设置为false
# 这个文本中配置的内容,将会把帖子中所有出现等号左边的文字替换为等号右边。
# 建议使用这个功能将原图片存储服务器论坛地址替换为现论坛图片存储服务器域名地址
# 目标文字=替换文字
# 如:
# https://image.mcplugin.cn=https://bbs.mcplugin.cn
# old=new
hellow=hi
baidu=google

3. ids.yml
此配置文件是将您Discuz论坛中的板块ID替换为Flarum论坛中的板块ID(或者叫做分类ID)
格式:Discuz的板块ID=Flarum的板块ID
等号左边数字只能为一个,等号右边数字可以为多个,用英文的逗号,隔开

# Discuz的板块ID=Flarum的板块ID(如有多个可加逗号【注意是英文逗号】)
# 如:
# 1=4
# 2=3,1,2,3,43
# 3=2,4,3
# 等
1=1
2=2
3=3,4,5

4.最后

一切准备就绪,配置完成之后,根据第2步的提示,运行D2F即可。


常见问题:

  1. 目前无法转换密码怎么办?
    因为邮箱被导入了,所以可以使用Flarum自带的邮箱找回密码,让用户重新设置密码(唯一的解决方法)

2. 转换好慢啊,效率低,我论坛数据多怎么办?
什么?代码冗余?啊这,别骂了别骂了,我有空一定改。
现在的工具是面向过程版的,后续会更改为面向对象思想版的,冗余会大大减少。
现在只是测试版,效率很低,建议等后续版本。

3. 我转换完成之后,管理员账号怎么登陆?
使用第一个常见问题的方法,通过忘记密码进行登录,UID1的账号默认是管理员账号。

如果您有其他问题,欢迎在https://github.com/KeKe12030/DiscuzToFlarum/issues 提交Issues


作者的一些留言:

说一下开发原因吧,因为总被人吐槽用Discuz太土了,上个世纪的风格和上个世纪的产物了, 又被人推荐了Flarum,安装了一下试了试,感觉还不错,但是就是数据没法转移。 于是在半年前我尝试去转移数据,基础的数据可以转移了,但是还有很多数据没办法迁移, 后续等待其他大佬开发比较NB的转换程序,或者说慢慢等我划水写完把。 这个工具建议给有Java基础的人员来用,因为可以高度DIY,我把所有功能全封装了。 FlarumSQLUtil是专门控制Flarum数据库的,DiscuzSQLUtil是专门控制DZ数据库库的,所有你想获得的东西 前提是我写了 都可以通过getXXXX()方法获得到

什么?你说这太屑了,功能一点都不多?

啊这,我也没办法,没时间继续写下去,只能抽空改一改,增加一些新功能,可能这个东西也没人用吧。


示例图片:

《如何优雅地将Discuz转换为Flarum论坛》有6个想法

  1. 您好,我使用了您的转换工具,但是在配置好三个文件运行jar包后发现转换内容看起来是您的论坛的内容,并不是我自己的论坛的内容。在检查源码以及数据库后也并未发现哪里有问题,能否解答一下我的问题呢?

    1. 感谢您的测试,原因是我配置文件的用于测试的数据库链接忘记更改了,用压缩包打开jar,更改config.properties里的数据库地址,我这周更新一下release。之前忘记检查就发布了,抱歉草率了。


      2020.09.19更新:已修复,上传好了新的Jar包

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code