太陽がまぶしかったから

C'etait a cause du soleil.

サイトマップを読み取って「初めてのはてな」や「ランダムな記事」へリンクするJavaScript

f:id:bulldra:20141129111013j:plain

過去記事ガチャ

 このブログも450記事を超えてきており、「ランダム」に表示させたいと思う事が多いので『過去記事ガチャ』を作ったり、「あわせて読みたい」の一環として id:yuta25 さん作成のランダムリンクサービスを利用させて頂いてました。

 『RAD v0.0.3 - Random Access Diaries』は素晴らしいサービスなのですが「エントリの削除」には追随しておらず、僕のように記事消しを頻繁にしていたブログで実行すると「記事が見つかりませんでした」になってしまいがちという問題があります。

 これに対応するため、サイトマップからランダムにジャンプする処理を独自で作成することとし、ついでに「最新」「最古」のURL取得処理も作って「はじめてのはてな」へもリンクできるようにします。

記事をランダム表示

sitemap.xmlの取得

 sitemap.xmlは本来的には検索エンジンに記事がある場所を教える情報なのですが、こちらをAJAXで読み取って解釈させることで、そのブログにある記事一覧をプログラム内で利用できるようになります。サイトマップを取得するURLは以下の通りです。

 ロジックとしてはサイトマップ一覧からランダムに個別サイトマップを選択して、そこからまたURLをランダムで選択してジャンプしています。サイトマップはブログエンジン側で記事追加・変更・削除に応じて更新されるので、記事消しをしたURLにジャンプする事はありません。今回はJQueryを使って実装しました。

使用方法

 任意の場所に以下のスクリプトのインポートとリンクを作成します。ヘッダでインポートしておけば、任意の場所でリンクを作るだけで大丈夫です。

<script src="https://www.google.com/jsapi"></script>
<script src="http://bulldra.github.io/commons.js" charset="utf-8"></script>
<script src="http://bulldra.github.io/sitemap.js" charset="utf-8"></script>

<a onClick='jumpRandomEntry(true)' href='javascript:void(0)'>開く</a>

 onClickで使用できる処理は以下の通りです。抽出関数は自由に拡張できます。

関数 機能 サンプル
jumpRandomEntry(true) ランダムな記事を新ウィンドウで開く 開く
jumpRandomEntry(false) ランダムな記事にジャンプ 開く
jumpLastEntry(true) 最新の記事を新ウィンドウで開く 開く
jumpLastEntry(false) 最新の記事にジャンプ 開く
jumpFirstEntry(true) 最古の記事を新ウィンドウで開く 開く
jumpFirstEntry(true) 最古の記事にジャンプ 開く

まとめ

 以上の手順でサイトマップから「初めてのはてな」や「ランダム記事」へリンクする事ができあす。AJAX通信を含むJavaScriptなのでRSSリーダーやTwitterや他人のブログのサイトマップを取得したりはできません。あくまで設置ブログ内で動作させるためのものです。そのような要件の場合はやはり、『RAD v0.0.3 - Random Access Diaries』を利用された方がよいかと思います。なお、設置サポートや表示スタイル/アルゴリズムのカスタマイズ等のご依頼がありましたらサポートライセンスの購入をお願いいたします。

はじめてのおつかい(こどものとも傑作集)

はじめてのおつかい(こどものとも傑作集)

応用編