株式会社マネプラの開発ブログ マネプラボ

株式会社マネプラの開発ブログ

効率化

業務効率化と言うソフトウェア会社がいくつもある

しかし、自分たちの業務は効率化していない

なぜなら、そのほうが売上が上がるから

でも、私はそうは思わない

自分たちの業務効率化ができれば、いろんな技術に挑戦できるからだ

時間は有限だ

 

祝日カレンダーの取得

祝日を取得するために何かいいものはないかと調べて見たら、カレンダーサービスさんに行き当たりました。

カレンダーサービス

jsonxmlCSVなどに対応しているようなのですが、カレンダーサービスさん自身の結果でjsonが返ってこない。。。 xmlで行おうと思ったのですが、ライブラリのコンパイルがうまく行かず断念

ということで今回はCSV形式で取得することにしました。

HTTP 通信のライブラリはokhttpを使いました。

square.github.io

gradleに

compile 'com.squareup.okhttp3:okhttp:3.6.0'

とりあえず取ってくる範囲を固定にしました。 2015/01~2030/12 細かい設定は直接カレンダーサービスさんを触っていただければと

import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;


public class CalendarApi {
    private static String url = "http://calendar-service.net/cal?start_year=2016&start_mon=1&end_year=2030&end_mon=12&year_style=normal&month_style=numeric&wday_style=ja&format=csv&zero_padding=1";
    
 public static void getData(Callback callback) {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .build();

        client.newCall(request).enqueue(callback);

    }
}

呼び出し側

CalendarApi.getData(callback);

コールバックの前にBeanを作りました。

public class CalendarBean implements Serializable {
    private String year;
    private String month;
    private String day;
    private String j_cal;
    private String j_cal_year;
    private String week;
    private int weekNo;
    private String holidayName;

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

    public String getMonth() {
        return month;
    }

    public void setMonth(String month) {
        this.month = month;
    }

    public String getDay() {
        return day;
    }

    public void setDay(String day) {
        this.day = day;
    }

    public String getJ_cal() {
        return j_cal;
    }

    public void setJ_cal(String j_cal) {
        this.j_cal = j_cal;
    }

    public String getJ_cal_year() {
        return j_cal_year;
    }

    public void setJ_cal_year(String j_cal_year) {
        this.j_cal_year = j_cal_year;
    }

    public String getWeek() {
        return week;
    }

    public void setWeek(String week) {
        this.week = week;
    }

    public int getWeekNo() {
        return weekNo;
    }

    public void setWeekNo(int weekNo) {
        this.weekNo = weekNo;
    }

    public String getHolidayName() {
        return holidayName;
    }

    public void setHolidayName(String holidayName) {
        this.holidayName = holidayName;
    }
}

コールバック処理

private HashMap<String,CalendarBean> beanHashMap = new HashMap<>();
private Callback callback = new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            e.printStackTrace();
        }

        /**
         * Called when the HTTP response was successfully returned by the remote server. The callback may
         * consume the response body on another thread.
         * <p>
         * <p>Note that transport-layer success (receiving a HTTP response code, headers and body) does
         * not necessarily indicate application-layer success: {@code response} may still indicate an
         * unhappy HTTP response code like 404 or 500.
         *
         * @param call
         * @param response
         */
        @Override
        public void onResponse(Call call, okhttp3.Response response) throws IOException {
    
              String[] rows = body.split("\n");
              boolean first = true;
              for (String row : rows) {
                if (first) {
                    first = false;
                    continue;
                }
                String[] columns = row.split(",");
                CalendarBean calendarBean = new CalendarBean();
                calendarBean.setYear(columns[0]);
                calendarBean.setMonth(columns[1]);
                calendarBean.setDay(columns[2]);
                calendarBean.setJ_cal(columns[3]);
                calendarBean.setJ_cal_year(columns[4]);
                calendarBean.setWeek(columns[5]);
                calendarBean.setWeekNo(Integer.parseInt(columns[6]));
                if (columns.length == 8) {
                    calendarBean.setHolidayName(columns[7]);
                }
  
                beanHashMap.put(columns[0].concat(columns[1].concat(columns[2])),calendarBean);
            }
        }
    };

ということでyyyyMMddをキーとしたHashMapの完成です。

目標設定アプリ「Nine Square」リリース

今年に入ってAndroidアプリをリリースしました。

アプリ名は「Nine Square」

play.google.com

目標設定のフレームワーク「マンダラート」をアプリにしました。

1つの目標に8個の課題を作り、さらに8個の課題に対して、細かく課題を上げていくものになります。

プロ野球 北海道日本ハムファイターズ大谷翔平選手が高校時代に行なっていたことで話題になったものです。