インポート方法#
xLog はmarkdownファイルを直接インポートし、front matterをサポートしているため、データベースから記事をエクスポートし、hexoの形式に設定するだけでインポートできます。
インポートプロセス#
Pdoを使用してデータベースのtypecho_contentsテーブルをファイルにエクスポートするだけです。以下はコード例であり、自分の状況に合わせて微調整できます。
<?php
// データベースに接続
$dsn = 'mysql:host=localhost;dbname=blog;charset=utf8';
$username = 'root';
$password = '123456';
$conn = new PDO($dsn, $username, $password);
// エラーハンドリングを設定
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// クエリを実行
$sql = 'SELECT * FROM `typecho_contents` WHERE `type` = "post"';
$stmt = $conn->prepare($sql);
$stmt->execute();
// 結果セットをループ処理
$results = $stmt->fetchAll();
foreach ($results as $result) {
    // データを出力
    echo $result['title'] . "\n\n";
    // タグと記事の関連付けを取得
    $s_sql = 'SELECT * FROM `typecho_relationships` WHERE `cid`=' . $result['cid'];
    $stmt2 = $conn->prepare($s_sql);
    $stmt2->execute();
    $relationships = [];
    foreach($stmt2->fetchAll() as $s){
        $relationships[] = $s['mid'];
    }
    // タグ名を取得
    $t_sql = 'SELECT `name` FROM `typecho_metas` WHERE `mid` in (\''. implode("','", $relationships) .'\') and `type`=\'\'';
    $stmt3 = $conn->prepare($t_sql);
    $stmt3->execute();
    $tags = [];
    foreach($stmt3->fetchAll() as $t){
        $tags[] = $t['name'];
    }
    // Markdownファイルを生成
    $str = '---
tags:
 - '. implode("\n - ", $tags) .'
type: note
title: "' . $result['title'] . '"
date: ' . date('Y-m-d H:i:s', $result['created']) . '
updated: ' . date('Y-m-d H:i:s', $result['modified']) . '
---
';
    file_put_contents(__DIR__ . '/blog/' . str_replace('/', '_', $result['title']) . '.md', str_replace('<!--markdown-->', $str, $result['text']));
}
// 接続を閉じる
$conn = null;
ファイルは現在のディレクトリのblogフォルダに保存されます(フォルダがない場合は作成してください)。
いくつかの問題#
以下の問題がまだ解決されていません。
- エクスポートされた md ファイルの
タグおよび最終更新日時が機能しない xLogをインポートした後、タグを編集できない(おそらくxLogのバグです)- 画像を自動的に
IPFSにアップロードできない 
最後の問題が一番困っているので、アップロードした記事を削除し、解決策を見つけるまで移行を延期します。