この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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内でツリー整理を行うことを考慮して、各ドキュメントのコメントに最終更新日付を入れる等しておくと確認の手間を省けるかもしれません。