File tree Expand file tree Collapse file tree 1 file changed +23
-10
lines changed Expand file tree Collapse file tree 1 file changed +23
-10
lines changed Original file line number Diff line number Diff line change 11require 'rss'
2- require 'open-uri'
2+ require 'net/http'
3+ require 'uri'
34require 'yaml'
45require 'time'
56require 'active_support/broadcast_logger'
67
8+ def safe_open ( url )
9+ uri = URI . parse ( url )
10+ unless uri . is_a? ( URI ::HTTP ) || uri . is_a? ( URI ::HTTPS )
11+ raise "不正なURLです: #{ url } "
12+ end
13+
14+ Net ::HTTP . start ( uri . host , uri . port , use_ssl : uri . scheme == 'https' ) do |http |
15+ request = Net ::HTTP ::Get . new ( uri )
16+ response = http . request ( request )
17+ response . body
18+ end
19+ end
20+
721namespace :news do
822 desc 'RSS フィードから最新ニュースを取得し、db/news.yml に書き出す'
923 task fetch : :environment do
@@ -37,15 +51,14 @@ namespace :news do
3751 new_items = feed_urls . flat_map do |url |
3852 logger . info ( "Fetching RSS → #{ url } " )
3953 begin
40- URI . open ( url ) do |rss |
41- feed = RSS ::Parser . parse ( rss , false )
42- feed . items . map do |item |
43- {
44- 'url' => item . link ,
45- 'title' => item . title ,
46- 'published_at' => item . pubDate . to_s
47- }
48- end
54+ rss = safe_open ( url )
55+ feed = RSS ::Parser . parse ( rss , false )
56+ feed . items . map do |item |
57+ {
58+ 'url' => item . link ,
59+ 'title' => item . title ,
60+ 'published_at' => item . pubDate . to_s
61+ }
4962 end
5063 rescue => e
5164 logger . warn ( "⚠️ Failed to fetch #{ url } : #{ e . message } " )
You can’t perform that action at this time.
0 commit comments