2022/JAN/08
更新履歴
日付
変更内容 2021/DEC/30
新規作成 2022/JAN/08
タイプミス修正
娘が生まれてから小学校に上がるまでくらいの期間、 mixi日記に写真と一言をせっせと記録していました。
いつしかfacebookに移行してmixiはほったらかしに。
ふと思いだして久々にmixiにログイン。
大量の写真と文章を吸い上げてみたものの、どうしたものか?
一旦、次の形式でまとめて置いていました。
ディレクトリ構成
mixi/ all/ 20121018_1753/ 1876493460_121.jpg 1876493460_211.jpg 1876493460_213.jpg nk.txt 20130208_0107/ nk.txt 20130221_1150/ nk.txt 20130222_1314/ : 20130222_1958/ 1893579506_203.jpg nk.txt : 20130413_1138/ 1898891627_12.jpg 1898891627_177.jpg 1898891627_212.jpg nk.txt :
日付時刻を名前にしたディレクトリの中に、 nk.txtという名前のテキストファイルが必ず1つあります。
xxx.jpgの名前の複数の画像ファイルを含む場合もあります。
先頭行に日記のタイトル
一行の空行を入れて
以降に本文のテキストが続きます。
育児日記-散歩 午後の散歩は毎度のグランフロントに ドラえも〜ん ((ミ゜o゜ミ)) でもやっぱり 階段がスキ
みたいな感じです。
エンコーディングはUTF-8形式で。
吸い上げた mixi/all/ のディレクトリを永らく放置してましたが、、、
何とか閲覧できる状態にすべくツールを作成してみました。
えいや〜っと作ったので、記録の意味でここに説明を記しておきます。
mixi/ index.sh index.py all/ [日付時刻_ディレクトリ] [日付時刻_ディレクトリ] [日付時刻_ディレクトリ] :
index.sh と index.py の構成です。
mixi/ ディレクトリに移動して、index.sh を実行します。
index.sh の中から index.py を使用しています。
index.sh
#!/bin/bash
DIRS="all 2012 2013 2014 2015 2016 2017"
#DIRS="2012 2013 2014 2015 2016 2017"
for DIR in ${DIRS}; do
echo ${DIR}
mkdir -p ${DIR}
cd ${DIR}
if [ ! "${DIR}" = "all" ]; then
ls -d ../all/${DIR}* | sed -e 's/.*/ln -s &/' | sh
fi
../index.py | nkf -j > index.txt ; python -m to_html -h head-kon.yaml
find . -type l | xargs rm
cd ..
done
# EOF
index.py
#!/usr/bin/env python
import os
import sys
import cmd_ut
def cmd_lst( cmd ):
s = cmd_ut.call( cmd, b2s=True ).strip()
return s.split( '\n' ) if s else []
out_lst = lambda lst: sys.stdout.write( '\n'.join( lst + [ '' ] ) )
def run():
out_lst( [ 'h1', 'mixi nikki', '', '@INDEX', '', '----', '' ] )
DIRS = cmd_lst( "ls | grep '^[0-9_]*$'" )
for DIR in DIRS:
lst = cmd_lst( 'cat {}/nk.txt'.format( DIR ) )
lst_o = [ 'h2', DIR, '', 'h3', lst[ 0 ], '' ]
imgs = cmd_lst( 'ls {}/*.jpg 2> /dev/null'.format( DIR ) )
for img in imgs:
img = os.path.relpath( os.path.realpath( img ) )
s = '[[ img | {} ]]'.format( img )
lst_o += [ s, '' ]
lst_o += lst[ 2 : ] + [ '', '----', '' ]
out_lst( lst_o )
if __name__ == "__main__":
run()
# EOF
$ cd mixi $ ./index.sh
実行すると、
all/ の下に index.html が生成されます。
index.sh の中にハードコーディングしてますが、 mixi/ 直下に 2012/, 2013/, 2014/, 2015/, 2016/, 2017/ のディレクトリ生成されます。
各年代のディレクトリの中に index.html が生成されます。
ブラウザで各index.htmlを開くと閲覧できます。
#!/bin/bash DIRS="all 2012 2013 2014 2015 2016 2017" #DIRS="2012 2013 2014 2015 2016 2017" for DIR in ${DIRS}; do
all 2012 2013 ... の各年代のディレクトリについて
echo ${DIR} mkdir -p ${DIR} cd ${DIR}
ディレクトリを作って (既にあっても作ろうとはします。-p オプションでエラーにはならず)
ディレクトリに移動
if [ ! "${DIR}" = "all" ]; then ls -d ../all/${DIR}* | sed -e 's/.*/ln -s &/' | sh fi
all 以外の各年代のディレクトリの場合だけ実行します
all/以下の自身の年代を含む名前のディレクトリについて、 そのall/以下のディレクトリへのシンボリックリンクを作成します。
../index.py | nkf -j > index.txt ; python -m to_html -h head-kon.yaml
今の位置は作成した自身の年代のディレクトリ内で、 その中にはall/以下の日付時刻の名前のディレクトリへのシンボリックリンクが多数あります。
index.py を実行して出力されるテキストをJISコードに変換して index.txt として保存します。
to_html を実行して index.txt を index.html に変換します。
find . -type l | xargs rm
作成したシンボリックリンクを削除します。
cd .. done # EOF
元の1つ上のディレクトリに移動して、forループの末尾。
カレントディレクトリの中にある、日付時刻の名前のディレクトリを参照して、 index.txt を生成します。
index.txt の形式は、ご存知
となっております。
#!/usr/bin/env python import os import sys import cmd_ut def cmd_lst( cmd ): s = cmd_ut.call( cmd, b2s=True ).strip() return s.split( '\n' ) if s else []
cmd_lst( cmd )関数を定義
cmdの文字列の外部コマンドを実行して、 その結果の標準出力の各行をリストにして返します。
out_lst = lambda lst: sys.stdout.write( '\n'.join( lst + [ '' ] ) )
out_lst( lst )関数を定義
文字列のリストを複数行のテキストデータとして標準出力に出力します。
def run(): out_lst( [ 'h1', 'mixi nikki', '', '@INDEX', '', '----', '' ] )
index.txt の先頭部分のおきまりの形式を出力
DIRS = cmd_lst( "ls | grep '^[0-9_]*$'" )
カレントディレクトリのls結果から、数字と'_'だけで構成されるもののリストを取得して、 変数DIRSに保持。
for DIR in DIRS:
各ディレクトリについて以下を実行。
lst = cmd_lst( 'cat {}/nk.txt'.format( DIR ) )
nk.txt の内容を行ごとにリストにしてlstに保持。
lst_o = [ 'h2', DIR, '', 'h3', lst[ 0 ], '' ]
ディレクトリ名、nk.txt の先頭行の内容を見出しにする形式でlst_oにセット
imgs = cmd_lst( 'ls {}/*.jpg 2> /dev/null'.format( DIR ) )
.jpgで終わるファイルがあれば、リストにしてimgsに保持。
なければimgsは空リストの[]に。
for img in imgs:
1つの.jpgについて以下を実行。
img = os.path.relpath( os.path.realpath( img ) )
imgのファイルパスに含まれるall/以下へのシンボリックリンクを実際のパスになおして、 さらにカレントディレクトリからの相対パスにしてimgにセットしなおし。
s = '[[ img | {} ]]'.format( img ) lst_o += [ s, '' ]
画像を表示するezmdの形式にして、lst_o に追加。
lst_o += lst[ 2 : ] + [ '', '----', '' ] out_lst( lst_o ) if __name__ == "__main__": run() # EOF
末尾のラインを追加して、lst_o の内容を標準出力に出力。