Webpayでリストを取得する際に条件として作成日時を指定できますが、nextTokenとかの仕組みがないため、果たしてデータを全て取得し終えたのかわからないケースが発生してしまいます。(countで指定できる最大が100件なので、それ以上のデータを取得したい場合には何らかの方法で再帰呼び出しする必要があります。)
ということで、以下のようにするとよさそうです。
public static ChargeResponseList getChargeList(int count, int offset, long timestamp) throws Exception { try { CreatedRange<?> createdRange = new CreatedRange<Object>(); createdRange.gte(timestamp); // API リクエスト return getClient().charge .allRequest() .count(count) .offset(offset) .created(createdRange) .execute(); } catch (Exception e) { logger.error("[WebpayUtils.createRecursion]", e); throw new Exception(); } }
呼び出し元
// 2日前までの課金データを取得する場合 Calendar expired = Calendar.getInstance(); expired.add(Calendar.DATE, -2); long time = expired.getTime().getTime() / 1000L; int offset = 0; int count = 10; List<ChargeResponse> tmpArrayList = new ArrayList<ChargeResponse>(); List<ChargeResponse> arrayList = new ArrayList<ChargeResponse>(); do { ChargeResponseList chargeList = getChargeList(count, offset, time); tmpArrayList = chargeList.data; if (tmpArrayList != null && tmpArrayList.size() > 0) { arrayList.addAll(tmpArrayList); } offset = offset + count; sleep(1); } while (tmpArrayList != null && tmpArrayList.size() > 0);
APIをたたく際には1秒毎にsleepするようにしましょう。