Skip to content

Commit 39038ce

Browse files
committed
Use connpass_api_v2 gem to fetch DojoStats
cf. https://connpass.com/about/api/v2/
1 parent 5ccf0ac commit 39038ce

File tree

2 files changed

+25
-18
lines changed

2 files changed

+25
-18
lines changed

lib/event_service/providers/connpass.rb

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
1+
require 'connpass_api_v2'
2+
13
module 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

lib/statistics/tasks/connpass.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def run
2020
dojo.dojo_event_services.for(:connpass).pluck(:group_id)
2121
end
2222

23-
@client.fetch_events(**@params.merge(series_id: group_ids)).each do |e|
23+
@client.fetch_events(**@params.merge(group_id: group_ids)).each do |e|
2424
dojo_event_service = DojoEventService.find_by(group_id: e.dig('series', 'id').to_s)
2525
next unless dojo_event_service
2626

0 commit comments

Comments
 (0)