keep2logseq.py

nogajun
nogajun

Google KeepのJSONファイルをLogseqのMarkdownに変換する

Google KeepからエクスポートしたJSONファイルをlogseqのjournal用のMarkdownに変換します。

journalとして取り込むのは、logseqがインポートしたファイルの時間をインポートできないからです。あと、Linuxでしか使っていないのでWindowsやMacで使えるかわからないです。

usage

python keep2logseq.py -o (logseqのjournalフォルダ) Takeout/Keep/*json

keep2logseq.py

import json
import argparse
import sys
import os
import datetime

def main(args):
    for i in args.infile:
        print(i.name)

        # JSON読み込み
        data = json.load(i)

        # ごみ箱かアーカイブは処理しない
        if (data["isTrashed"] is True) or (data["isArchived"] is True):
            continue

        # 作成日時
        create_date = int(data["createdTimestampUsec"]) // 1000000
        cdate = datetime.datetime.fromtimestamp(create_date).date()
        ctime = datetime.datetime.fromtimestamp(create_date).time()

        # ファイル名に日付をセット
        epath = args.output
        efile = str(cdate).replace("-", "_")
        expfile = "{}/{}.md".format(epath, efile)

        # リストに出力データをセットする
        expdata = []

        # タイトル追加
        title = ""
        if "title" in data:
            title = data["title"]
        expdata.append("- {} ({})\n".format(title, str(ctime)))

        # タグ追加
        tags = ""
        # ピン止めされてたらタグ出力
        if data["isPinned"] is True:
            tags += "#isPinned "
        # ラベルがあったらタグで出力
        if "labels" in data:
            for j in data["labels"]:
                tags += "#{} ".format(j["name"])
        expdata.append("\t- {}\n".format(tags))

        # コンテンツ追加
        if "textContent" in data:
            expdata.append("\t- ```text\n{}\n\t  ```\n\t- \n".format(data["textContent"]))

        # 添付ファイル追加
        if "attachments" in data:
            fp = data["attachments"][0]["filePath"]
            expdata.append("\t- ![{}](../assets/{})\n".format(fp, fp))

        with open(expfile, mode="a") as f:
            f.writelines(expdata)

parser = argparse.ArgumentParser(description="Convert Google Keep JSON file to Logseq Markdown file.", add_help=True)
parser.add_argument("-o", "--output", default=os.path.dirname(__file__), help="Output directory")
parser.add_argument("infile", type=argparse.FileType("r"), default=sys.stdin, nargs="+", help="Google Keep json (.json)")
args = parser.parse_args()

main(args)