ObsidianのページをWordPressへ投稿するためにPythonのスクリプトを作った

Obsidian のページを WordPress へ投稿しようと思ったら、その数が 100 を超えていたためコピペではやってられないので簡単なスクリプトを書いた、という内容です。

注意点(追記)

  • 以下のスクリプトを実施して、Obisidian (.md) → CSV → WP が実現できたかのように見えた
  • が、Markdown 内のカンマの解釈のせいか、意図しない読み込みとなってしまいデータベース内がグチャグチャになってしまった
    • WP 新規インストールするハメに。。。
  • とりあえず Obsidian → WP をやりたいなら、WP CLI を使った方がよい(以下参照)

前提

  • 仕組みとしてはシンプルで、フォルダの中にある Markdown ファイルの中身を順々に取り出して、CSV を生成 → ワードプレスで吸い上げるというだけのものです
  • なので
    • 基本的に Obsidian の中にたまった記事の「棚卸し」として、ワードプレスの「新規記事」として吐き出すというだけのもの
    • 「記事の更新」となると、投稿 ID を取得してきて紐付かせる必要があるし、そこまでいくとそもそも面倒くさい
      • また、CSV 一括登録となるため、すべての記事の更新日がおかしくなる(多分)
  • ローカルの Markdown ファイルを手軽に投稿・更新したいなら、ターミナルから SQL に内容を直接放り込むといったやり方の方がよさそう

Pythonスクリプト

main.py

import tmp
import pandas as pd
import os

dir = '/Users/hoge/Downloads/BLOG'
categories = tmp.files_tolist_from_dir(dir)

list_for_df = []

for category in categories:
    markdown_files = tmp.files_tolist_from_dir(f'{dir}/{category}')
    for markdown_file in markdown_files:
        file_content = tmp.file_to_str(f'{dir}/{category}/{markdown_file}')
        post_title = markdown_file.split('.md')[0]
        list_for_df.append([post_title, file_content, category])

df = pd.DataFrame(list_for_df, columns=['post_title', 'post_content', 'post_category'])
df['post_id'] = ''
df['post_type'] = 'post'
df['post_status'] = 'publish'

tmp.df_to_csv(df, '/Users/hoge/Downloads/file.csv')

tmp.py

import os

# ディレクトリ内の。フォルダ・ファイルをリスト化 ///////////////////////////////////////////////////
def files_tolist_from_dir(dir):
    files = os.listdir(dir)
    files = [i for i in files if i[0] != '.'] # 不可視ファイル削除
    files.sort() # 順番が保持されないのでソートをかける
    return files

# テキストファイルの本文を文字列として取得 ///////////////////////////////////////////////////
def file_to_str(filepath):
    with open(filepath) as f:
        return f.read()

# データフレームをCSVエクスポート //////////////////////////////////////////////////
def df_to_csv(df, filepath, header=True, index=False):
    df.to_csv(filepath, header=header, index=index)