1+ require 'connpass_api_v2'
2+
13module EventService
24 module Providers
35 class Connpass
4- ENDPOINT = 'https://connpass.com/api/v1' . freeze
5- # NOTE: 期間は ym or ymd パラメータで指定(複数指定可能)、未指定時全期間が対象
6-
76 def initialize
8- @client = EventService :: Client . new ( ENDPOINT , proxy : ENV [ 'FIXIE_URL ' ] )
7+ @client = ConnpassApiV2 . client ( ENV [ 'CONNPASS_API_KEY ' ] )
98 end
109
1110 def search ( keyword :)
12- @client . get ( 'event/' , { keyword : keyword , count : 100 } )
11+ @client . get_events ( q : keyword , count : 100 )
1312 end
1413
1514 # 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 )
1817
18+ # API v1 -> v2 でパラメータ名が変更された
19+ # https://connpass.com/about/api/v2/
20+ # e.g. series_id -> group_id
1921 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
2325 }
2426
2527 param_period_patern = [ ]
@@ -35,17 +37,22 @@ def fetch_events(series_id:, yyyymm: nil, yyyymmdd: nil)
3537
3638 param_period_patern . each do |param_period |
3739 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
4148
42- break if part [ ' results_returned' ] . zero?
49+ break if res . results_returned . zero?
4350
44- events . push ( *part . fetch ( ' events' ) )
51+ events . push ( *res . events )
4552
46- break if part . size < params [ :count ]
53+ break if res . events . size < params [ :count ]
4754
48- break if params [ :start ] + params [ :count ] > part [ ' results_available' ]
55+ break if params [ :start ] + params [ :count ] > res . results_available
4956
5057 params [ :start ] += params [ :count ]
5158 end
0 commit comments