« ちょっとおかしいぞ、日本人 | トップページ | 深読みしてしまいそう »

カテゴリ別の記事一覧を作る

 [ ココログの記事一覧を作る ] のスクリプトに手を入れて、カテゴリ別の一覧記事を作成するスクリプトを作りました。

 先のスクリプトと同様にサイドバーなどにタグを埋め込んでおけば、勝手に生成してくれるという類のものではありません。記事となるファイルを生成し、投稿はブラウザでログインして通常のように本文にコピーするなどして行います。

 今回のスクリプトに関する部分のみ解説しますので、それ以外については先の記事を参照してください。

 あらかじめ設定する部分は、以下のとおりです。

host = 'mumrik.air-nifty.com'
directory = '/blog/'
s_date = 999999
@num = 1
base_name = '_catidx.html'
@max_cat_size = 40
anchor = '●'
@midashi_print = ''
@pickup_category = ''

@max_cat_size
 ページの一番上にカテゴリ先頭へのリンクを張ったインデックスを置きますが、カテゴリ文字の途中で改行されないように、ページ幅に合わせた文字数を設定します。各自のココログでの本分幅に応じて調整してください。全角文字数で設定して構いません。

anchor
 カテゴリ名の前につけるマークを指定します。「■」や「▼」など好きなものを設定してください。不要であれば「 '' 」としてください。

@midashi_print
 ページの一番上に表示されるカテゴリ名のインデックスを使うのか、使わないのかを設定できます。使わないときのみ 'off' と設定してください。それ以外は使うものとみなします。

@pickup_category
 カテゴリの中の特定のものだけ一覧にしたい、という時にはここにカテゴリ名を設定します。カテゴリ名とカテゴリ名の間には「,」(カンマ)や「、」(読点)などの区切りを入れてください。'日記・コラム・つぶやき、ウェブログ・ココログ関連' などと続けてすべて記載してください。

 実際のサンプルとしてはこちらをご覧ください。

#2005/06/21
 ひと月ごとに作成する場合には、月が変わってから前月分を作成するほうが便利であろうと思われるので、一部変更を行いました。@num=12 s_date=999999 の場合、今月分ではなく前月分を作成します。他の分割については検討しています。

catidx.rb



#!ruby -Ks
#catidx.rb
#2005/04/04 - 6/19
#
$KCODE = "sjis"
require 'jcode'
require 'kconv'
require 'net/http'
#
host = 'mumrik.air-nifty.com'
directory = '/blog/'
s_date = 999999 # 作成を始める年月(999999で分割に応じた最新のみ)
@num = 4 # 一年をいくつに分けるか:1,2,4,6,12
base_name = '_cat_idx.html'
@max_cat_size = 40 # 記事の表示幅に合わせて折り返し文字数を設定
anchor = '■' # カテゴリ名の前に表示するマーク
@midashi_print = '' # off:見出しカテゴリを出力しない
@pickup_category = ''
#
#
def newchk(s_date)
if 999999 == s_date
case @num
when 1
@n_date = Time.now.year * 100 + Time.now.month
Time.now.year * 100 + 1
when 2
@n_date = Time.now.year * 100 + Time.now.month
now_month = Time.now.month
if now_month < 7
Time.now.year * 100 + 1
else
Time.now.year * 100 + 7
end
when 4
@n_date = Time.now.year * 100 + Time.now.month
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
@n_date = Time.now.year * 100 + Time.now.month
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
if Time.now.month == 1
(Time.now.year - 1) * 100 + 12
@n_date = (Time.now.year - 1) * 100 + 12
else
Time.now.year * 100 + Time.now.month - 1
@n_date = Time.now.year * 100 + Time.now.month - 1
end
end
else
s_date
@n_date = Time.now.year * 100 + Time.now.month
end
end
#
#
@blog_idx = []
cat = []
category = ""
i = 0
#
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
#
#ここから出力
#
@cat_idx = []
def midashi(s,ss,s_date)
#カテゴリの抽出
@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
@cat_idx.concat category.split(/\//)
end
end
@cat_idx.uniq!
if @pickup_category != ''
@cat_idx.delete_if {|category| /#{category}/ !~ @pickup_category }
end
cat_size = 0
#カテゴリの出力
if 'off' != @midashi_print.downcase
@cat_idx.sort.each_with_index do |category,i|
cat_size = cat_size + category.size
if cat_size > @max_cat_size
@f.print "<br>"
cat_size = category.size
end
@f.printf "<a class=\"idx\" href=\"#%d\">%s</a> | ",i,category
end
@f.print "<hr>"
end
#年月の範囲を出力
start_year = s.to_s[0,4]
end_year = s.to_s[0,4]
end_month = s.to_s[4,2]
if (s - ss).to_s[4,2] == '12'
start_month = '01'
elsif s - ss < s_date && s_date != 999999
start_month = s_date.to_s[4,2]
else
start_month = (s - ss).to_s[4,2].succ
end
if @num == 12
@f.printf "<b>%s年%s月</b></big><ul>\n",start_year,start_month
else
@f.printf "<b>%s年%s月 ~ %s年%s月</b></big><ul>\n",start_year,start_month,end_year,end_month
end
end
#
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
midashi(s,ss,s_date)
#
while s - ss + 1 <= @n_date do
@cat_idx.sort.each_with_index do |cat_idx,i|
@f.print "<div align=\"right\"><a href=\"#top\">先頭に戻る</a></div>"
@f.printf "</ul><big><a class=\"idx\" name=\"%d\">%s %s</a></big><ul>",i,anchor,cat_idx
@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
if /#{cat_idx}/ =~ category
@f.printf "<li><small>[%s]</small> <a href=\"%s\">%s</a>\n",date[5,5].sub(/-/,"/"),url,title
end
elsif s.to_s < (date[0,4] + date[5,2])
break
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
case @num
when 1
s += 100
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,100,s_date)
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>"
@cat_idx.clear
midashi(s,6,s_date)
else
s += 94
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,94,s_date)
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>"
@cat_idx.clear
midashi(s,3,s_date)
elsif (s.to_s)[4,2] == '06'
s += 3
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,3,s_date)
elsif (s.to_s)[4,2] == '09'
s += 3
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,3,s_date)
else
s += 91
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,91,s_date)
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>"
@cat_idx.clear
midashi(s,2,s_date)
elsif (s.to_s)[4,2] == '04'
s += 2
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,2,s_date)
elsif (s.to_s)[4,2] == '06'
s += 2
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,2,s_date)
elsif (s.to_s)[4,2] == '08'
s += 2
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,2,s_date)
elsif (s.to_s)[4,2] == '10'
s += 2
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,2,s_date)
elsif (s.to_s)[4,2] == '12'
s += 90
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,90,s_date)
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>"
@cat_idx.clear
midashi(s,89,s_date)
else
s += 1
@f = File.new( s.to_s + base_name, "w")
@f.print "<a name=\"top\"><big>"
@cat_idx.clear
midashi(s,1,s_date)
end
end
end
@f.close
File.delete(s.to_s + base_name)


|
|

« ちょっとおかしいぞ、日本人 | トップページ | 深読みしてしまいそう »

コメント

コメントを書く



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




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/28835/4633934

この記事へのトラックバック一覧です: カテゴリ別の記事一覧を作る:

« ちょっとおかしいぞ、日本人 | トップページ | 深読みしてしまいそう »