mixi日記ツールのメモ

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の名前の複数の画像ファイルを含む場合もあります。

テキストファイルnk.txtの形式

先頭行に日記のタイトル

一行の空行を入れて

以降に本文のテキストが続きます。

育児日記-散歩

午後の散歩は毎度のグランフロントに

ドラえも〜ん
((ミ゜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を開くと閲覧できます。


ツールのメモ

index.sh

#!/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ループの末尾。

inddex.py

カレントディレクトリの中にある、日付時刻の名前のディレクトリを参照して、 index.txt を生成します。

index.txt の形式は、ご存知

簡易なおれおれマークダウン 2019秋

簡易なおれおれマークダウン 2019秋の使用例

となっております。

#!/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 の内容を標準出力に出力。