RSSフィードをやってみる
まともに仕様書も読まずにかよ…と先に言っといて、と。
先週、職場内の雑談でオサから「うちのサイトでRSSフィードやろうか」という話が出ました。
とりあえず、RSSを手動で作るツールを探しましたが、シェアウェアだったので、やっぱやーめた、にしておく。
それで、タイムスタンプを見て自動で生成するやつを作ってみようと思ったので、やってみました。
Perlで書いてみました。
- 実行時点でのhtdocs配下の*.htmlファイル一覧とタイムスタンプのリストを作る
find htdocs -name '*.html'
をパイプでつなげて吸う- フィードしてよいファイルだけを抜き出す
- NGワード(←古いなあ)を含むファイル名を持つファイルは無視
- HTTPと会話して200番代を返さないファイルは無視
- ファイルごとに
stat
でタイムスタンプを見て、ファイル名とタイムスタンプの組を書き出す
- 古いリストと比較して更新されているファイルを抜き出す
- 事前にファイル名でソートしておく
- 古い方に存在しないファイルは更新ファイルとして扱う
- 新旧ともに存在している場合はタイムスタンプの差をとって一定時間経過していれば更新されているファイルとして扱う
- 新しい方に存在しない場合は削除されたものとして、無視。
- 更新ファイルリストをRSSっぽく書く
最新n個というのができないのが難点。もうひとつファイルをかませてやればいいんでしょうけれども、とりあえずここで「できた」ことにしました。
あと、HTMLのtitleを抽出するのに、
/<\s*[tT][iI][tT][lL][eE]\s*>([^<]*)<\s*[tT][iI][tT][lL][eE]\s*>/
が最初に現れたのをタイトルとしていること(注釈内でもタイトル扱いになる)と、途中で改行が来たりしても耐えられるPerlでの書き方が分からなかったためCで書いている点も、なんかイヤです。
…誰か教えてくれないかなーと言ってみたり。