| J('ー`)しGMOインターネット証券ごめんね |
|
| GMOインターネット証券のモバイルサイトの方へのログインは簡単にできたのですが、PC用サイトの方へのログインが何故かできなくて3時間ぐらい悩んでしまいました。原因はとても単純なことでした_| ̄|○。 WEBサーバーにpostをする場合に、まずpostをするデータが記述されたフォームの内容(input要素のname属性やvalue属性)を読み込んで、そこにデータを突っ込んでからpostする、という処理をしているのですが、button要素の処理をすっかり忘れていたということが原因でした。モバイルサイトの方はログインの送信ボタンにinput要素が使われていたのできちんとデータを取得できていたのですが、PC用サイトの方はログインの送信ボタンにbutton要素が使われており、このname、value値が送信されていないからログインできないという状態になっていたようです。 そんなわけで、多分GMOインターネット証券のサーバーのログには、私のIDによる怪しいログがかなり残っているに違いない_| ̄|○。
何でこんなことに3時間も悩んでしまったのかというと、Operaを使ってログインしようとするとログインできなかったので、ブラウザ依存の挙動か、もしくはHTTPヘッダーの内容が足りないからとか、クッキーのせいなのかも知れないと考えてしまったからでした。Internet ExplorerのJavaScriptを無効にした状態でもログインできるので何か変だなあとは思っていたのですが。まあそのおかげで他の問題も幾つか見つけることもできたのですが。 HTTPWebRequestは、Createメソッドで作った直後の状態では、HTTP_USER_AGENTやHTTP_ACCEPT、HTTP_ACCEPT_LANGUAGEヘッダーが全く設定されないようです。てっきりUSER_AGENTはIEの奴が設定されると思っていたのですが、送信内容を見てみたら全く設定されていませんでした。 あとbutton要素に関するIEの実装が滅茶苦茶だということは聞いていたのですが、実際に使ってみてその壮絶さにあきれ返りました。button要素のvalue属性ではなく内容が送られるということは知っていたのですが、button要素内にimg要素があると、img要素のタグ部分も含めて全て送信されるみたいです。気持ち悪すぎ。てっきりinnerTextだけが送信されるのだと思ってた…… とりあえずGMOインターネット証券のPC用サイトはFirefoxでもログインできるので、button要素の情報の送信にはvalue属性値を参照することにしました。
J( 'ー`)し たけしへげんきですか。いまめーるしてます
(`Д) うるさい死ね メールすんな殺すぞ
J( 'ー`)し ごめんね。おかあさんはじめてめーるしたから、ごめんね
(`Д) うるさいくたばれ、メールすんな
J( 'ー`)し お金ふりこんでおきました。たいせつにつかってね 食事はしていますか?
(`Д) 死ねくそ女
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄○ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ o __ ゚ た | け | し | ∴ J('A`)し たけし.......... ──┐ ∀ << )
| |
|
7月22日(土) | トラックバック(0) | コメント(0) | 日記 | 管理
|
| GMOインターネット証券の注文ページが変わった |
|
| GMOインターネット証券への発注部分をこれから作ろうとしていた矢先に、PC用サイトの発注ページが改訂されてしまいました_| ̄|○。 まあ、まだログインすら手をつけていない状態なのであんまり影響はありませんが。 改訂前の発注ページのHTMLでは、入力フォーム中に存在する全ての送信用の要素にname属性値がつけられていましたが、改訂後のページでは取引区分などのselect要素からname属性値が無くなっています。WebBrowserオブジェクトを使わずにHTTPWebRequestを使って発注するプログラムを書いているので、この変更の意味は結構大きいです。 パラメータも幾つか変わっていて、改訂前での注文確認画面で見られたパラメータが、そのまま発注ページに組み込まれたような形になっているようです。つまり、改訂前での注文確認画面に入力機能そのものを付け加えて、確認はJavaScriptでやってしまうというような感じなのだと思います。 送信する内容については、input要素にはname属性とid属性がそれぞれ同じ値で指定されていて、select要素にもid属性は記述されているので、多分その値をname属性値の代わりとしてpostしてやれば発注できるのではないかと思うのですが、もしかすると送信前にjavascriptで値が改竄されてからサーバーに送られる仕組みになっているのかもしれないので、今はちょっと手が出せません(自分のPCからPOSTしようとしている内容だけを取り出せるようなパケットモニタリングソフトって無いのかな?)。 まあ、もともとこの証券会社はWeb2.0を目指すと以前から公言しており、PC用の発注サイトにもJavaScriptがふんだんに使われていたので、そのうちこうなるであろうとはある程度予想していました。 で、それならば携帯用のサイトを利用しようと考えたのですが、こちらは注文するときに銘柄検索、入力、確認という3段階を経なければなりません。まあ機械がやるのと人間が手で入力するのは全然違うわけですが。あと、携帯サイトとPC用サイトで比較してもPOSTのパラメータはかなり違うみたいなので、あまり参考にはなりませんでした。 ∧_∧ _,,..,,,,_ (・ω・` )___./ ,' 3 `ヽーっ O┬O ) / ヽ ⊃ ⌒_つ ◎┴し'-◎ ≡ `'ー---‐'''''">>>>
今週入出金=-181,128 週末資産=1,008,306
前週比=-12,624 取引全然やっていないんだけど、以前使ってた証券会社の税金分とか色々を加味してマイナス。出金とか入金とかでお金のやり取りが結構あったので、自分自身が混乱しないようにメモ。
| |
|
7月21日(金) | トラックバック(0) | コメント(0) | 日記 | 管理
|
| 結局自分で簡易HTMLパーサを作った |
|
| HTMLパーサを作らないで正規表現を駆使して証券会社のページを解析しようとしたら、意外と面倒なことに気付きました。証券会社のページをある程度詳しく解析しなければならないケースが結構あるようです。 例えばGMOインターネット証券のサイトでは、取引注文のページで注文内容を入力してSUBMITボタンを押すと、注文確認のページが表示され、そこでパスワードを入力してはじめて注文が発注できるようになっています。注文確認のページにはパスワードとSUBMITボタン以外に入力箇所は表示されていませんが、取引注文ページでの入力内容をサーバーに届けるためのhiddenのinput要素が記述されています。ですがこのhiddenなinput要素は、取引注文ページで入力したものとは微妙に異なっているようなので、実際に注文を発注するには、そのhiddenのinput要素をきちんと読まなければなりません。それを読み込むにはまずform要素がどこにあるかを知る必要があります。formにはclass属性やらaction属性やらmethod属性やら色々あるので、これだけでも正規表現で読み取るのはなかなか面倒です。 そんなわけで泣く泣くHTMLパーサを作っていたら意外とそれなりに役に立ちそうなのが出来ました。Japan_internet_com デベロッパー - Microsoft C#での HTML 構文解析の記事のおかげです(このままの実装だとタグの検索が面倒なので、タグの部分とその後ろのInnerTextをひとつずつオブジェクト化して実装しています)。この記事を読んでいなければ、無理にツリー構造にこだわってしまってドツボに嵌っていたと思います。 他人のHTMLパーサを探してる時間が本当に無駄でした……こんなことならもっと早く作っておけばよかった。ここ数日この件で行ったりきたりだったけど、ようやく先に進みそう。 ∩ いな | | ./二つ う いん | | | | 属と ノ从ハ从 さ 性聞 .リ ´∀`§ かこ X_@X 耳 |え U|_____|U |の ∪ ∪ ! !
| |
|
7月20日(木) | トラックバック(0) | コメント(0) | 日記 | 管理
|
| EfTidyは日本語を通さないのかも |
|
| 昨日紹介したEfTidyを早速使ってみました。しかしHTMLの日本語部分が何故か実体参照に置換されてしまいました。エンコード設定のオプションなどもきちんと指定してみたのですが、うまく行きませんでした。本来のHTML Tidyは日本語を通す筈なのに。おかしい。 EfTidyが原因なのか、その下位にあるTidy Libraryが原因なのかがわからなかったので、Tidy LibraryのDLLをDeclare文で直接呼び出すサンプル(http://users.rcn.com/creitzel/tidy/TestTidy.NET.vb)を使って調べてみたのですが、これを利用しても日本語の部分が実体参照に置換されてしまいました。 ライブラリのヘッダファイルを見ると、どうもアジア語圏用のディレクティブがあるようです。実際にライブラリをビルドしたわけではないのでよくわかりませんが、もしかすると、私がダウンロードしてきたライブラリはその設定ディレクティブがオフになった状態でコンパイルされたものなのかも知れません(欧米の人が配布していたものなので)。 そうなると自分の手でライブラリをビルドすればいいのかもしれませんが、それこそわざわざそこまでやって確認するのが無駄に思えてきました。 Japan_internet_com デベロッパー - Microsoft C#での HTML 構文解析という記事を見つけたので、これを参考にして自分でHTMLパーサを作ったほうが良さそうです。 この記事にあるものは、内部がツリー構造化されているような厳密なHTMLパーサとは違って、上から下まで適当に読み下して解析する単純なものです。色々テストしているうちに気付いたのですが、特定のサイトの特定部分のみを切り出すような目的ならば、ツリー構造化されているものよりも、このサンプルにあるような単純なやり方の方が楽なのではないかと思います。 まあいずれにせよ、ブラウザを作るわけじゃないのだから、こんなところに専念するわけにもいかないので、必要になったらプログラムを組むという形で対処しようと思います。 ┏━┳━━┳━┓ ┣ヽ  ̄ / (・ω・)┫ ┣━━╋━╋━┫ ┣、ハ,,、 \(. \ ノ┫ズコープラモ ┗┻━━┻━┻┛
完成図 ∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄ ̄
| |
|
7月19日(水) | トラックバック(0) | コメント(0) | 日記 | 管理
|
| EfTidyというTidy Libraryのラッパーがあるらしい |
|
| HTMLDocumentはWebBrowserオブジェクトを使わないと文字列を直接DOMで解析する方法が無い、というわけでゴリゴリと正規表現やら何やらを色々使って証券会社のページを解析することにしました。やってみるとかなり面倒。いきなり証券会社の注文ページを解釈するプログラムを書くのは気が引けたので、まずは信用取引規制銘柄や証券会社固有の規制がある銘柄が示されているテーブルを解釈するプログラムを書きました。でもこれだけでも結構面倒でした。 発注に関しては予めどんな引数が必要なのかをHTMLソースを見て調べておけば、あとは引数をPOSTするだけでいいはずなので、むしろ楽なのかもしれません。ただPOSTの後で返ってきた内容を調べるのとか結構面倒くさそう。 とはいえ、プログラムを書いていくうちに、他人の出所不明のHTMLパーサを使うよりは、自分で書いたHTMLパーサを使ったほうが安心な気がしてきました。多分その方が変なバグがあったときに悩まされずに済みます。でもやっぱり面倒。 で、VB.NETにまともなHTMLパーサのライブラリが無いと嘆いていたのですが、色々探していたらEfTidy: The Tidy Library wrapper - The Code Project - C++ / MFCというのを見つけました。まだ使ってみてませんが、他のHTMLパーサよりも使い物になるかもしれません。 HTMLTidyというのはHTMLのエラーをチェックしたりHTMLをXHTML化したりしてくれる有名なツールです。HTML Tidy Project Pageでこのライブラリーが公開されていて、その中にはHTMLのパーサ機能が含まれています。もともとエラー付きの汚いHTMLを読み込むことを前提に設計されているものなので、多分汚いHTMLでもきちんとパーサとして機能してくれるのではないかと思います。EfTidyはそれのラッパーで、これを介してVB.NETから利用することができるようです。HTMLDocumentとは違ってちゃんとメモリ上にある文字列型のHTMLソースを読み込めるようになっているようです。 これを使ってみようかな~とも思うのですが、そこまでする必要あるのかな~という思いもあって、ちょっと悩み中。そのうちXML化する可能性のあるものにおいて、現段階でわざわざそこまでしてHTMLを解析する必要があるのか?という疑問。まあ、もし正規表現で記述していくのもやってられないくらい面倒くさいHTMLパージング処理が必要になったら考えます。 それにしても、新興は結構やばそうですね。
[゚д゚] /[_]ヽ | | ■■□■■□◇_◇□□□
[゚д゚] □_]ヽ□ | | ■■_■■_◇_◇□□□
[゚д゚] □_]ヽ□ | | ■■_■■_◇_◇□□□
[゚д □_ | | ■■_■■_◇_◇□□□
■■_■■_◇_◇□□□
| |
|
7月18日(火) | トラックバック(0) | コメント(0) | 日記 | 管理
|