My Documents · 2023/05/22 0

一次烂尾工程:phpwind转Mastodon

phpwind 表:
pw_members 用户信息主表 (取用户名,密码,邮箱)
pw_memberdata 用户基本信息(取发帖数)

取发帖大于0的用户信息
SELECT uid,username,email,regdate FROM pw_members t JOIN pw_memberdata m ON t.uid = m.uid WHERE m.postnum > 0 AND t.uid = m.uid;

pw_threads 帖子基本信息表 (取发帖人,标题,时间)
pw_tmsgs 帖子内容
pw_posts 回复帖信息表

查询uid=1的主题贴,及帖子内容
SELECT * FROM pw_threads t JOIN pw_tmsgs m ON t.tid = m.tid WHERE t.authorid = 1 AND t.tid = m.tid

查询所有主题的tid,发帖人,发帖人ID,帖子标题,发帖日期,帖子内容
SELECT t.tid,t.author,t.authorid,t.subject,t.postdate,m.content FROM pw_threads t JOIN pw_tmsgs m ON t.tid = m.tid WHERE t.tid = m.tid

查询回复,按时间排序
SELECT pid,tid,author,authorid,FROM_UNIXTIME(postdate, '%Y/%m/%d %T') AS postdate,subject,content FROM sims2bbs.pw_posts ORDER BY postdate

导出csv文件,用excel打开
如果乱码,编码需要修改为gb_2318-80

( int( datetime(2022,11,11,00,00).timestamp() ) << 16 ) * 1000
正确的计算结果为 109322226892800000。
在excel中把发帖日期转换为Mastodon ID
=(F2-DATE(1970,1,1))864001000*2^16

生成一个24小时制随机时间,精确到毫秒:
=TIME(RANDBETWEEN(0,23),RANDBETWEEN(0,59),RANDBETWEEN(0,59))+RANDBETWEEN(0,999)/86400000

=B2&""
把数字转换成文本,复制后粘贴,值

mastodon 数据表
accounts 本地联邦用户信息
users 本地注册用户信息
account_stats 用户发文信息
statuses 用户发文信息表

先导入accounts表,再导入users及其他
users表中邮箱不能重复
通过用户account_id进行关联
account_id要存储为文本格式
表中涉及到时间的地方只需要精确到日期

了解数据库结构以后理论上可以将任何程序数据转换到Mastodon中, 但是我在转换一半的时候还是放弃了, 毕竟上古时期的论坛和新兴Mastodon始终显得不那么契合, 所以还是来一个全新的开始吧.

以上随手记录, 希望能帮到需要的人.