11require 'rss'
22
3+ NEWS_YAML_PATH = 'db/news.yml' . freeze
4+ NEWS_LOG_PATH = 'log/news.log' . freeze
5+
36namespace :news do
4- desc ' RSS フィードを取得し、db/news.yml に保存'
7+ desc " RSS フィードを取得し、#{ NEWS_YAML_PATH } に保存"
58 task fetch : :environment do
69 # ロガー設定(ファイル+コンソール出力)
710 console = ActiveSupport ::Logger . new ( STDOUT )
8- logger_file = ActiveSupport ::Logger . new ( 'log/news.log' )
11+ logger_file = ActiveSupport ::Logger . new ( NEWS_LOG_PATH )
912 logger = ActiveSupport ::BroadcastLogger . new ( logger_file , console )
1013
1114 logger . info ( '==== START news:fetch ====' )
@@ -30,8 +33,7 @@ namespace :news do
3033 end
3134
3235 # 取得済みニュース (YAML) を読み込み、URL をキーとしたハッシュに変換
33- news_yaml_file = File . read Rails . root . join ( 'db' , 'news.yml' )
34- existing_items = YAML . safe_load ( news_yaml_file ) . index_by { it [ 'url' ] }
36+ existing_items = YAML . safe_load ( File . read NEWS_YAML_PATH ) . index_by { it [ 'url' ] }
3537 existing_max_id = existing_items . flat_map { |url , item | item [ 'id' ] . to_i } . max || 0
3638
3739 # 新規記事と既存記事を分離
@@ -66,7 +68,7 @@ namespace :news do
6668 } . reverse
6769
6870 # YAML ファイルに書き出し
69- File . open ( 'db/news.yml' , 'w' ) do |f |
71+ File . open ( NEWS_YAML_PATH , 'w' ) do |f |
7072 formatted_items = merged_items . map do |item |
7173 {
7274 'id' => item [ 'id' ] ,
@@ -79,20 +81,19 @@ namespace :news do
7981 f . write ( formatted_items . to_yaml )
8082 end
8183
82- logger . info ( "✅ Wrote #{ merged_items . size } items to db/news.yml (#{ created_items . size } new, #{ updated_items . size } updated)" )
84+ logger . info ( "✅ Wrote #{ merged_items . size } items to #{ NEWS_YAML_PATH } (#{ created_items . size } new, #{ updated_items . size } updated)" )
8385 logger . info ( '==== END news:fetch ====' )
8486 end
8587
86- desc 'db/news.yml からデータベースに upsert'
88+ desc " #{ NEWS_YAML_PATH } からデータベースに upsert"
8789 task upsert : :environment do
8890 console = ActiveSupport ::Logger . new ( STDOUT )
89- logger_file = ActiveSupport ::Logger . new ( 'log/news.log' )
91+ logger_file = ActiveSupport ::Logger . new ( NEWS_LOG_PATH )
9092 logger = ActiveSupport ::BroadcastLogger . new ( logger_file , console )
9193
9294 logger . info "==== START news:upsert ===="
9395
94- yaml_path = Rails . root . join ( 'db' , 'news.yml' )
95- entries = YAML . safe_load File . read ( yaml_path )
96+ entries = YAML . safe_load File . read ( NEWS_YAML_PATH )
9697 new_count = 0
9798 updated_count = 0
9899
0 commit comments