おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

Jakarta Commons HttpClient によるSBI証券での自動売買(2) - 会社四季報の企業概要を取込む編

前々回のエントリー「Jakarta Commons HttpClient によるSBI証券での自動売買(1) - ログイン編 Jakarta Commons HttpClient によるSBI証券での自動売買(1) - ログイン編 - 彼女からは、おいちゃんと呼ばれています」のつづきです。

今回は,ログインするときに使った HttpClient のインスタンスを使い回して, 会社四季報の企業概要を取込むコードを書きます。

**全体像 全体的なイメージとしては次のような感じです。

|java| public class SetCampanyContentsSample {

/**
 * HttpClient このクラス内で使いまわすことで,
 * ログインによって取得したクッキーを維持する
 */
private HttpClient client;

/**
 * 企業概要ページの内容
 * この中身を取得するのが今回の目的です。
 */
private BufferedReader campanyContents;

/**
 * ログイン
 */
public void login() {
    // 前々回に書いたコードとほぼ同じです。後述します。
    // ただし,HttpClient のインスタンスを使い回すために,
    // クラスの中に持つようにしています。
}

/**
 * 会社四季報の「企業概要」ページの内容をセットする
 */
public void setCampanyContents() {
    // 今回のメインです。後述します。
}

} ||<

**サンプルコード

|java| import java.io.; import org.apache.commons.httpclient.; import org.apache.commons.httpclient.methods.*;

public class SetCampanyContentsSample {

/**
 * HttpClient このクラス内で使い回すことで,
 * ログインによって取得したクッキーを維持する
 */
private HttpClient client;

/**
 * 企業概要ページの内容
 */
private BufferedReader campanyContents;

/**
 * ログイン
 */
public void login() {
    String url = "https://trading1.sbisec.co.jp/ETGate/";

    // HttpClient のインスタンスを使い回すことで,
    // ログイン後のクッキーを維持する
    this.client = new HttpClient();
    PostMethod method = new PostMethod(url);

    method.setParameter("JS_FLG", "1");
    method.addParameter("_ControlID", "WPLETlgR001Control");
    method.addParameter("_DataStoreID", "DSWPLETlgR001Control");
    method.addParameter("_PageID", "WPLETlgR001Rlgn10");
    method.addParameter("_ActionID", "loginHome");
    method.addParameter("getFlg", "on");

    // ユーザID
    method.addParameter("user_id", "inouetakuya");

    // パスワード
    method.addParameter("user_password", "hogehoge");

    try {
        this.client.executeMethod(method);

    } catch (HttpException e) {
        e.printStackTrace();

    } catch (IOException e) {
        e.printStackTrace();

    } finally {
        method.releaseConnection(); // メソッドを解放
    }
}

/**
 * 会社四季報の「企業概要」ページの内容をセットする
 */
public void setCampanyContents() {
    String url = "https://trading1.sbisec.co.jp/ETGate/";
    PostMethod method = new PostMethod(url);

    method.setParameter("_ControlID", "WPLETsiR001Control");
    method.addParameter("_PageID", "WPLETsiR001Idtl50");
    method.addParameter("_DataStoreID", "DSWPLETsiR001Control");
    method.addParameter("_ActionID", "DefaultAID");
    method.addParameter("s_rkbn", "2");
    method.addParameter("i_stock_sec", "9984"); // 企業コード
    method.addParameter("i_dom_flg", "1");
    method.addParameter("i_exchange_code", "JPN"); // 通常は当社優先市場. JPN
    method.addParameter("i_output_type", "4");
    method.addParameter("exchange_code", "JPN"); // 通常は当社優先市場. JPN
    method.addParameter("stock_sec_code_mul", "9984"); // 企業コード
    method.addParameter("ref_from", "1");
    method.addParameter("ret_to", "20");
    method.addParameter("getFlg", "on");
    method.addParameter("JS_FLG", "1");

    try {
        // HttpClientのインスタンスは,使い回す
        // (ログイン後のクッキーが保持される)
        this.client.executeMethod(method);

        // ボリュームがあるので,String型よりもBufferedReader型で
        InputStream is = method.getResponseBodyAsStream();

        // 文字コードの変換が必要
        this.campanyContents = new BufferedReader(new InputStreamReader(is, "SJIS"));

    } catch (HttpException e) {
        e.printStackTrace();

    } catch (IOException e) {
        e.printStackTrace();

    } finally {
        //ここでメソッドを解放してしまうと,
        //取得した企業概要データまで消えてしまうことが判明
        //method.releaseConnection();
    }
}

} ||<

**ポイント ログインするときに使った HttpClient のインスタンスにはログイン後のクッキー情報が保持されます。したがって,そのHttpClient インスタンスを使い回せば,ログイン後のページについての操作できるようになります。

**補足 今回のコードでは,campanyContents という BefferdReader型のフィールドに「企業概要」ページの情報を格納しています。後は正規表現などで必要なところを抜き出して,煮るなり焼くなりしてください。

**補足2 POST メソッドにセットしているパラメータについて自分でアレンジしてみようというとき,どんなパラメータをセットしたらよいかは、ブラウザでやり取りされるヘッダ情報を確認するとよいです。

下記のツールを使うと、ブラウザでやり取りされるヘッダ情報を覗き見ることができます。大変便利ですので是非試してみてください。 -ieHTTPHeaders(IE用) -LiveHTTPHeaders(Firefox用)

**このエントリーのつづき -Jakarta Commons HttpClient によるSBI証券での自動売買(3) - 正規表現でデータ解析編

**関連エントリー -Jakarta Commons HttpClient によるSBI証券での自動売買(1) - ログイン編 Jakarta Commons HttpClient によるSBI証券での自動売買(1) - ログイン編 - 彼女からは、おいちゃんと呼ばれています