わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

過去ログからエントリURLを生成

昨日の(ひとつめの)エントリを書くにあたって,見出しの中に「質問」を含むエントリをチェックしておきたいなと思いました.
しかし,日記上部の検索フォームを使うのでは,見出し以外に「質問」を含むものが多数,ヒットしてしまいます.日記のテキストファイルは月1回の頻度でダウンロードして保存していますが,XMLファイルなもんで,そのままでは見やすいとは言えません.それでも見てみると,最初に「質問」を含む見出しを書いたのが

 *1196802262*[教育] いい質問を作り出す5つ+4つのアイデア

で,この情報だけからでは,該当するページをブラウザで開けません.…いや,1196802262はいわゆるUnix timeのことなんだから,一手間加えればURLが出てくるじゃないか,と気づいて,手を動かしました.
まずはXMLファイルのダウンロード方法です.

  1. 自分のブログを開きます.自分のidでログインしておきます.
  2. 「管理」をクリックします.当雑記のデザインであれば,ログインしているとページ上部にあります.
  3. 左のカラムの中で「データ管理」を見つけ,クリックします.
  4. はてなの日記データ形式」の「ダウンロード」をクリックします.これでファイルを取得できます.自分の場合はtakehikom.xmlで保存されます.

…というのは,漢字とカタカナの使用回数でも書いていました.2011年2月17日の時点で,takehikom.xmlは7172506バイト,gzip圧縮して2454697バイト.いずれも1年8か月前と比べておよそ倍ですか.

さて,この非圧縮XMLファイルから,エントリの見出しになっている行だけを取り出し,かつそれぞれに対してURLを求めるのは,スクリプトファイルでなくてもワンライナーでいいでしょう.こうなりました*1

$ grep "^\*[0-9]\+\*" takehikom.xml | ruby -pe '$_.sub!(/.(\d+)/){Time.at($1.to_i).strftime("http://d.hatena.ne.jp/takehikom/%Y%m%d/")+$1+" "}' > takehikom_title.txt

いくつか注意点があります.

自分の雑記に対しては,出力が1972行となります*2.もともと知りたかった,「質問」で,絞り込みますか.

$ grep '質問' takehikom_title.txt
http://d.hatena.ne.jp/takehikom/20071205/1196802262 *[教育] いい質問を作り出す5 つ+4つのアイデア
http://d.hatena.ne.jp/takehikom/20071215/1197669561 *[学会] じんもんこん2007 発表と質問
http://d.hatena.ne.jp/takehikom/20090730/1248904304 *[研究室][大学教育] ゼミで学生からの質問を奨励する理由
http://d.hatena.ne.jp/takehikom/20091020/1255967938 *[研究室] 小ゼミ質問案
http://d.hatena.ne.jp/takehikom/20091203/1259787862 *[研究室] ゼミ発表での質問の仕方
http://d.hatena.ne.jp/takehikom/20100215/1266186089 *[大学教育] 質問対策
http://d.hatena.ne.jp/takehikom/20100217/1266353990 *[大学教育] 質問対策2
http://d.hatena.ne.jp/takehikom/20100518/1274132755 *[教育] 全国学力・学習状況調査に関する質問主意書
http://d.hatena.ne.jp/takehikom/20100611/1276203311 *[研究室] 後輩から先輩への,ゼミの質問文例
http://d.hatena.ne.jp/takehikom/20100612/1276289569 *[研究室] 質問対策3
http://d.hatena.ne.jp/takehikom/20100628/1277664461 *[研究室] 質問型ブレインストーミング

コマンドに,もうひと手間かけましょう.

$ gzip takehikom.xml
$ export HATENA_ID=takehikom

とした上で,

$ zcat $HATENA_ID.xml.gz | grep "^\*[0-9]\+\*" | ruby -pe '$_.sub!(/.(\d+)/){Time.at($1.to_i).strftime("http://d.hatena.ne.jp/HATENA_ID/%Y%m%d/")+$1+" "};$_.sub!(/HATENA_ID/,ENV["HATENA_ID"])' > ${HATENA_ID}_title.txt

とすれば,コマンドからtakehikomを消すことができました.

*1:公開直後に,コマンドを,スーパーpre記法から引用記法に変更してみました.長い1行は,引用記法のほうが見やすそうです.しかし表示にあたって,情報落ちないかな….

*2:せっかくなので,http://d.hatena.ne.jp/takehikom/files/takehikom_title.txtから取得できるようにしました.今後も,忘れていなければ,XMLファイルのダウンロードに合わせて更新するようにします.