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 1
1
require 'rss'
2
- require 'open-uri'
2
+ require 'net/http'
3
+ require 'uri'
3
4
require 'yaml'
4
5
require 'time'
5
6
require 'active_support/broadcast_logger'
6
7
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
+
7
21
namespace :news do
8
22
desc 'RSS フィードから最新ニュースを取得し、db/news.yml に書き出す'
9
23
task fetch : :environment do
@@ -37,15 +51,14 @@ namespace :news do
37
51
new_items = feed_urls . flat_map do |url |
38
52
logger . info ( "Fetching RSS → #{ url } " )
39
53
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
+ }
49
62
end
50
63
rescue => e
51
64
logger . warn ( "⚠️ Failed to fetch #{ url } : #{ e . message } " )
You can’t perform that action at this time.
0 commit comments