66require_relative '../../account_manager'
77require_relative '../../auth'
88require_relative '../../auto_source'
9+ require_relative '../../feed_generator'
910require_relative '../../feeds'
1011require_relative '../../exceptions'
1112require_relative '../../feed_token'
@@ -17,6 +18,8 @@ module Api
1718 module V1
1819 # RESTful API v1 for feeds
1920 module Feeds
21+ DEFAULT_TTL_SECONDS = 3600 # 1 hour
22+
2023 class << self
2124 def show ( request , token )
2225 ensure_auto_source_enabled!
@@ -93,14 +96,16 @@ def ensure_access!(account, url)
9396 end
9497
9598 def render_generated_feed ( request , url )
96- rss_content = AutoSource . generate_feed_content ( url , normalize_strategy ( request . params [ 'strategy' ] ) )
99+ strategy = normalize_strategy ( request . params [ 'strategy' ] )
100+ feed_object = AutoSource . generate_feed_object ( url , strategy )
101+ rendered_feed = FeedGenerator . process_feed_content ( url , strategy , feed_object )
97102
98103 request . response [ 'Content-Type' ] = 'application/xml'
99104
100- # TODO: get ttl from feed
101- HttpCache . expires ( request . response , 600 , cache_control : 'public' )
105+ ttl = extract_ttl_from_feed_object ( feed_object )
106+ HttpCache . expires ( request . response , ttl , cache_control : 'public' )
102107
103- rss_content . to_s
108+ rendered_feed . to_s
104109 end
105110
106111 def require_account ( request )
@@ -145,6 +150,14 @@ def extract_site_title(url)
145150 rescue StandardError
146151 nil
147152 end
153+
154+ def extract_ttl_from_feed_object ( feed_object )
155+ ttl_value = feed_object . respond_to? ( :channel ) ? feed_object . channel &.ttl : nil
156+ ttl_minutes = ttl_value . respond_to? ( :to_i ) ? ttl_value . to_i : 0
157+ return DEFAULT_TTL_SECONDS if ttl_minutes <= 0
158+
159+ ttl_minutes * 60
160+ end
148161 end
149162 end
150163 end
0 commit comments