objIEx.Document.Write "<tr>" for j=0 to rt-1 objIEx.Document.Write "<td>" if j=1 or j=2 then objIEx.Document.Write "<input type=radio name=r>" '& cstr(i) & "_" & cstr(j) & ">"
objIEx.Document.Write "<input size=3 type=input name=f" & cstr(i) & "_" & cstr(j) & "></td>" next objIEx.Document.Write "</tr>" next objIEx.Document.Write "</table>" objIEx.Document.Write "停止:<input type=checkbox name=term><br>" Set Voice1 = CreateObject("SAPI.SpVoice") Set xml = CreateObject("WinHttp.WinHttpRequest.5.1") Set doc = CreateObject("Microsoft.XMLDOM") 'メモ CreateObjectするより、参照設定で指定したほうが本当はいいかも。 doc.async = False '非同期をやめる。つまり同期にする。 'シーケンス1 リダイレクト先を取得 xml.option(6) = False '6=WinHttpRequestOption_EnableRedirects 'リダイレクトさせない 'GETメソッド版 'GETメソッドでも可能だったが、GMOの仕様書ではPOSTになっていた url = "https://sec-sso.click-sec.com/webservice/wsfx-redirect?u=" & uid '2008/03/29 URL変更 xml.Open "GET", url, False xml.send 'POSTの場合、一般的にこの指定が必要 Location = xml.getResponseHeader("Location") 'リダイレクト先URLの取得 aa = InStr(Len("https://") + 1, Location, "/") 'https://fx.click-sec.com/ の文字列数 bb = InStr(aa + 1, Location, "/") 'https://fx.click-sec.com/fx1-1/ の文字列数 '2008/03/29 基底URL取得方法修正 BaseURL = Left(xml.getResponseHeader("Location"), bb - 1) '基底URL = "https://fx.click-sec.com/fx1-1" xml.option(6) = True '6=WinHttpRequestOption_EnableRedirects '以後はリダイレクトをさせる 'シーケンス2 リダイレクト先へ飛んでセッションIDを取得 url = Location xml.Open "GET", url, False xml.send doc.loadXML (xml.responseText) If doc.documentElement.selectSingleNode("responseStatus").nodeTypedValue <> "OK" Then msg = doc.documentElement.selectSingleNode("message").nodeTypedValue objIEx.Document.write "GMO側が以下のエラーを返しました" + vbCrLf + "[" + msg + "]" WScript.Quit End If 'シーケンス3 ユーザ認証とリダイレクトでURLをたどっていく url = BaseURL & "/ws-login?j_username=" & uid & "&j_password=" & passwd xml.Open "GET", url, False xml.send doc.loadXML (xml.responseText) If doc.documentElement.selectSingleNode("responseStatus").nodeTypedValue = "NG" Then If doc.documentElement.selectSingleNode("message").nodeTypedValue = "Authentication Failure." Then objIEx.Document.write "ユーザIDまたはパスワードが誤っています" WScript.Quit ElseIf doc.documentElement.selectSingleNode("message").nodeTypedValue = "Web service is not permitted." Then '2007/04/03現在、GMOはこのエラーをかえさない。正常になる。ただし発注や一覧を問い合わせるとエラーになる objIEx.Document.write "GMOホームページに行って利用設定が必要です" WScript.Quit Else msg = doc.documentElement.selectSingleNode("message").nodeTypedValue objIEx.Document.write "GMO側が以下のエラーを返しました" + vbCrLf + "[" + msg + "]" WScript.Quit End If ElseIf doc.documentElement.selectSingleNode("responseStatus").nodeTypedValue <> "OK" Then msg = doc.documentElement.selectSingleNode("message").nodeTypedValue objIEx.Document.write "GMO側が以下のエラーを返しました" + vbCrLf + "[" + msg + "]" WScript.Quit End If objIEx.Document.write "Login完了<br>" doc.async = False '非同期をやめる。つまり同期にする。 url = BaseURL & "/ws/fx/tsukaPairList.do" 'url="https://fx.gmo.jp/fx1-1/ws/fx/tsukaPairList.do" '引数なしなら、全通貨ペアを取得 'url="https://fx.gmo.jp/fx1-1/ws/fx/tsukaPairList.do&tka[0].tkt=1&tka[1].tkt=2" '引数指定も可能 xml.Open "GET", url, False xml.send doc.loadXML (xml.responseText) If doc.documentElement.selectSingleNode("responseStatus").nodeTypedValue <> "OK" Then msg = doc.documentElement.selectSingleNode("message").nodeTypedValue objIEx.Document.write "GMO側が以下のエラーを返しました" + vbCrLf + "[" + msg + "]" End If Set ListItems = doc.documentElement.selectSingleNode("tsukaPairList").childNodes ii = 0 Do While ii < ListItems.Length And ii < 15 Set ListItem = ListItems.Item(ii) ' = ListItem.Attributes.getNamedItem("tsukaPairCode").nodeTypedValue objIEx.document.all.tags("INPUT").item(ii*(rt+2)+0).value= ListItem.Attributes.getNamedItem("tsukaPairName").nodeTypedValue ii = ii + 1 Loop do url = BaseURL & "/ws/fx/rateList.do" xml.Open "GET", url, False xml.send doc.loadXML (xml.responseText) If doc.documentElement.selectSingleNode("responseStatus").nodeTypedValue <> "OK" Then msg = doc.documentElement.selectSingleNode("message").nodeTypedValue objIEx.Document.write "GMO側が以下のエラーを返しました" + vbCrLf + "[" + msg + "]" WScript.Quit End If Set ListItems = doc.documentElement.selectSingleNode("rateList").childNodes ii = 0 Do While ii < ListItems.Length And ii < 15 Set ListItem = ListItems.Item(ii) objIEx.document.all.tags("INPUT").item(ii*(rt+2)+2).value =ListItem.selectSingleNode("bid").nodeTypedValue objIEx.document.all.tags("INPUT").item(ii*(rt+2)+4).value =ListItem.selectSingleNode("ask").nodeTypedValue objIEx.document.all.tags("INPUT").item(ii*(rt+2)+5).value = ListItem.selectSingleNode("zenjitsuhi").nodeTypedValue objIEx.document.all.tags("INPUT").item(ii*(rt+2)+6).value = ListItem.selectSingleNode("bidHigh").nodeTypedValue objIEx.document.all.tags("INPUT").item(ii*(rt+2)+7).value = ListItem.selectSingleNode("bidLow").nodeTypedValue objIEx.document.all.tags("INPUT").item(ii*(rt+2)+8).value = ListItem.selectSingleNode("uriSwap").nodeTypedValue objIEx.document.all.tags("INPUT").item(ii*(rt+2)+9).value = ListItem.selectSingleNode("kaiSwap").nodeTypedValue ii = ii + 1 Loop for i= 0 to 14 for j=1 to 3 step 2 if objIEx.document.all.tags("INPUT").item(i*(rt+2)+j).checked=true then Set ListItem = ListItems.Item(i) if j=1 then Voice1.Speak ListItem.selectSingleNode("bid").nodeTypedValue else Voice1.Speak ListItem.selectSingleNode("ask").nodeTypedValue end if exit for end if next next If ii < ListItems.Length Then objIEx.Document.write "通貨ペアが15件以上あります" End If if objIEx.Document.all.term.checked=true then exit do WScript.Sleep (5000) loop doc.async = False '非同期をやめる。つまり同期にする。 url = BaseURL & "/ws-logout" xml.Open "GET", url, False xml.send doc.loadXML (xml.responseText) If doc.documentElement.selectSingleNode("responseStatus").nodeTypedValue <> "OK" Then objIEx.Document.write "logout error" else objIEx.Document.write "logout OK" End If Set xml = Nothing Set doc = Nothing