雑記帳

ソフトを中心に雑記を書いてる割とすぐ転職したい人。コメント貰えると私が喜びます。

pythonで株取引したい。

会社の人に自動取引で稼げないかとの話をされたので、
で、私はweb上での株取引にはSBI証券を利用している。
せっかくなので自動取引の方法を少し試してみる。
※私は為替(非FX)の方が強いんだけどなぁ。

早速少し調べた。

(1)ここで似たようなことをやろうとして失敗している様子である。(勝手にリンク貼ってゴメンナサイ)
http://talkabouthaskell.blogspot.com/2011/01/python-httppost.html

このサイトのリダイレクトでハマったらしいので、キャッシュやら認証やら何かが足りないんだろうなと思って、
ログインとか関係で適当に漁ってみると、次のような記述を見つけた。

(2)Cookieを使ってみるような記述。(またゴメンナサイ)
http://d.hatena.ne.jp/yumimue/20080101/1199148663

で、そもそもCookieってなんだろう?となった。
なんとなくキャッシュっぽい印象だけあったけど、実はイマイチ知らない言葉。
せっかくなので調べてみると、

Webサイトの提供者が、Webブラウザを通じて訪問者のコンピュータに一時的にデータを書き込んで保存させるしくみ。
Cookieにはユーザに関する情報や最後にサイトを訪れた日時、そのサイトの訪問回数などを記録しておくことができる。
Cookieはユーザの識別に使われ、認証システムや、WWWによるサービスをユーザごとにカスタマイズするパーソナライズシステムの要素技術として利用される。

1つのCookieには4096バイトのデータを記録でき、最大で300のCookieを保存できる。
1台のサーバが同じコンピュータに対して発行できるCookieの数は20個に制限されている。
Cookieにはそれぞれ有効期限を設定することができ、有効期限を過ぎたCookieは消滅する。

http://e-words.jp/w/Cookie.htmlより
ということで、どうやらサーバ側で有効期限を決められるキャッシュのようなものらしい。

では適当にコーディングをば。
面倒なので試行錯誤は飛ばします。
アクセス出来たかを確認するために、.pyファイルと同じ階層にhtmlを保存しながらページを開いてます。

# 
# -*- coding:utf-8 -*-
#
#============================================================
# SBI証券サイトを弄りたいpythonプログラム初級編
#                                                 by FJKei
#============================================================
import urllib
import urllib2
import cookielib

# ログイン情報
USERNAME	=	"ユーザIDを入れる"
PASSWORD	=	"パスワードを入れる"

# WebページURL
class URLs():
	main = {
		"top" : "https://site2.sbisec.co.jp/ETGate/",
		"market_top"  : "マーケットのトップURLを入れる",
		"koza" :  "口座管理のトップURLを入れる"
	}
	BackupPage = {
		"toppage"	:	"https://k.sbisec.co.jp/bsite/visitor/top.do",
		"nikkei_ave"	: "https://k.sbisec.co.jp/bsite/market/menu.do"	
	}

SaveCnt = 0
def SavePage(page):
	global SaveCnt
	f = open("out%03d.html"%(SaveCnt),"w")
	f.write(page)
	f.close()
	SaveCnt += 1
	
#	システム全体
if __name__ == '__main__':
	# Cookieを保存してくれる何かを生成してリンクする。
	opener = urllib2.build_opener()
	opener.add_handler(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))

	loginform = '&user_id=%s&user_password=%s'%(USERNAME,PASSWORD)	
	logincookie = '&JS_FLG=1&BW_FLG=chrome\%2CNaN&_ControlID=WPLETlgR001Control&_DataStoreID=DSWPLETlgR001Control&_PageID=WPLETlgR001Rlgn10&_ActionID=loginHome&getFlg=on&ACT_loginHome.x=9&ACT_loginHome.y=4'
	
	# Cookieを利用してログイン(トップページへ)
	req = urllib2.Request(URLs.main['top'],loginform+logincookie)
	conn = opener.open(req)
	cont = conn.read()
	SavePage(cont)

	# Marketのトップページを開く
	req = urllib2.Request(URLs.main['market_top'])
	conn = opener.open(req)
	cont = conn.read()
	SavePage(cont)
	
	# 口座管理のページを開いてみる	
	req = urllib2.Request(URLs.main['koza'])
	conn = opener.open(req)
	cont = conn.read()
	SavePage(cont)

こんな感じでページにアクセス出来たみたいです。
最初にアクセスした時のcookieは保存出来るのかと思ってトップページに一回アクセスしてみたりしたけど、
なんかうまくいかなかった。
デフォルトのcookieを手入力で書くのはなんか括弧悪いなあと思いつつ、面倒なのでそのままに。

次はサーバで常駐してをたまに記録する仕組みを作る方法を作りたい。
(別に次回の更新がそういうことになる訳ではないですよ。)