Notion断捨離用にConfluenceエクスポートファイル内の最終更新日付を洗い出してみた
ConfluenceのエクスポートファイルをNotionに取り込んだ後で悩まされる要因の一つではないかと思われるのは、最終更新日時が欠落することです。何年前のドキュメントもつい先日つくったドキュメントも、エクスポートファイルを取り込んだ後には同じ日付での扱いになります。
都度Confluenceを見に行くのは割と手間であるため、エクスポートしたファイル内に最終更新日が残っていないか、残っている場合は日付とページの組み合わせによる管理を実現できないか試してみました。
エクスポートファイル内にある日付
前提としてHTMLファイルによるエクスポートでダウンロードしておきます。Notionの取り込みはHTMLが前提になるためです。
エクスポートしたファイル内容を確認するために解凍します。
unzip Confluence-space-export-XXXXX.html.zip
出てきたファイルからHTMLファイルを一つ選んで開き、ページ内でMETA指定されている要素をたどります。すると最終更新日付の記載が確認できます。
ファイルとパスと日付の一覧出力
この表記はNotionに取り込み反映されないため、取り込まれたドキュメントは日付上ではフラットな扱いとなります。古いドキュメントかどうかの区別をつけやすくしたいので、zipファイル内のファイル名、Confluence上のパス、日付の3要素による確認用リストを出力してみます。
from pathlib import Path import re import argparse parser = argparse.ArgumentParser(description='Conflunece Archive.') parser.add_argument('workspace') args = parser.parse_args() workspace = args.workspace _filename = re.compile(fr"{workspace}/(.+_)?(?P<pageid>\d+).html") _title = re.compile(r'<title>.* : (?P<filename>[^<]+)</title>') _modified = re.compile(r'Created by <span class=\'author\'> .*</span>(, last modified)?( by <span class=\'editor\'> .*</span>)? on (?P<last_modified>\d{4}/\d{2}/\d{2})') _bc_line = re.compile(r'<span><a href=".+\.html">(?P<name>.+)</a></span>') output = Path(f"{workspace}/timestamp_list.txt").open('w') output.write(f"filename,breadcrumbs,modified\n") for p in Path(workspace).glob('*.html'): filename = str(p) if not _filename.match(filename): continue breadcrumbs_list = [] with open(filename, 'r') as search_bc: is_breadcrumbs_list = False is_line_text = False for line in search_bc: if is_breadcrumbs_list and re.match(r'.*(</ol>).*', line): is_breadcrumbs_list = False break if is_line_text: breadcrumbs_list.append(_bc_line.findall(line)[0]) is_line_text = False continue if is_breadcrumbs_list and (not is_line_text) and re.match(r'.*<li', line): is_line_text = True continue if (not is_breadcrumbs_list) and re.match(r'.*(<ol id="breadcrumbs">).*', line): is_breadcrumbs_list = True continue data = p.read_text() title = _title.findall(data)[0] modified = _modified.findall(data)[0][-1] breadcrumbs_list.pop(0) breadcrumbs_list.append(title) breadcrumbs = '/'.join(breadcrumbs_list) output.write(f"{filename},{breadcrumbs},{modified}\n")
% python timestamp_list.py WORKSPACE` % cat WORKSPACE/timestamp_list.txt filename,breadcrumbs,modified WORKSPACE/XXXXXXX.html,ホーム/開発者ガイド/環境構築/負荷試験環境構築,2018/04/13
HTML内の最終更新日時部分は作成者名と更新者名が異なっていたりする等様々なケースがありましたが、パターンをカバーして日付の取り逃しは防いでいます。
あとがき
製作者及び最終更新者も取れますが、日付を重用視していたために省きました。
Notion内でツリー整理を行うことを考慮して、各ドキュメントのコメントに最終更新日付を入れる等しておくと確認の手間を省けるかもしれません。