Webpayでリストを再帰的に呼び出す方法

@iwasaki 10views 更新:2016年8月23日

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するようにしましょう。

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません