« メールのお勉強に | トップページ | ちびくろサンボ »

ココログの記事一覧を作る


*長文注意*
 ココログで過去の記事を見るためには月別や週別といったバックナンバーが用意されています。またカテゴリもバックナンバーの役割を持っています。

 しかしバックナンバーページは基本的にそのすべての記事をずらずらと長く表示してしまいます。ココログのプラスやプロでは「続きを読む」という仕組みを利用することでいくらか軽減することはできますが、それでも分量が多くなれば結構な長さになってしまいます。

 そこで記事のタイトルだけを拾い出してリスト化してみました。

 なお、ここで紹介するスクリプトには制限があります。

  1. 月別のバックナンバーである
  2. ココログを始めた最初から RSS/ping 送信の設定をしている
  3. 記事のフッタ部分に「固定リンク」を表示している
  4. 表示言語は日本語か英語である
 また特殊な文字を使用している場合に文字化けすることがあります。このあたりについてはいろいろ試しているのですが、わたしの今の技量では克服できていません(対処方法もあるのですが現時点では一般的ではないので)。このため文字化けがあるかもしれませんので念のため出来上がったファイルを確認してください。

 Java Script などによって動的に生成する仕組みではありません。
 一覧記事の本文を自動的に生成するだけで、記事の保存は手動で行うことになります。

 必要なものは例によって Ruby とエディタです。Windows 環境であれば ActiveScriptRuby が便利です( AvtiveScript とは無縁なので邪道の邪道になりそうで arton さんには申し訳ないですが・・・)。

 スクリプトの初めの部分で自分のココログのデータを設定します。

host = 'mumrik.air-nifty.com'
directory = '/blog/'
s_date = 200404
@num = 1
base_name = '_idx.txt'

 hostdirectory はそれぞれ次のように色分けされた部分を設定します。
  http://mumrik.air-nifty.com/blog/
 s_date にはココログを始めた年月を設定します。
 @num には一年分をいくつに分割するかを指定します。( 1,2,4 ) のいずれかを設定します。
 base_name には生成する一覧ファイルの年月以降の部分を指定します(ココログで作成するファイル名とは関係ないので自由につけてかまいません)。

 以上が設定できたら「スタート」メニューから「 Ruby console 」を選択し、スクリプトのあるフォルダに移動します。

 インターネット接続が可能な環境で、コマンドラインから、

 c>ruby mkidx.rb

 と入力すれば、指定した分割数のテキストファイルが作られます。
 1 ならば、200512.txt のように
 2 ならば、200506.txt 200512.txt のように
 4 ならば、200503.txt 200506.txt 200509.txt 200512.txt のように
 作られます。

 #ActiveScriptRuby ならスクリプトのアイコンをダブルクリック(環境によってはシングルクリック)してもよいのだと今さらながら気が付いた。

 ブラウザでココログにログインし、新しい記事を作成します。一覧用にわかりやすいファイル名をつけてもよいのですが、先般のココログのバージョンアップで一部仕様が変わっていたりしますので、通常のように「2004年の記事一覧」などとタイトルをつけて作成するほうが問題も発生しないでしょう。

 記事一覧用のカテゴリを作成しておくと、あとでアクセスするときに便利ですが、これはお好みでどうぞ。

 なお、記事の日時についてはココログを開始した前月あたりに設定しておくと、以降一覧を更新する際に邪魔になりません。(2004年1月ならば2003年12月にする。日付はお好みで)

 記事の本文には、先ほど作成されたファイルの中身をそっくりコピー&ペーストします。今後更新したときにも同様にそっくり上書きしてしまいます(あくまでも記事本文だけです。記事そのものは削除しません)。

 こうして分割した分だけ記事の作成を行います。一日一件程度の記事を書いているのであれば分割せずに一年分をまとめてでも差し支えはないかもしれません。左サイドバーにあるサンプルを見ていただけばわかりますが、月ごとにジャンプできるようにはしてあります。

 出来上がった一覧記事のリストでマイリストを作成します。タイプは「リンク」です。これまでのバックナンバーへは archives.html へのリンクを作ることで対応できます。

 また、二回目からは s_date に 999999 を指定しておけば、指定された分割方法にのっとった最新分の一覧しか作成しません。一度作成が完了し、記事の登録もできた後は数字を変更して利用してください。

 標準のスタイルシートの関係で、見出しの「01月」などの文字と、ジャンプ先の日付の部分([04/18])に下線がついてしまいますが、これをさけるためにはどこかにスタイルシートを定義しなければなりません。この場所については過去にいろいろの試行錯誤が行われていたようです (観測気球さんや詩織sioliさんのサイトに詳しいです) が、ベーシックの場合にはあまり選択肢がありませんので、ココログの設定画面のサブタイトル欄に以下のテキストを貼り付けておくと下線は表示されなくなります。下線が気にならないと言う方は行う必要はありません。

<style type="text/css"> <!-- a.idx { text-decoration: none } --> </style>

 プラスやプロで本文の文字サイズを大きく変更している場合には big タグをはずしたほうが良いかもしれません。

#一覧部分にも「年月」の見出しを入れ、ジャンプ先もそちらに変更しました。
#自分のスクリプトに反応してしまうのを修正しました(^^; (2005/04/19)

mkidx.rb



#!ruby -Ks
#mkidx.rb
#2005/04/04 - 18
#
$KCODE = "sjis"
require 'jcode'
require 'kconv'
require 'net/http'
#
host = 'mumrik.air-nifty.com'
directory = '/blog/'
s_date = 999999
@num = 1
base_name = '_idx.html'
#
#
def newchk(s_date)
if 999999 == s_date
case @num
when 1
Time.now.year * 100 + 1
when 2
now_month = Time.now.month
if now_month < 7
Time.now.year * 100 + 1
else
Time.now.year * 100 + 7
end
when 4
now_month = Time.now.month
if now_month < 4
Time.now.year * 100 + 1
elsif now_month < 7
Time.now.year * 100 + 4
elsif now_month < 10
Time.now.year * 100 + 7
else
Time.now.year * 100 + 10
end
when 6
now_month = Time.now.month
if now_month < 3
Time.now.year * 100 + 1
elsif now_month < 5
Time.now.year * 100 + 3
elsif now_month < 7
Time.now.year * 100 + 5
elsif now_month < 9
Time.now.year * 100 + 7
elsif now_month < 11
Time.now.year * 100 + 9
else
Time.now.year * 100 + 11
end
when 12
Time.now.year * 100 + Time.now.month
end
else
s_date
end
end
#
#
@blog_idx = []
cat = []
category = ""
i = 0
#
n_date = Time.now.year*100 + Time.now.month
j = newchk(s_date)
#
direc = []
while j <= n_date do
direc.push((j.to_s)[0,4] + "/" + (j.to_s)[4,2])
j += 1
if ((j.to_s)[4,2]).to_i > 12
j += 88
end
end
#
h =Net::HTTP.start(host, 80)
direc.each do |d|
response = h.get( directory + d + "/index.html")
response.body.each do |line2|
line = Kconv.tosjis(line2)
#
#タイトル
if /\s+dc:title="([^"]+)"/ =~ line
@blog_idx[i] = [$1]
end
#
#日付
if /\s+dc:date="([^"]+)"/ =~ line
@blog_idx[i].unshift($1)
end
#
#カテゴリ
if /^<span class="post-footers">/ =~ line
line.scan(/\/index.html">([^<]+)<\/a>/) do |c|
cat.push(c)
end
category = cat.join("/")
@blog_idx[i].push(category)
cat.clear
category = ""
end
#
#リンクURL
if /^<span[\s\S]+"permalink" href="([\s\S]+)">(?:固定リンク|Permalink)/ =~ line
@blog_idx[i].push($1)
i += 1
end
end
end
#
s = newchk(s_date)
case @num
when 1
s = ( (s.to_s)[0,4] + '12').to_i
ss = 100
when 2
if (s.to_s)[4,2] < '07'
s = ( (s.to_s)[0,4] + '06').to_i
ss = 94
else
s = ( (s.to_s)[0,4] + '12').to_i
ss = 6
end
when 4
if (s.to_s)[4,2] < '04'
s = ( (s.to_s)[0,4] + '03').to_i
ss = 91
elsif (s.to_s)[4,2] < '07'
s = ( (s.to_s)[0,4] + '06').to_i
ss = 3
elsif (s.to_s)[4,2] < '10'
s = ( (s.to_s)[0,4] + '09').to_i
ss = 3
else
s = ( (s.to_s)[0,4] + '12').to_i
ss = 3
end
when 6
if (s.to_s)[4,2] < '03'
s = ( (s.to_s)[0,4] + '02').to_i
ss = 90
elsif (s.to_s)[4,2] < '05'
s = ( (s.to_s)[0,4] + '04').to_i
ss = 2
elsif (s.to_s)[4,2] < '07'
s = ( (s.to_s)[0,4] + '06').to_i
ss = 2
elsif (s.to_s)[4,2] < '09'
s = ( (s.to_s)[0,4] + '08').to_i
ss = 2
elsif (s.to_s)[4,2] < '11'
s = ( (s.to_s)[0,4] + '10').to_i
ss = 2
else
s = ( (s.to_s)[0,4] + '12').to_i
ss = 2
end
when 12
if (s.to_s)[4,2] < '02'
s = ( (s.to_s)[0,4] + '01').to_i
ss = 89
else
ss = 1
end
end
#
#ここから出力
#
def midashi(s,ss)
pmonth = ''
@blog_idx.sort.each do |date,title,category,url|
if s.to_s >= (date[0,4] + date[5,2]) && (date[0,4] + date[5,2]) > (s - ss).to_s && (date[0,4] + date[5,2]) != pmonth
@f.printf "<a class=\"idx\" href=\"#%s\">%s</a> | ",date[0,4] + date[5,2],date[5,2] + "月"
pmonth = date[0,4] + date[5,2]
end
end
end
#
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
if @num != 12
midashi(s,ss)
end
pmonth = ''
@f.print "</big><ul>"
@blog_idx.sort.each do |date,title,category,url|
if s.to_s >= (date[0,4] + date[5,2])
if pmonth != (date[0,4] + date[5,2])
@f.print "<div align=\"right\"><a href=\"#top\">先頭に戻る</a></div>"
@f.printf "</ul><big><a class=\"idx\" name=\"%s\">%s年%s月</a></big><ul>",date[0,4] + date[5,2],date[0,4],date[5,2]
@f.printf "<li><small>[%s]</small> <a href=\"%s\">%s</a> <small>(%s)</small>\n",date[5,5].sub(/-/,"/"),url,title,category
pmonth = date[0,4] + date[5,2]
else
@f.printf "<li><small>[%s]</small> <a href=\"%s\">%s</a> <small>(%s)</small>\n",date[5,5].sub(/-/,"/"),url,title,category
end
else
@f.printf "</ul><div align=\"right\"><a href=\"#top\">先頭に戻る</a><br><br>Powered by <a href=\"http://www.ruby-lang.org/ja/\">Ruby</a> %s </div>\n",RUBY_VERSION
@f.close
case @num
when 1
s += 100
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,100)
redo
when 2
if (s.to_s)[4,2] == '06'
s += 6
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,6)
redo
else
s += 94
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,94)
redo
end
when 4
if (s.to_s)[4,2] == '03'
s += 3
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,3)
redo
elsif (s.to_s)[4,2] == '06'
s += 3
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,3)
redo
elsif (s.to_s)[4,2] == '09'
s += 3
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,3)
redo
else
s += 91
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,91)
redo
end
when 6
if (s.to_s)[4,2] == '02'
s += 2
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,2)
redo
elsif (s.to_s)[4,2] == '04'
s += 2
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,2)
redo
elsif (s.to_s)[4,2] == '06'
s += 2
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,2)
redo
elsif (s.to_s)[4,2] == '08'
s += 2
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,2)
redo
elsif (s.to_s)[4,2] == '10'
s += 2
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,2)
redo
elsif (s.to_s)[4,2] == '12'
s += 90
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,90)
redo
end
when 12
if (s.to_s)[4,2] == '12'
s += 89
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
redo
else
s += 1
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
redo
end
end
end
end
@f.printf "</ul><div align=\"right\"><a href=\"#top\">先頭に戻る</a><br><br>Powered by <a href=\"http://www.ruby-lang.org/ja/\">Ruby</a> %s </div>\n",RUBY_VERSION
@f.close

|

« メールのお勉強に | トップページ | ちびくろサンボ »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: ココログの記事一覧を作る:

« メールのお勉強に | トップページ | ちびくろサンボ »