Twikoo评论转为WordPress评论

前提要求

你必须可以访问你的数据库

方法原理

将Twikoo的Json评论转换为Sql语句,直接从数据库插入评论

方法缺陷

  1. 这个方法无法转换元数据,即wp_commentmeta表数据不同步,但是影响不大
  2. 评论转换后,丢失嵌套关系

准备工作

  1. 电脑可以运行Java程序
  2. 提前在json.org下载JSON-java的jar包
  3. 准备好Twikoo导出的JSON文件

运行方法

1.创建Java项目,并导入以下代码

import org.json.JSONArray;  
import org.json.JSONObject;  
  
import java.io.*;  
import java.nio.charset.StandardCharsets;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
  
public class Main {  
  
    public static void main(String[] args) {  
        String inputFilePath = "D:\\comment.txt"; //Twikoo文件输入路径
        String outputFilePath = "D:\\out.txt";  //Sql文件输出路径
  
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(inputFilePath), StandardCharsets.UTF_8));  
             BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFilePath), StandardCharsets.UTF_8))) {  
  
            StringBuilder jsonBuilder = new StringBuilder();  
            String line;  
            boolean isArrayStarted = false; // 用来检查是否已经开始读取数组  
  
            // 读取文件内容,构建完整的JSON数组  
            while ((line = reader.readLine()) != null) {  
                // 假设JSON数组可能跨越多行,我们在这里构建完整的数组  
                jsonBuilder.append(line);  
  
                // 检查当前行是否是数组的结束(这取决于你的具体文件格式,可能是一个逗号,或者文件结束)  
                // 这里我们简单地假设文件结束就是数组的结束  
                if (line.trim().endsWith("]")) {  
                    isArrayStarted = true;  
                    break; // 假设整个数组已经读取完毕  
                }  
                // 如果数组跨越多行,并且不是最后一行,可能需要添加逗号或其他分隔符  
                // 这里我们假设没有额外的分隔符需要添加,因为JSONArray可以处理连续的JSON对象  
            }  
  
            if (!isArrayStarted) {  
                throw new IOException("JSON array not found or not properly formatted in the input file.");  
            }  
  
            // 现在jsonBuilder包含完整的JSON数组字符串  
            JSONArray jsonArray = new JSONArray(jsonBuilder.toString());  
  
            StringBuilder sqlStatements = new StringBuilder();  
            for (int i = 0; i < jsonArray.length(); i++) {  
                JSONObject commentObj = jsonArray.getJSONObject(i);  
                String sqlStatement = generateSqlStatement(commentObj);  
                sqlStatements.append(sqlStatement);  
  
                if ((i + 1) % 10 == 0) {  
                    sqlStatements.append("\n");  
                }  
            }  
  
            writer.write(sqlStatements.toString());  
            System.out.println("SQL statements have been written to " + outputFilePath);  
  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
  
     private static String generateSqlStatement(JSONObject commentObj) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String createdAt = sdf.format(new Date(commentObj.getLong("created")));

        return "INSERT INTO wp_comments (\n" +   //wp_comments改为数据库表的名字
                "comment_post_ID,\n" +
                "comment_author,\n" +
                "comment_author_email,\n" +
                "comment_author_url,\n" +
                "comment_author_IP,\n" +
                "comment_date,\n" +
                "comment_date_gmt,\n" +
                "comment_karma,\n" +
                "comment_content,\n" +
                "comment_approved,\n" +
                "comment_agent,\n" +
                "comment_type,\n" +
                "comment_parent,\n" +
                "user_id\n" +
                ") VALUES (\n" +
                "999,\n" +
                "'" + commentObj.getString("nick") + "',\n" +
                "'" + commentObj.getString("mail") + "',\n" +
                "'',\n" +
                "'" + commentObj.getString("ip") + "',\n" +
                "'" + createdAt + "',\n" +
                "'" + createdAt.substring(0, 10) + " " + createdAt.substring(11, 19) + "',\n" +
                "0,\n" +
                "'" + commentObj.getString("comment").replace("<p>", "").replace("</p>", "").trim() + "',\n" +
                "1,\n" +
                "'" + commentObj.getString("ua") + "',\n" +
                "'comment',\n" +
                "0, \n" +
                "0  \n" +
                ");\n";
    }
}

2.将输出文件的Sql语句在数据库运行。

大功告成!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共6条

请登录后发表评论