【Lifehacks】mixi日記エントリのリスト化
■概要
mixi日記エントリの一覧データを生成する。
■目的
過去に書いた日記は、日記機能ページの左端にあるインデックスから一覧表示できるが、以下の点で不便である。
・時系列一覧となる。
・1ヶ月単位でしか一覧できない。
・画像(標準機能の場合)と冒頭3行が表示されるため、一覧性が低い。
→冒頭3行は記入時の改行を無視するため、ヘッダとしては見づらい。
そこで、以下の仕様で一覧できるデータを作成することにした。
・カテゴリ別に分類。
→タイトルに埋め込んだ分類タグを大分類とする。
小分類は手動で並び替え。
・任意の期間分の一覧を作成する。
・1エントリ2行。1行目はタイトル、2行目はURLとする。
■実装
・Windows NT拡張バッチスクリプトとPerl言語を使用。
・要ActivePerl。
・入力データとして、以下の2ファイルが必要。
- diary_index.html
→backup_mixiの日記エントリインデックスファイル。
- ClassLst.txt
→日記エントリ大分類キーワードファイル。
■課題
・小分類の自動ソート。
→エントリ記入時、冒頭に埋め込んでおけば、解析可能。
・行数の圧縮。
→プレミアム契約すればURL表示ではなくリンクにでき、1エントリ1行となる。
・実体参照記述(&xxx;)の自動変換。
→現状は手抜き実装のため手動変換。
・backup_mixiへの非依存化。
→Perlのmixiアクセスライブラリ利用等。
※10/01 mixi GUI変更に伴い、backup_mixiは現在使用不可。
・インデックス用領域の自動確保と自動アップロード。
→現状は手動確保、手動書き込み。分類が増えたら面倒。
■スクリプト
−−−− SgCnvDiaryIdx2Lst.bat −−−−
: : SgCnvDiaryIdx2Lst.bat : backup_mixiのdiary_index.htmlから日記エントリ一覧に変換。 : : Author: Orihika Ikuo : Create: 2007.10.01 : Update: 2007.XX.XX : : Note: : ・DIARYINDEXにはbackup_mixiの生成する日記一覧ファイルを指定。 : ・まず、DIARYENTLSTに指定したファイルにすべてのエントリ情報を出力。 : ・次に、CLASSLSTファイルに指定した分類毎にファイルを出力。 : set DIARYINDEX=diary_index.html set DIARYENTLST=diary_ent_lst.csv set CLASSLST=ClassLst.txt set PREFIX01=ListOf set PREFIX02=Fmt del %DIARYENTLST% perl SgCnvDiaryIdx2Lst.pl < %DIARYINDEX% > %DIARYENTLST% for /F %%i in (%CLASSLST%) do ( find "%%i" %DIARYENTLST% > %PREFIX01%%%i.txt ) for /F %%i in (%CLASSLST%) do ( perl SgFmtDiaryEntLst.pl < %PREFIX01%%%i.txt > %PREFIX02%%%i.txt )
−−−− SgCnvDiaryIdx2Lst.pl −−−−
# # SgCnvDiaryIdx2Lst.pl # backup_mixiのdiary_index.htmlから日記エントリ一覧に変換。 # # Author: Orihika Ikuo # Create: 2007.10.01 # Update: 2007.XX.XX # #### Main routine ########################################################## &SgCnvDiaryIdx2Lst; #### Sub routine ########################################################### sub SgCnvDiaryIdx2Lst { local($year) = ""; local($month) = ""; local($day) = ""; local($hour) = ""; local($sec) = ""; local($class) = ""; local($line) = ""; # Read line local($title) = ""; # Title local($ent_id) = ""; # Dntry id while ($line = <STDIN>) { chop($line); if ($line =~ m/.*>(\d\d\d\d)年(\d*)月<.*/) { $year = $1; } elsif ($line =~ m/.*(\d\d)月(\d\d)日 (\d\d):(\d\d).*href=\'diary.(\d*).html\'>【(.*)】(.*)<.a>/) { $month = $1; $day = $2; $hour = $3; $sec = $4; $ent_id = $5; $class = $6; $title = $7; print "$year,$month,$day,$hour,$sec,$ent_id,$class,$title\n"; } else { } } }
−−−− SgFmtDiaryEntLst.pl −−−−
# # SgFmtDiaryEntLst.pl # 日記エントリ一覧をフォーマットする。 # # Author: Orihika Ikuo # Create: 2007.10.01 # Update: 2007.XX.XX # #### Constant & Global #################################################### $url_main = "http://mixi.jp/view_diary.pl"; $var_id = "id="; $var_owner_id = "owner_id="; $sep01 = "?"; $sep02 = "&"; $val_owner_id = "327817"; $paren01 = "("; $paren02 = ")"; $paren11 = "【"; $paren12 = "】"; #### Main routine ########################################################## &SgFmtDiaryEntLst; #### Sub routine ########################################################### sub SgFmtDiaryEntLst { local($year) = ""; local($month) = ""; local($day) = ""; local($hour) = ""; local($sec) = ""; local($class) = ""; local($line) = ""; # Read line local($title) = ""; # Title local($ent_id) = ""; # Entry id while ($line = <STDIN>) { chop($line); if ($line eq "") { next; } elsif ( $line =~ m/^----.*/) { next; } else { ($year, $month, $day, $hour, $sec, $ent_id, $class, $title) = split(/,/, $line); print $paren11, $class, $paren12; print $title, "\n"; print $paren01; print $url_main, $sep01, $var_id, $ent_id, $sep02; print $var_owner_id, $val_owner_id; print $paren02, "\n"; } } }
−−−− ClassLst.txt −−−−
Book Tool Item Memo Lifehacks