はてなブログからWordPressへの移行手順②【記事の準備編】

はてなブログはエクスポート面倒。詳細設定の下の方にある「記事のバックアップと製本サービス」から。10年くらいあると結構時間かかる。

このブログ主は真面目にはてなフォトライフを使っていたので「f.hatena.ne.jp」はなかった。

URL返還準備

このままだとURLの日付がハイフンになっちゃうとか何とかでこれを使え、とGeminiに言われる。

import os
import re

def split_and_fix_mt_export(input_file, max_size_mb=2):
    max_size_bytes = max_size_mb * 1024 * 1024
    file_index = 1
    current_size = 0
    
    base_name, ext = os.path.splitext(input_file)
    output_file = f"{base_name}_fixed_part{file_index}{ext}"
    out_f = open(output_file, 'w', encoding='utf-8')
    
    # はてなのURL(BASENAME: YYYY/MM/DD/123456)から末尾の数字だけを抽出
    basename_pattern = re.compile(r'^BASENAME:\s*\d{4}/\d{2}/\d{2}/(.+)$')
    
    try:
        with open(input_file, 'r', encoding='utf-8') as in_f:
            for line in in_f:
                # BASENAMEの行を検知して、数字6ケタだけになるように書き換え
                match = basename_pattern.match(line)
                if match:
                    new_basename = match.group(1)
                    line = f"BASENAME: {new_basename}\n"
                
                out_f.write(line)
                current_size += len(line.encode('utf-8'))
                
                # 記事の区切りで分割
                if line.strip() == '--------':
                    if current_size >= max_size_bytes:
                        out_f.close()
                        print(f"{output_file} を作成しました")
                        file_index += 1
                        current_size = 0
                        output_file = f"{base_name}_fixed_part{file_index}{ext}"
                        out_f = open(output_file, 'w', encoding='utf-8')
                        
        out_f.close()
        print("URLデータの修正と分割がすべて完了しました!")
        
    except Exception as e:
        print(f"エラー: {e}")

# 実行(対象のファイル名が合っているか確認してください)
split_and_fix_mt_export("sauna.color-hiyoko.com.export.txt", max_size_mb=2)

あとこのままだと記事の一番最初の画像をアイキャッチにしてしまうのでIMAGEで指定している画像を記事の先頭に追加する。

import os
import re

def process_export_file(input_file, max_size_mb=2):
    max_size_bytes = max_size_mb * 1024 * 1024
    file_index = 1
    current_size = 0
    
    base_name, ext = os.path.splitext(input_file)
    output_file = f"{base_name}_ready_part{file_index}{ext}"
    out_f = open(output_file, 'w', encoding='utf-8')
    
    basename_pattern = re.compile(r'^BASENAME:\s*\d{4}/\d{2}/\d{2}/(.+)$')
    current_image = None
    
    try:
        with open(input_file, 'r', encoding='utf-8') as in_f:
            for line in in_f:
                # URLの修正(ハイフン化防止)
                match = basename_pattern.match(line)
                if match:
                    line = f"BASENAME: {match.group(1)}\n"
                
                # アイキャッチ指定(IMAGE:)を記憶
                if line.startswith('IMAGE:'):
                    current_image = line.replace('IMAGE:', '').strip()
                
                out_f.write(line)
                current_size += len(line.encode('utf-8'))
                
                # BODYが来たら、その直後に記憶した画像をダミーとして挿入
                if line.startswith('BODY:') and current_image:
                    dummy_img = f'<p><img src="{current_image}" class="temp-eyecatch-dummy" /></p>\n'
                    out_f.write(dummy_img)
                    current_size += len(dummy_img.encode('utf-8'))
                
                # 記事の区切りで分割判定と状態リセット
                if line.strip() == '--------':
                    current_image = None
                    if current_size >= max_size_bytes:
                        out_f.close()
                        print(f"{output_file} を作成")
                        file_index += 1
                        current_size = 0
                        output_file = f"{base_name}_ready_part{file_index}{ext}"
                        out_f = open(output_file, 'w', encoding='utf-8')
                        
        out_f.close()
        print("加工と分割が完了しました。")
    except Exception as e:
        print(f"エラー: {e}")

# 実行
process_export_file("sauna.color-hiyoko.com.export.txt", max_size_mb=2)

ファイルをインポートする

設定→パーマリンクでカスタムにして「/entry/%year%/%monthnum%/%day%/%postname%」を設定

ツール→インポートからファイル選択してインポート

タイトルとURLをコピーしました