読者です 読者をやめる 読者になる 読者になる

彼女からは、おいちゃんと呼ばれています

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

Jakarta Commons HttpClient によるSBI証券での自動売買(1) - ログイン編


リーマン・ショックによる株価の急落により,最近はアレですけど,株の売買を自動でされようとしていらっしゃる方もおられると思います。つまり,証券会社のサイトに自動ログインして,発注して,儲けて,ウハウハ♪みたいな。


じゃあそれをどうやって実現する?ってことが問題になるのですが,どうもこれには,JavaJakarta Commons プロジェクトという中にある,HttpClient というコンポーネントを使うのが便利そうです。


誰かの何かの足しにでもなればと思い,サンプルコードを書いておきます。そして,できれば何回かに分けて継続的に書いていこうと思います。よろしければ参考にしてください。


ただ、Java で自動売買やろうっていうんだから、Java の基本的な事項については知ってるよね?ねー?ということで、細かい説明は端折ります。すみません… m(_ _)m

はじめに

今回,ターゲットとする証券会社には,ネット口座開設数が最も多い SBI証券をチョイスしました。


Java でネットワークプログラミングするんだったら,java.net.Socket とか java.net.HttpURLConnection クラスとかもあるんですケド,やっぱり Jakarta Commons の HttpClient が一番便利だと思います。


このあたりは次のサイトが参考になります(そして、タイトル名が素晴らしい)。

準備

1. HttpClient と,HttpClient が依存する logging と codecs を次のサイトからダウンロードしてください。


2. ダウンロードした Jar ファイルにクラスパスを設定してください。

サンプルコード

今回は,はじめの一歩として,ログインするサンプルコードを書いておきます。何はともあれ,ログインをしないと発注も何もできないので。

package sample;

import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.PostMethod;

public class LoginSample {

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

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

        method.addParameter("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 {
            client.executeMethod(method);

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

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

        } finally {
            method.releaseConnection();
        }
    }
}

ポイント

今回はログインのメソッドだけ抜き出して書きましたが,コード中の client というのは,インスタンス変数として保持することをおススメします。(このあたりは別の機会に詳しく書くつもりです。)


というのは,一度ログインしてしまうと,client 内にクッキーを保持してくれるので,後は,PostMethod や GetMethod をボコボコつくって投げるだけという,極めて便利なことになるのです。つまり,いちいちその都度クッキーを投げるコードを書かなくていい♪ と。


今回はログインだけなのでちょっと物足りない感じもしますが、お楽しみは後にとっておくということで。ではでは。

参考書籍

Jakarta Commonsクックブック ―Javaプロジェクト必須のレシピ集

Jakarta Commonsクックブック ―Javaプロジェクト必須のレシピ集