1
+ require 'connpass_api_v2'
2
+
1
3
module EventService
2
4
module Providers
3
5
class Connpass
4
- ENDPOINT = 'https://connpass.com/api/v1' . freeze
5
- # NOTE: 期間は ym or ymd パラメータで指定(複数指定可能)、未指定時全期間が対象
6
-
7
6
def initialize
8
- @client = EventService :: Client . new ( ENDPOINT , proxy : ENV [ 'FIXIE_URL ' ] )
7
+ @client = ConnpassApiV2 . client ( ENV [ 'CONNPASS_API_KEY ' ] )
9
8
end
10
9
11
10
def search ( keyword :)
12
- @client . get ( 'event/' , { keyword : keyword , count : 100 } )
11
+ @client . get_events ( q : keyword , count : 100 )
13
12
end
14
13
15
14
# NOTE: yyyymm, yyyymmdd は文字列を要素とする配列(Array[String])で指定
16
- def fetch_events ( series_id :, yyyymm : nil , yyyymmdd : nil )
17
- series_id = series_id . join ( ',' ) if series_id . is_a? ( Array )
15
+ def fetch_events ( group_id :, yyyymm : nil , yyyymmdd : nil )
16
+ group_id = group_id . join ( ',' ) if group_id . is_a? ( Array )
18
17
18
+ # API v1 -> v2 でパラメータ名が変更された
19
+ # https://connpass.com/about/api/v2/
20
+ # e.g. series_id -> group_id
19
21
params = {
20
- series_id : series_id ,
21
- start : 1 ,
22
- count : 100
22
+ group_id : group_id ,
23
+ start : 1 , # offset → start
24
+ count : 100 # limit → count
23
25
}
24
26
25
27
param_period_patern = [ ]
@@ -35,17 +37,22 @@ def fetch_events(series_id:, yyyymm: nil, yyyymmdd: nil)
35
37
36
38
param_period_patern . each do |param_period |
37
39
loop do
38
- # connpass は https://connpass.com/robots.txt を守らない場合は、アクセス制限を施すので、下記の sleep を入れるようにした https://connpass.com/about/api/
39
- sleep 5
40
- part = @client . get ( 'event/' , params . merge ( param_period ) )
40
+ begin
41
+ args = params . merge ( param_period ) . compact
42
+ res = @client . get_events ( **args )
43
+ rescue ConnpassApiV2 ::Error => e
44
+ sleep 5 && retry if e . response &.status == 403
45
+
46
+ raise e
47
+ end
41
48
42
- break if part [ ' results_returned' ] . zero?
49
+ break if res . results_returned . zero?
43
50
44
- events . push ( *part . fetch ( ' events' ) )
51
+ events . push ( *res . events )
45
52
46
- break if part . size < params [ :count ]
53
+ break if res . events . size < params [ :count ]
47
54
48
- break if params [ :start ] + params [ :count ] > part [ ' results_available' ]
55
+ break if params [ :start ] + params [ :count ] > res . results_available
49
56
50
57
params [ :start ] += params [ :count ]
51
58
end
0 commit comments