Kouhei Sutou
kou****@cozmi*****
2003年 12月 11日 (木) 23:34:21 JST
はじめまして,須藤です. misc/hikifarm/index.cgiがRSS等で作成されたHikiの更新状況など を出力してくれるとうれしいです. どんな感じかというイメージとしてRSSを出力するようにしてみま した. --- misc/hikifarm/index.cgi.orig Sat Nov 1 23:51:21 2003 +++ misc/hikifarm/index.cgi Thu Dec 11 23:31:19 2003 @@ -320,6 +320,83 @@ @repos.setup() +if cgi.params['c'][0] == 'rss' then + + wikilist = [] + Dir['*'].each do |wiki| + next unless FileTest::directory?( wiki ) + next if FileTest::symlink?( wiki ) + next unless FileTest::file?( "#{wiki}/hikiconf.rb" ) + if not****@repos*****?( wiki ) then + @repos.import( wiki ) + end + @repos.update( wiki ) + title = wiki + mtime = nil + file = '' + begin + File::open( "#{data_path}/#{wiki}/hiki.conf" ) do |conf| + if /^\$site_name\s*=\s*"([^"]*)"$/ =~ conf.read then + title = $1 + end + end + rescue + title = "#{wiki}'s Wiki" + end + Dir["#{data_path}/#{wiki}/text/*"].sort{ |a,b| File.mtime(a) <=> File.mtime(b) }.reverse.each do |f| + next if File.basename(f) == "CVS" || !File.size?(f) + mtime = File.mtime(f) + file = f.gsub(/.*\//, '') + break + end + wikilist.push( WikiList.new(wiki, title, mtime, file) ) if mtime + end + wikilist.sort!{ |a,b| a.mtime <=> b.mtime } + wikilist.reverse! + + def rdf_lis(wiki_list) + wiki_list.collect{|wiki| %Q[<rdf:li rdf:resource="http://pub.cozmixng.org/~hiki/#{wiki.name}"/>]}.join("\n") + end + + require "time" + def rdf_items(wiki_list) + wiki_list.collect do |wiki| + <<-ITEM + <item rdf:about="http://pub.cozmixng.org/~hiki/#{wiki.name}/"> + <title>#{wiki.title}</title> + <link>http://pub.cozmixng.org/~hiki/#{wiki.name}/</link> + <dc:date>#{wiki.mtime.iso8601}</dc:date> + </item> + ITEM + end.join("\n") + end + + print <<-RSS +Content-Type: text/xml; + +<?xml version="1.0" encoding="euc-jp"?> +<rdf:RDF + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns="http://purl.org/rss/1.0/" + xmlns:dc="http://purl.org/dc/elements/1.1/" + > +<channel rdf:about="http://pub.cozmixng.org/~hiki/"> + <title>CozHikiFarm</title> + <link>http://pub.cozmixng.org/~hiki/</link> + <items> + <rdf:Seq> + #{rdf_lis(wikilist)} + </rdf:Seq> + </items> +</channel> + +#{rdf_items(wikilist)} + +</rdf:RDF> +RSS + exit +end + if cgi.params['wiki'][0] and cgi.params['wiki'][0].length > 0 then begin wiki = cgi.params['wiki'][0] # body()内の作成されたHikiの情報を収集している部分などがメソッ # ドとしてくくりだされているといいなとか思いました. -- 須藤 功平 kou****@cozmi*****