クリック証券Webサービスを用いたFX向け完全自動売買システム構築入門(3)です。
※Webサービス開発キットをもっていない方はクリック証券から入手してください。
前回の記事では、ログイン画面を作成しましたので、今回からログイン処理を作成したいと思います。かなり難しくなりますのでわからない場合はWeb等で調査してください^^。
ログイン処理に限らず、全てのWebサービス処理では、まずサーバに対してhttpリクエストを行います。応答がXMLで返されるため、XMLを解析してリクエストが成功したか失敗したかを判断します。
またリクエスト時にはログイン処理で取得したセッション(実体はCookie)を保持しておき、httpリクエストする際にセッションを示す必要があります。
このあたりの処理は共通的なので、次のような汎用的なメソッドを作成しておきます。なお事前にSystem.Net、System.Xml、System.IO名前空間をusingして置いてください。
(1)サーバに対してWebサービスをhttpリクエストし、結果をXMLで受け取る。
private XmlDocument WebServiceRequest(string url, CookieContainer cc)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.CookieContainer = cc;
using (StreamReader sr =
new StreamReader(req.GetResponse().GetResponseStream()))
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(sr.ReadToEnd());
return xmldoc;
}
}
引数はURLと、クッキーオブジェクト(CookieContainer)です。
HttpWebRequestクラスを利用するとURLとクッキーオブジェクトを渡してHTTPリクエストすることができます。結果はGetResponseStream()メソッドでストリームとして取得できるので、XMLオブジェクト(XmlDocument)に格納して戻り値として返しています。
※エラー処理等は省略しています。実際にロジックを組む場合は考慮してください。
(2)結果のXMLを解析し、処理が成功か、失敗かを判定する。
private bool IsSuccess(XmlDocument xml)
{
XmlNodeList nodes = xml.SelectNodes("/*/responseStatus");
if (nodes.Count > 0) {
if (nodes[0].InnerText.Equals("OK"))
{
return true;
}
}
return false;
}
引数に結果として取得したXMLを与えます。成功ならtrue、失敗ならfalseを返します。
成功か、失敗かというのはXML内のresponseStatusに格納されており、成功ならOKが入ります。SelectNodes()メソッドでXPathを指定できますので、XMLノードを取得してOKかどうかを判断しています。
XMLに慣れていないとちょっと難しいかも知れませんね(^^;
(3)結果のXMLを解析し、処理結果のメッセージを取得する
private string GetMessage(XmlDocument xml)
{
XmlNodeList nodes = xml.SelectNodes("/*/message");
if (nodes.Count > 0)
{
return nodes[0].InnerText;
}
return "";
}
引数に結果として取得したXMLを与えます。戻り値にはサーバから返された処理内容を示すメッセージが返ります。
メッセージはXML内のmessageに格納されていますので、(2)のメソッドと同じようにXPathを使って値を取得します。
このメッセージは必ず取得する必要はないのですが、常にアプリケーションで表示するようにしておけばユーザにも処理内容がわかりやすくなるので、少しユーザビリティが向上するようになります。
さて、これらの3つのメソッドを使ってログイン処理を実装していきます。
基本的な流れは、
(1)のメソッドでサーバにリクエストを行い、XMLレスポンスを取得し、
(2)でリクエストの成功可否をチェック、成功ならば
(3)でメッセージを取得してアプリケーションに表示、その後XMLレスポンスに応じた処理を実施する。となります。
では次回実際にそのような処理を組んでみます。
次回をお楽しみに^^。