@@ -13,6 +13,34 @@ TASK_LOGGER = ActiveSupport::BroadcastLogger.new(
1313 ActiveSupport ::Logger . new ( STDOUT )
1414 )
1515
16+ # DojoNews (WordPress) REST APIから全投稿を取得するメソッド
17+ def fetch_dojo_news_posts ( api_endpoint )
18+ items = [ ]
19+
20+ loop . with_index ( 1 ) do |_ , page |
21+ uri = URI ( api_endpoint )
22+ uri . query = URI . encode_www_form ( page : page , per_page : 100 , status : 'publish' )
23+
24+ response = Net ::HTTP . get_response ( uri )
25+ break unless response . is_a? ( Net ::HTTPSuccess )
26+
27+ posts = JSON . parse ( response . body )
28+ break if posts . empty?
29+
30+ posts . each do |post |
31+ items << {
32+ 'url' => post [ 'link' ] ,
33+ 'title' => post [ 'title' ] [ 'rendered' ] ,
34+ 'published_at' => Time . parse ( post [ 'date_gmt' ] + ' UTC' ) . in_time_zone ( 'Asia/Tokyo' ) . iso8601
35+ }
36+ end
37+
38+ TASK_LOGGER . info ( "📄 WordPress API: ページ #{ page } から #{ posts . size } 件取得" )
39+ end
40+
41+ items
42+ end
43+
1644namespace :news do
1745 desc "RSS フィードを取得し、#{ NEWS_YAML_PATH } に保存"
1846 task fetch : :environment do
@@ -112,27 +140,7 @@ namespace :news do
112140 TASK_LOGGER . info ( "📄 news.yml をリセットしました" )
113141
114142 # 2. WordPress REST API からすべての投稿を取得
115- dojo_news_items = [ ]
116- loop . with_index ( 1 ) do |_ , index |
117- uri = URI ( "https://news.coderdojo.jp/wp-json/wp/v2/posts" )
118- uri . query = URI . encode_www_form ( page : index , per_page : 100 , status : 'publish' )
119-
120- response = Net ::HTTP . get_response ( uri )
121- break unless response . is_a? ( Net ::HTTPSuccess )
122-
123- posts = JSON . parse ( response . body )
124- break if posts . empty?
125-
126- posts . each do |post |
127- dojo_news_items << {
128- 'url' => post [ 'link' ] ,
129- 'title' => post [ 'title' ] [ 'rendered' ] ,
130- 'published_at' => Time . parse ( post [ 'date_gmt' ] + ' UTC' ) . in_time_zone ( 'Asia/Tokyo' ) . iso8601
131- }
132- end
133-
134- TASK_LOGGER . info ( "📄 WordPress API: ページ #{ index } から #{ posts . size } 件取得" )
135- end
143+ dojo_news_items = fetch_dojo_news_posts ( "https://news.coderdojo.jp/wp-json/wp/v2/posts" )
136144 TASK_LOGGER . info ( "📰 news.coderdojo.jp から #{ dojo_news_items . size } 件を取得" )
137145
138146 # 3. PR TIMES RSS フィードからすべてのプレスリリースを取得
0 commit comments