ScrapboxのSnapshotsから特定の日付を取り出すスクリプト
ソース
動作環境:Python 3.9.7以降
code:save_snapshot.py
from ast import arg
import json
from datetime import date, datetime as dt
# from datetime import timezone as tz
# from datetime import timedelta as td
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-j", "--json-file-name", type=str, help="読み込むJSONのファイル名")
parser.add_argument("-d", "--date", type=str, help="保存する日付")
args = parser.parse_args()
def ext_snapshot_dates(data:dict):
"""オブジェクトからスナップショットの日付のみを取り出してlistに格納します。"""
s = []
return s
def print_dates(dates:list, formatted_date:bool=True) -> None:
"""
リストに格納された日付を一覧表示します。
Params
-------
dates
UNIX timeが格納されたlist。
ext_snapshot_datesの返り値をそのまま使用できます。
formatted_date
日付を整形して表示する。
例) "2022/02/05 07:19:27"
"""
s = ""
for i in range(len(dates)):
if formatted_date:
else:
s += str(d)
if i % 5 == 0: s += ",\n"
else : s += ", "
print(s)
def format_date(unixtime:int) -> str:
"""UNIX timeを読める形で整形する。"""
t = dt.fromtimestamp(int(unixtime))
return "%04d/%02d/%02d %02d:%02d:%02d" % (t.year,t.month,t.day,t.hour,t.minute,t.second)
def search_date(pattern , dates:list) -> int:
"""
日付を検索する
Params
----
pattern
検索する日付。
format_dateで整形された日付か、UNIX timeに対応している。
dates
UNIX timeが格納されたlist。
Return
----
一致した要素番号(インデックス)を返す。
見つからなかった場合は-1を返す。
"""
for i in range(len(dates)):
if pattern == str(datesi): return i if pattern == format_date(datesi): return i return -1
if(args.json_file_name is None): FILE_NAME = input("ファイル名を入力 >>> ")
else: FILE_NAME = args.json_file_name
with open(FILE_NAME, mode="rt", encoding="utf-8") as f:
data = json.load(f)
dates = ext_snapshot_dates(data)
if(args.date is None):
print_dates(dates)
print("どの日付のスナップショットを取り出しますか?")
d = input("上の中から選んでください >>> ")
d_index = search_date(d, dates)
while(d_index < 0):
d = input("見つからなかったのでもう一度入力 >>> ")
d_index = search_date(d, dates)
else:
d = args.date
d_index = search_date(d, dates)
if(d_index < 0):
print("--dateの値に一致する日付が見つかりませんでした。")
exit(1)
print(f"{d_index}番目のスナップショットを保存します。")
with open(f"{d_index}.json", mode="wt", encoding="utf-8") as f:
実行後はカレントディレクトリに<番号>.jsonが保存される。
改善案
取り消し線がついている項目は対応済み
コマンド引数に対応すべきだった
タイムゾーンの固定化
UNIXTimeで表示する
UNIXTimeの入力を受け付ける