[Hiki-dev:00482] [HikiFarm] RSS等を出力したい

アーカイブの一覧に戻る

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*****



Hiki-dev メーリングリストの案内
アーカイブの一覧に戻る