# このブログ用のクローラーを書いてみることにしました
# 現在の検索機能
AlgoliaにはDOCSEARCHという無料のクローラー&UIライブラリがあって、簡単に導入することができます。 クローラーはDockerコンテナ化されていて、普段行っている作業は
$ ./docsearch docker:run "./config.json"
だけです。config.jsonの設定も特に何も指定していなくて👇こんな感じ。
{
"index_name": "yoshida.red",
"start_urls": [
{
"url": "https://www.yoshida.red/",
"selectors_key": ".content__default"
}
],
"stop_urls": [],
"selectors": {
"lvl0": ".content__default h1",
"lvl1": ".content__default h2",
"lvl2": ".content__default h3",
"lvl3": ".content__default h4",
"lvl4": ".content__default h5",
"text": ".content__default p, li"
}
}
このブログはVuePressで出来ているので、もう少し普通にVue InstantSearchを使って行きたいかな?と思って、クローラーを自分で作り直すことにしました。 (何もインターネットから取ってこなくても、ビルドする時にMarkdownの内容をJSONにしてAlgoliaにPushしたらイイじゃないっていう話もあるのですが、、まぁソレはソレで、コレはコレで…笑)
# とりあえず書きはじめたコード
サイトマップは vuepress-plugin-sitemap で吐き出しているので、それを使っていきます。XMLとして👇のようにurlというタグの中にlocという属性で各記事のフルパスとlastmodという属性で最終更新日が記載されています。
とりあえずそれを取得するJavaScriptのコード👇
const client = require('cheerio-httpcli');
client.fetch("https://www.yoshida.red/sitemap.xml", function(err, $, res, body){
$("url").each(function(i, it){
var loc = $(this).children("loc").text();
var lastmod = $(this).children("lastmod").text();
console.log(loc + " : " + lastmod);
});
});
試しに動かしてみたら👇のようにtagやpage(ページネーション)や404.htmlには更新日付が無いので、この辺はクロール対象から除外しようかな?とか、
最後にいつクロールしたかをファイルに取っておけば、更新日がそれ以降のものだけ取得出来るかな?とか頭をよぎります。
# 最終的には
title(H1), description, H2, H3, H4, pタグ(HTMLタグとか除外), tag(ファセット用)を取得してきて、1URL=1レコードな形でJSONを作ってバッチでAlgoliaに連携するようにしようかな、と。せっかく取得出来るので各記事の更新日もインデクシングしておこうかなぁ。
そんなこんなでたまにはJavaScriptのコーディングでも楽しみたいと思います。
角川アスキー総合研究所 (2014-02-27)
売り上げランキング: 96,174