ダウンロードカウンタのスクリプト
昨日作ったダウンロードカウンタのRubyスクリプトを貼っときます。
例としてaiue.jadのカウントをしたいとすると、
device:jam?http://hoge/ez_download.cgi?file=aiue
のようにします。
file=の後に指定するファイル名は、半角英数字とアンダーバーしか使えないようにしてます。
それから、カウンタファイルが無かったりロック中だったりでカウントアップに失敗した場合も、ダウンロード自体は正常に完了するようにしてあります。ダウンロードカウンタごときにそこまで厳密性を求めても仕方がないと思ったので。
テストは適当にしかしてませんが、一応auケータイ実機でjad/jarのダウンロードが正常にできることは確認してあります。
#!/usr/local/bin/ruby -Ku require "cgi" cgi = CGI.new req_filename = cgi.params["file"][0] if req_filename.nil? || /\W/ =~ req_filename cgi.out({"status" => "BAD_REQUEST"}) { "Bad request" } exit end jad_filename = req_filename + ".jad" counter_filename = req_filename + "_cnt.txt" ### Send JAD file begin File.open(jad_filename, "rb") { |f| jad_file = f.read cgi.out({"type" => "text/vnd.sun.j2me.app-descriptor"}) { jad_file } } rescue cgi.out({"status" => "NOT_FOUND"}) { "File not found" } exit end ### Count up begin File.open(counter_filename, "r+") { |f| begin f.flock(File::LOCK_EX) counter = f.read.to_i f.rewind f.puts(counter + 1) ensure f.flock(File::LOCK_UN) end } rescue # When count up failed, continue downloading end