2009年9月18日金曜日

JavaScript で Blogger の「前の投稿」へのリンクを生成

Blogger の画面右下にある「前の投稿」へのリンクを作りたい。

 

どうするか?

今トップページの一番下にある記事の下にある「前の投稿」のリンクを見ると、

http://jutememo.blogspot.com/search?updated-max=2009-09-11T08%3A40%3A00%2B09%3A00&max-results=5

文字エンコードされているように見えるので、 decodeURIComponent – MDC を使いデコード。

decodeURIComponent("http://jutememo.blogspot.com/search?updated-max=2009-09-11T08%3A40%3A00%2B09%3A00&max-results=5")

結果は、

http://jutememo.blogspot.com/search?updated-max=2009-09-11T08:40:00+09:00&max-results=5

パラメータを見ると、

  • updated-max
  • max-results

updated-max は指定した日付と時間よりも前の記事を指定しており、max-results は 1 ページに表示する記事の数を表わしているようだ。

 

方法

日付の操作は Date – MDC を参照。注意することは、

month
1 月を意味する 0 から 12 月を意味する 11 までの、月を表す整数値。

「Blogger のドメイン、表示する投稿の数、年月日」を指定すると「前の投稿」のリンクを生成する createURL 関数を定義する。

// num が一桁の数字のとき先頭に 0 を加えて二桁にする
function padzero(num){
	return ("" + num).length == 1 ? "0" + num : num
}
function format(date){
	return date.getFullYear() + "-" + 
		padzero(date.getMonth()+1) + "-" + 
		padzero(date.getDate()) +
		encodeURIComponent("T" + padzero(date.getHours()) + ":" + 
			date.getMinutes() + ":" + 
			padzero(date.getSeconds()) + "+") +
		"09:00"
}
function createURL(url, numOfPost, year, month, date){
	return url + "search?updated-max=" + 
		format(new Date(year, month-1, date)) +
		"&max-results=" + numOfPost
}

 

自分のブログで 2008/4/9 よりも前の投稿を 10 件表示する URL を作成するには、

createURL("http://jutememo.blogspot.com/", 10, 2008, 4, 9);

結果は、

http://jutememo.blogspot.com/search?updated-max=2008-04-09T00%3A0%3A00%2B09:00&max-results=10