Skip to content

Commit 31e3668

Browse files
committed
refactor: RSS取得・保存処理をメソッド分割&ロジック整理
1 parent 4a0616a commit 31e3668

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

lib/tasks/fetch_news.rake

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,26 @@ def safe_open(url)
1616
end
1717
end
1818

19+
def fetch_rss_items(url, logger)
20+
logger.info("Fetching RSS → #{url}")
21+
begin
22+
rss = safe_open(url)
23+
feed = RSS::Parser.parse(rss, false)
24+
feed.items.map { |item| item_to_hash(item) }
25+
rescue => e
26+
logger.warn("⚠️ Failed to fetch #{url}: #{e.message}")
27+
[]
28+
end
29+
end
30+
31+
def item_to_hash(item)
32+
{
33+
'url' => item.link,
34+
'title' => item.title,
35+
'published_at' => item.pubDate.to_s
36+
}
37+
end
38+
1939
namespace :news do
2040
desc 'RSS フィードから最新ニュースを取得し、db/news.yml に書き出す'
2141
task fetch: :environment do
@@ -45,24 +65,7 @@ namespace :news do
4565
]
4666
end
4767

48-
# RSS 取得&パース
49-
new_items = feed_urls.flat_map do |url|
50-
logger.info("Fetching RSS → #{url}")
51-
begin
52-
rss = safe_open(url)
53-
feed = RSS::Parser.parse(rss, false)
54-
feed.items.map do |item|
55-
{
56-
'url' => item.link,
57-
'title' => item.title,
58-
'published_at' => item.pubDate.to_s
59-
}
60-
end
61-
rescue => e
62-
logger.warn("⚠️ Failed to fetch #{url}: #{e.message}")
63-
[]
64-
end
65-
end
68+
new_items = feed_urls.flat_map { |url| fetch_rss_items(url, logger) }
6669

6770
# 既存データをハッシュに変換(URL をキーに)
6871
existing_items_hash = existing_news.index_by { |item| item['url'] }

0 commit comments

Comments
 (0)