@@ -4,6 +4,7 @@ require 'connpass_api_v2'
44require 'uri'
55require 'net/http'
66require 'json'
7+ require 'timeout'
78
89if ENV [ 'CONNPASS_API_KEY' ] . nil?
910 puts ( 'CONNPASS_API_KEY が設定されていません' )
@@ -74,9 +75,17 @@ def fetch_group_by_subdomain(subdomain, api_key, limit = 5)
7475 case res
7576 when Net ::HTTPSuccess
7677 data = JSON . parse ( res . body )
78+ return { success : false , message : "Invalid API response" } unless data . is_a? ( Hash )
79+
7780 if data [ 'results_returned' ] && data [ 'results_returned' ] > 0
78- group = data [ 'groups' ] . first
79- return { success : true , group_id : group [ 'id' ] }
81+ groups = data [ 'groups' ]
82+ return { success : false , message : "Invalid API response: missing groups" } unless groups &.any?
83+
84+ group = groups . first
85+ group_id = group &.dig ( 'id' )
86+ return { success : false , message : "Invalid API response: missing group ID" } unless group_id
87+
88+ return { success : true , group_id : group_id }
8089 else
8190 return { success : false , message : "グループが見つかりませんでした (subdomain: #{ subdomain } )" }
8291 end
@@ -85,7 +94,10 @@ def fetch_group_by_subdomain(subdomain, api_key, limit = 5)
8594 if location
8695 # 新しいURIでリトライ
8796 new_uri = URI . join ( uri , location )
88- return fetch_group_by_subdomain ( subdomain , api_key , limit - 1 )
97+ # リダイレクト先のURIから新しいsubdomainを抽出
98+ new_subdomain = new_uri . host &.split ( '.' ) &.first
99+ return { success : false , message : "Invalid redirect URL" } unless new_subdomain
100+ return fetch_group_by_subdomain ( new_subdomain , api_key , limit - 1 )
89101 else
90102 return { success : false , message : "リダイレクト先が不明です" }
91103 end
0 commit comments