cocologにはバックナンバーのタイトル一覧機能が無い。
バックナンバーは日別、週別、月別、カテゴリー別に表示することができるけど、記事のタイトル一覧を表示させる機能が無い。
しかたないので、毎年1年分のタイトル一覧を作成して投稿している。
さすがにタイトル一覧を手作業で作る気にはならないのでawkを使って自動的に作成している。
ところが、毎年書いているような気がする。
スクリプト言語(LL)は気合を入れて書くもんじゃないといつも適当に書いているので、1年後に使おうとするとどうやって使うのか思い出せなかったりする。
ということで、忘れないように今年使ったawkのスクリプトを書いておく。
post2index.awkは1年分の記事から記事のタイトルとリンク先とカテゴリを取り出して、一覧にするスクリプトだ。
使うのは gawkとnkf32/iconvなど。
gawkのインストール方法はくぐるとたくさん見つかる。
nkf32/iconvはあれば便利なければ UTF8toUTF16.batを使う。
〇手順
- バックナンバー保存
まず、bknumディレクトリを作って、そこにcocologからバクナンバーを1月づつhtmlファイルに保存する。
bknum \
+bn1.html
:
+bn12.html
- 文字コードを変換する
cocologの文字コードはutf-8なのでSJISに変換する。
- cmd.exeを使うなら
こんなバッチファイルを作って
UTF8toUTF16.bat bknum\*.html bk_sjis.html
- nkf32.exeを使うなら
nkf32 -W8 bknum\*.html > bk_sjis.html
- iconvを使うなら
iconv -f UTF-8 -t SJIS bknum\*.html > bk_sjis.html
- awkでもできるけどね
- 一覧に表示するカテゴリを指定する
日付とタイトルの間にカテゴリが入るようになっている。
ここに表示させるカテゴリはpost2index.awkを開いて
LCATEGORY="日記・コラム・つぶやき 日 書籍・雑誌 書 映画・テレビ TV 趣味 趣 ペット ぺ"
の行を編集する。
表示させたいcocolog上カテゴリと表示させる文字をスペースで区切って並べる。
- 一覧を作る
gawk -f post2index.awk bk_sjis.html > index.html
- coclogの記事作成の[htmlの編集]タブにindex.htmlを張り付ける。
〇スクリプト
post2index.awk
# # make index from cocolog entry # Dec. 2018 / Yoshi # # usage: gawk -f post2index.awk bknum\*.html > index.html # BEGIN { #------ ここを書き換える ----------- YEAR = 2018; LCATEGORY = "日記・コラム・つぶやき 日 書籍・雑誌 本 映画・テレビ 映 趣味 趣 ペット ぺ"; NCATEGORY = 5; #----------------------------------- FALSE = 0; TRUE = !FALSE; FCATEGORY = FALSE; nf = split(LCATEGORY, a); for (i=1; i<=nf; i+=2) { CATEGORY[++j,"category"] = a[i]; CATEGORY[j ,"mark"] = a[i+1]; } CATEGORY[0] = j; year = ""; month = ""; day = ""; url = ""; title = ""; category = ""; }
# # get category url FCATEGORY { FCATEGORY = FALSE; for (i=1; i<=CATEGORY[0]; i++) { if ($0 ~ CATEGORY[i, "category"]) { sub(/^[ \t]+/, ""); CATEGORY[i, "url"] = $0; } } next; }
/<li class=\"module-list-item\">/ { #" FCATEGORY = FALSE; next; }
# # stor itme list function stor_link() { link[date, "url"] = url; link[date, "title"] = title; link[date, "category"] = category; url = ""; title = ""; date = ""; category = ""; }
# # Date /<h2 class=\"date-header\">[0-9]+年[0-9]+月 ?[0-9]+日/ { #" if (match($0, /[0-9]+年[0-9]+月 ?[0-9]+日/)) { s = substr($0, RSTART, RLENGTH); nf = split(s, a, /[年月日]/); year = a[1]; month = a[2]; day = a[3]; } date = sprintf("%04d/%02d/%02d", year, month, day); if (DEBUG) printf("date=%s\n", date); }
# # Category /<span class=\"post-footers\">/ { #" j = 0; for (i=1; i<=CATEGORY[0]; i++) { if ($0 ~ CATEGORY[i, "category"]) { category = category (j?",":"") CATEGORY[i, "mark"]; j++; } } if (!FTWITTER) stor_link(); if (DEBUG) printf("category=|%s|\n", category); }
# # make title list # END { printf("<p>%dの投稿一覧\n", YEAR); printf("</p>\n<p>凡例:"); for (i=1; i<=CATEGORY[0]; i++) { printf(" %s:%s ", CATEGORY[i, "mark"], CATEGORY[i, "url"]) } for (m=1; m<=12; m++) { printf("</p>\n"); printf("<p>--%04d/%02d--<br>\n", YEAR, m); for (d=1; d<=31; d++) { date = sprintf("%04d/%02d/%02d", YEAR, m, d) if (link[date, "url"]) { printf("<a target=\"_blank\" "); printf("href=\"%s\">", link[date, "url"]); printf("(%s)", date); s = sprintf("%-" NCATEGORY "s", link[date, "category"]); gsub(/ /, "_", s); sub(/_+/, "<span style=\"color: #FFFFFF;\">&</span>",s); printf("[<tt>%s</tt>] ", s); printf("%s</a><br>\n", link[date, "title"]); } } } }
|
〇UTF-8→SJIS変換バッチファイル
(http://scripting.cocolog-nifty.com/blog/2017/09/utf-8jis-2668.htmlを参考にしました)
UTF8toUTF16.bat
start /min /wait cmd /c chcp.com 65001 ^& ^( set /p x=""^<nul ^& cmd /u /c type %1 ^) ^>%2 start /min /wait cmd /c chcp.com 932 ^& cmd /c type %2 ^>%3
|
【最近の投稿】【最近のプログラミング】【2018の投稿】【2017の投稿】【2016の投稿】【2015の投稿】
« 2018投稿一覧 |
トップページ
| 「お値段以上」はありえない <誰かが負担している> »
« 2018投稿一覧 |
トップページ
| 「お値段以上」はありえない <誰かが負担している> »
コメント