【前回のあらすじ】
王の勅命により深き森林に隠された財宝を求めて旅に出た青年であったが、森林へ踏み込む者を阻むようにそびえる険しい山を前にそこを越える手段を見いだせずに麓の村落で無為な時間を過ごしていた。半月ほど過ぎたとき彼の脳裏に閃いたのは…それはこれ以上ない力技ではあったが、財宝への望みを繋ぐにはもはやこの手段しか残されていない。滞在中世話を焼いてくれた村の人々に感謝を伝え、彼は気球を片手に目の前の険しき山へと踏み出すのであった。。
えーと、何の話でしたっけ?
というわけで、Voxから過去ログを引っ張り出す方法ですが。
まず技術的に頼れないので、とりあえずスクレイピングを念頭に最新エントリから順々に読み込んでいこうとしてみました。metaタグにはnext/prevが設定されているはずなのでそれをたどって…とおもったら、なんだかhrefが空になっている要素がある。なんだなんだ?と思ってよく見てみたら、VoxHuntとQtoDは対象外らしい。どういうことなの…ちゃんとエントリあって時系列に並んでるんだから、prevまたはnext以外の何ものでもないと思うんだが…謎な仕様だなぁ。諦め。
次によくよくソースを見てみると実は以下のようなものが用意されていることがわかりました。
おお、これぞ天啓!というわけで早速中身を見てみたのですが、ぬか喜びでした。10件までしか表示されないの。つまり普通のフィードと殆ど変わらなかった…ていうか、「全記事」って別に全ての記事と言うことではなくて要は“全文”ってことなのね。翻訳まで中途半端すぎて泣けてきます。
ただこの「全記事のフィード」という奴、ファイルの名前はわけわからんのですけど、各アーカイヴページ毎に別々に用意されてるみたいです。
各アーカイブは几帳面なことに10エントリ/ページで細かく区切られていて、例えば最小単位は次のようになっているのですが、
- http://nobodyplace.vox.com/library/posts/2007/11/page/1/
- http://nobodyplace.vox.com/library/posts/2007/11/page/2/
このページ毎にフィードが発効されてるんですね。つまり、上の2ページのデータはスクレイピングする必要なく、次のフィードを取得することで得ることが出来ます。
- http://nobodyplace.vox.com/library/posts/2007/11/page/1/rss-full.xml
- http://nobodyplace.vox.com/library/posts/2007/11/page/2/rss-full.xml
おお、これは初めてのGJ。
さらにこのページってのは月毎だけじゃなくて年毎でも以下のように存在しているので…
- http://nobodyplace.vox.com/library/posts/2007/page/1/
- http://nobodyplace.vox.com/library/posts/2007/page/2/
同時にこのフィードも存在しているわけですね。
きた!これで勝つる!
- http://nobodyplace.vox.com/library/posts/2007/page/1/rss-full.xml
- http://nobodyplace.vox.com/library/posts/2007/page/2/rss-full.xml
まとめると、今のところ以下のような手順になる予定です。
- 年毎アーカイヴを取得/スクレイピング → 件数からそれぞれのページ数割り出し
- 年毎各ページの情報をフィードで取得
- 各種情報を整理してDBへ(またはインポート用データへ変換)
こんな感じでエントリの概要は抜き出せる模様。
ただし…3番目にもう一個障壁があって、descriptionに格納されてる本文には「コメントする」リンクとかなんやかんや付けられてるんですね(atomだとさらにもっと色々追加されてる)。本文だけくれればいいのに…
というわけでその辺上手くそぎ落としていくのが必要になります。
多分、Voxから自分のデータを抜き出す段取りとしてはこんなもんだろうと思うんだけど、さてはて上手く行くのでしょうか。