diff --git a/mariks/search.cgi b/mariks/search.cgi new file mode 100644 index 0000000..5c5a662 --- /dev/null +++ b/mariks/search.cgi @@ -0,0 +1,106 @@ +#!/usr/bin/env ruby +# -*- coding: utf-8 -*- + +require 'cgi' +require 'csv' + +# エラーハンドラ +CGI.class_eval { class << self; define_method(:report_exception) { |e| puts "
#{e.message}\n#{e.backtrace.join('\n')}" }; end }
+
+cgi = CGI.new
+puts cgi.header("type" => "text/html", "charset" => "utf-8")
+
+# URLのパラメータから「番組ID(id)」を取得(例: search.cgi?id=1)
+work_id = cgi.params['id'].first
+
+# --- [データ処理フェーズ] ---
+# 1. すべてのキャストの平均点算出のためのデータを集計
+staff_ratings = Hash.new { |h, k| h[k] = [] }
+# 2. 作品ごとの情報を整理する
+works_repo = Hash.new { |h, k| h[k] = { title: "", genre: "", staffs: [], my_rating: 0 } }
+
+CSV.foreach("works_data.csv") do |row|
+ next if row.empty?
+ id = row[0]
+ title = row[1]
+ genre = row[2]
+ staff = row[3]
+ rating = row[4].to_i
+
+ # スタッフごとの評価値をためる
+ staff_ratings[staff] << rating
+
+ # 作品ごとのデータに格納
+ works_repo[id][:title] = title
+ works_repo[id][:genre] = genre
+ works_repo[id][:staffs] << staff
+ # 今回はその作品の「最高点」を作品自体のスコアとする(簡易的な評価保持)
+ works_repo[id][:my_rating] = rating if rating > works_repo[id][:my_rating]
+end
+
+# スタッフの平均点を計算するハッシュ(追加要素!)
+staff_averages = {}
+staff_ratings.each do |staff, ratings|
+ staff_averages[staff] = (ratings.sum.to_f / ratings.size).round(2)
+end
+
+# --- [画面出力フェーズ] ---
+puts "あなたがこれまでに記録した番組・映画のリストです:
" + + works_repo.each do |id, data| + puts "あなたの評価: ★ #{data[:my_rating]}.0
" + puts "キャスト/スタッフ: #{data[:staffs].join(', ')}
" + puts "該当する作品が見つかりません。トップへ戻る
" + else + puts "#{target_work[:genre]}
" + puts "★ #{target_work[:my_rating]}.0
" + puts "この人物名が含まれる作品に、あなたがつけた評価の平均値です:
" + + target_work[:staffs].each do |staff| + avg_score = staff_averages[staff] + puts "