小まめにプログラムを書いて公開したりするといいんじゃないかとふと思った。
以下は少し前に、Movable Typeで使えるアクセス解析のいいのが見つからなかったので、「じゃあ自分で書くか」と思って書きかけたもの。データ書き込み部分だけつくって、表示部分が未実装のままで中断している。
rubyで書かれている。imageタグのソースから呼びだして、データをYAML形式で書き込むという単純なしくみ。
YAMLってどれくらいの規模まで平気なんだろうな。Movable Typeで使ってるSQLiteが簡単そうだからデータ部分はそっちに変えようかとも思っている。
表示部は、日付ごとにテーブルをつくり、データをずらずら並べるだけの簡単なものにしようと思う。「1日分/1ページ」「3日分/1ページ」「1月分/1ページ」「すべて表示」を切りかえられるような、ページ分割機能だけつける。
あと、リンク元だけ抜きだせるようにしたい。Blog上から見られるようにして、はてなとかt-diaryみたいにリンク元を公開できるとよいのではないかと思う。
#!/usr/local/bin/ruby require 'cgi' require "yaml/store" require 'kconv'
################################################# ### Access_data classここから ### ################################################# class Access_data ################################################ ## 使い方: ## ## -Access_data#new("str") ## ## logfileの名前をわたし ## ## インスタンスを作成 ## ## cgiの読み込みを行う ## ## -Append#write ## ## yaml形式でlogfileに書き込む。 ## ################################################ def initialize( logfilename, cgi) @cgi = cgi @logfilename = logfilename @date @url @remote_address @remote_host get_data rescue raise "access_data class initialize error {#$@}" end def write data = [@date.to_s, @url, @remote_address, @remote_host, @referer] db = YAML::Store.new( @logfilename ) db.transaction do db["log"] = [] unless db.root?("log") size = db["log"].size data.insert 0, size db["log"] << data end rescue raise "method write error in #{$@} type:#{$!}" end ################################################ ## -- private methods ----------------------- ## ################################################ def get_data @now = Time.now @date = @now.year.to_s + "/" + @now.month.to_s + "/" + @now.day.to_s + "(" + @now.strftime('%a') + ") " + @now.hour.to_s + ":" + @now.strftime('%M') @url = @cgi.referer @remote_address = @cgi.remote_addr @remote_host = @cgi.remote_host if !(/^http:\/\/www\.at-akada\.org*/ =~ @cgi.query_string) & !(@cgi.query_string == "") @referer = @cgi.query_string else @referer = nil end end end ################################################# ### Main ### #################################################
cgi = CGI.new logfilename = "access_log.yml" begin access = Access_data.new(logfilename, cgi) access.write rescue raise "cannot make Access_data \n type#{$!}\n caller: #{caller}\n".tosjis end #print "Location: http://www.at-akada.org/images/dot.gif\n\n" print "Content-type: text/html\n\n ロードしました\n"
トラックバック(0)
このブログ記事を参照しているブログ一覧: アクセスログを書き込む
このブログ記事に対するトラックバックURL: http://www.at-akada.org/mt/mt-tb.cgi/372
コメントする