'API関数
Private Declare PtrSafe Function InternetOpen _
Lib "wininet.dll" _
Alias "InternetOpenA" _
(ByVal lpszAgent As String _
, ByVal dwAccessType As Long _
, ByVal lpszProxyName As String _
, ByVal lpszProxyBypass As String _
, ByVal dwFlags As Long) As Long
Private Declare PtrSafe Function InternetCloseHandle _
Lib "wininet.dll" _
(ByVal hInternet As Long) As Integer
Private Declare PtrSafe Function InternetConnect _
Lib "wininet.dll" _
Alias "InternetConnectA" _
(ByVal hInternet As Long _
, ByVal lpszServerName As String _
, ByVal nServerPort As Integer _
, ByVal lpszUsername As String _
, ByVal lpszPassword As String _
, ByVal dwService As Long _
, ByVal dwFlags As Long _
, ByVal dwContext As Long) As Long
Private Declare PtrSafe Function HttpOpenRequest _
Lib "wininet.dll" _
Alias "HttpOpenRequestA" _
(ByVal hConnect As Long _
, ByVal lpszVerb As String _
, ByVal lpszObjectName As String _
, ByVal lpszVersion As String _
, ByVal lpszReferer As String _
, ByVal lpszAcceptTypes As Long _
, ByVal dwFlags As Long _
, ByVal dwContext As Long) As Long
Private Declare PtrSafe Function HttpSendRequest _
Lib "wininet.dll" _
Alias "HttpSendRequestA" _
(ByVal hRequest As Long _
, ByVal lpszHeaders As String _
, ByVal dwHeadersLength As Long _
, ByVal lpOptional As String _
, ByVal dwOptionalLength As Long) As Integer
Private Declare PtrSafe Function HttpQueryInfo _
Lib "wininet.dll" _
Alias "HttpQueryInfoA" _
(ByVal hRequest As Long _
, ByVal dwInfoLevel As Long _
, ByRef lpvBuffer As Any _
, ByRef lpdwBufferLength As Long _
, ByRef lpdwIndex As Long) As Integer
Private Declare PtrSafe Function InternetReadFile _
Lib "wininet.dll" _
(ByVal hRequest As Long _
, ByRef lpBuffer As Any _
, ByVal dwNumberOfBytesToRead As Long _
, ByRef lpdwNumberOfBytesRead As Long) As Integer
Private Declare PtrSafe Function HttpAddRequestHeaders _
Lib "wininet.dll" _
Alias "HttpAddRequestHeadersA" _
(ByVal hHttpRequest As Long _
, ByVal sHeaders As String _
, ByVal lHeadersLength As Long _
, ByVal lModifiers As Long) As Integer
Private Declare PtrSafe Function InternetSetCookie Lib "wininet.dll" _
Alias "InternetSetCookieA" _
(ByVal lpszUrlName As String, _
ByVal lpszCookieName As String, _
ByVal lpszCookieData As String) As Boolean
Private Declare PtrSafe Function InternetGetCookie Lib "wininet.dll" _
Alias "InternetGetCookieA" _
(ByVal lpszUrlName As String, _
ByVal lpszCookieName As String, _
ByVal lpszCookieData As String, _
lpdwSize As Long) As Boolean
'API関数で使用する定数も定義
Private Const INTERNET_FLAG_RELOAD As Long = &H80000000
Private Const INTERNET_FLAG_DONT_CACHE As Long = &H4000000
Private Const INTERNET_FLAG_RESYNCHRONIZE As Long = &H800
Private Const INTERNET_FLAG_NEED_FILE As Long = &H10
Private Const INTERNET_FLAG_HYPERLINK As Long = &H400
Private Const INTERNET_FLAG_NO_COOKIES As Long = &H80000
Private Const INTERNET_FLAG_NO_AUTO_REDIRECT As Long = &H200000
Private Const INTERNET_FLAG_SECURE = &H800000
Private Const INTERNET_FLAG_KEEP_CONNECTION = &H400000
Private Const INTERNET_FLAG_IGNORE_CERT_CN_INVALID = &H800000
Private Const INTERNET_FLAG_IGNORE_CERT_DATE_INVALID = &H800000
Private Const INTERNET_OPEN_TYPE_DIRECT As Long = &H1
Private Const INTERNET_OPEN_TYPE_PRECONFIG As Long = &H0
Private Const INTERNET_OPEN_TYPE_PROXY As Long = &H3
Private Const INTERNET_FLAG_ASYNC As Long = &H10000000
Private Const INTERNET_FLAG_FROM_CACHE As Long = &H1000000
Private Const INTERNET_DEFAULT_HTTP_PORT As Integer = 80
Private Const INTERNET_DEFAULT_HTTPS_PORT As Integer = 443
Private Const INTERNET_SERVICE_HTTP As Long = 3
Private Const HTTP_QUERY_CONTENT_TYPE As Long = 1
Private Const HTTP_QUERY_CONTENT_LENGTH As Long = 5
Private Const HTTP_QUERY_DATE As Long = 9
Private Const HTTP_QUERY_LAST_MODIFIED As Long = 11
Private Const HTTP_QUERY_STATUS_CODE As Long = 19
Private Const HTTP_QUERY_RAW_HEADERS_CRLF As Long = 22
Private Const HTTP_QUERY_LOCATION As Long = 33
Private Const HTTP_QUERY_SERVER As Long = 37
Private Const HTTP_QUERY_SET_COOKIE As Long = 43
Private Const HTTP_QUERY_COOKIE As Long = 44
Private Const HTTP_QUERY_REQUEST_METHOD As Long = 45
Private Const HTTP_ADDREQ_FLAG_ADD As Long = &H20000000
Private Const HTTP_ADDREQ_FLAG_REPLACE As Long = &H80000000
Private Const ERROR_NO_MORE_ITEMS = 259
Private Const ERROR_INSUFFICIENT_BUFFER = 122
'定数定義
'環境によって変更してください
'*****************************************************************
'ダウンロードファイルの保存場所 :ドキュメントフォルダ
Private Const SAVE_DER As String = "C:\Users\******\Documents"
'*****************************************************************
Private Const SAVE_FILE As String = "\000temp.tmp"
Private Const IDRANGE As String = "C4"
Private Const PASSRANGE As String = "E4"
Private Const USERRANGE As String = "C2"
Private Const ASSETRANGE As String = "B7"
'変数の定義
Private lngWinINet As Long
Private lngHttpHnd As Long
Private lngReqHnd As Long
Private strBuffer As String * 1024
Private lngLength As Long
Private bytDataArea() As Byte
Private lngDataLength As Long
Private lngSavePos As Long
Private idText As String
Private passText As String
Private PostData As String
Private c_dir As String
Sub login_Click()
'IDとパスワードを取得
idText = Range(IDRANGE).Value
passText = Range(PASSRANGE).Value
'IDチェック
If Len(idText) = 0 Then
MsgBox "IDを入力してください", vbExclamation
Exit Sub
End If
'パスワードチェック
If Len(passText) = 0 Then
MsgBox "パスワードを入力してください", vbExclamation
Exit Sub
End If
Dim lngRC As Long
Dim lngStatus As Long
'インターネットサービスオープン
lngRC = fcInternetOpen
'HTTPサーバとの接続と切断
If lngRC = 0 Then
'HTTPサーバ接続
lngRC = fcHTTPConnect("sec-sso.click-sec.com")
'リクエストを初期化
If lngRC = 0 Then
lngRC = fcHTTPOpenRequest("POST", "/mk/")
End If
'リクエストを送信
If lngRC = 0 Then
Call fcHttpAddRequestHeaders("Referer: https://sec-sso.click-sec.com/")
Call fcHttpAddRequestHeaders("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
Call fcHttpAddRequestHeaders("Accept-Language: ja,en-us;q=0.7,en;q=0.3")
Call fcHttpAddRequestHeaders("Accept-Encoding: gzip, deflate")
Call fcHttpAddRequestHeaders("Connection: keep-alive")
PostData = "j_username=" + idText + "&j_password=" + passText + "&LoginForm=%DB%B8%DE%B2%DD&p=80"
lngRC = fcHTTPSendRequest(PostData)
End If
lngRC = 0
'HTTPステータスコードを取得
If lngRC = 0 Then
lngRC = fcHTTPQueryInfo(HTTP_QUERY_STATUS_CODE)
'HTTPステータスコードを保存
lngStatus = CLng(strBuffer)
'HTTPステータスコードチェック
If lngStatus < 200 Or lngStatus > 299 Then
lngRC = 0
End If
End If
'ダウンロード
If lngRC = 0 Then
lngSavePos = 0
lngDataLength = 0
lngRC = fcHTTPReadFile
End If
'ファイルを保存
If lngRC = 0 Then
lngRC = fcDataSave(SAVE_DER, SAVE_FILE)
End If
'HTTPリクエストクローズ
Call fcHttpRequestClose
'切断
Call fcHTTPDisConnect
Dim sCookieVal As String * 256
Dim bRet As Boolean
If lngRC = 0 Then
'ソース解析
Dim buf As String
Dim tmp As Variant
Dim dir_tmp As Variant
Dim loginRes As Long
Open SAVE_DER + SAVE_FILE For Input As #1
Line Input #1, buf
Close #1
tmp = Split(buf, "
")
loginRes = InStr(1, tmp(1), "様", vbBinaryCompare)
If loginRes > 0 Then
MsgBox "ログイン成功"
'リンク先の取得
dir_tmp = Split(buf, "https://kabu.click-sec.com/")
dir_tmp = Split(dir_tmp(1), "/mk/")
c_dir = dir_tmp(0)
Range("C2").Value = LTrim(Replace(tmp(1), vbLf, ""))
Else
MsgBox "ログイン失敗 ID、パスワードを確認してください"
Range(USERRANGE).Value = ""
Range(ASSETRANGE).Value = ""
End If
'ダウンロードファイル削除
Kill SAVE_DER + SAVE_FILE
End If
End If
End Sub
Sub getAssets_Click()
Dim lngRC As Long
Dim lngStatus As Long
'インターネットサービスオープン
lngRC = fcInternetOpen
'HTTPサーバとの接続と切断
If lngRC = 0 Then
'HTTPサーバ接続
lngRC = fcHTTPConnect("kabu.click-sec.com")
'リクエストを初期化
If lngRC = 0 Then
lngRC = fcHTTPOpenRequest("GET", "/" + c_dir + "/mk/dispPaUserSheet.do")
End If
'リクエストを送信
If lngRC = 0 Then
Call fcHttpAddRequestHeaders("Referer: https://kabu.click-sec.com/" + c_dir + "/mk/dispKabuMenu.do")
Call fcHttpAddRequestHeaders("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
Call fcHttpAddRequestHeaders("Accept-Language: ja,en-us;q=0.7,en;q=0.3")
Call fcHttpAddRequestHeaders("Accept-Encoding: gzip, deflate")
Call fcHttpAddRequestHeaders("Connection: keep-alive")
PostData = ""
lngRC = fcHTTPSendRequest(PostData)
End If
lngRC = 0
'HTTPステータスコードを取得
If lngRC = 0 Then
lngRC = fcHTTPQueryInfo(HTTP_QUERY_STATUS_CODE)
'HTTPステータスコードを保存
lngStatus = CLng(strBuffer)
'HTTPステータスコードチェック
If lngStatus < 200 Or lngStatus > 299 Then
lngRC = 0
End If
End If
'ダウンロード
If lngRC = 0 Then
lngSavePos = 0
lngDataLength = 0
lngRC = fcHTTPReadFile
End If
'ファイルを保存
If lngRC = 0 Then
lngRC = fcDataSave(SAVE_DER, SAVE_FILE)
End If
'HTTPリクエストクローズ
Call fcHttpRequestClose
'切断
Call fcHTTPDisConnect
If lngRC = 0 Then
'ソース解析
Dim buf As String
Dim tmp As Variant
Dim loginRes As Long
Dim docRes As Long
Open SAVE_DER + SAVE_FILE For Input As #1
Line Input #1, buf
Close #1
docRes = InStr(1, buf, "保有資産時価評価額合計", vbBinaryCompare)
If docRes > 0 Then
tmp = Split(buf, "保有資産時価評価額合計")
tmp = Split(tmp(1), "円")
loginRes = InStr(1, tmp(0), "right", vbBinaryCompare)
End If
If loginRes > 0 Then
MsgBox "取得成功"
Range(ASSETRANGE).Value = LTrim(Replace(Replace(tmp(0), vbLf, ""), "