尝试通过websocket方法获取交易信息。有很多其他语言的指南和手册,我希望通过自动热键得到它。
下面是我使用自动热键接收信息时使用的代码。
Get_Price(Target_Site, Target_Coin, Price_Type = "KRW") {
if (Target_Site = "UpBit") {
API_Url := "https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/10?code=CRIX.UPBIT."
}
Result_URL := API_Url "" Price_Type "-" Target_Coin
Result_Json := Get_WinHttp(Result_URL)
RegExMatch(Result_Json, "tradePrice"`":(.*?).", Result) ;If(Target_Coin="BTT") Or (Target_Coin="DOGE") If(Target_Coin="BTT") Or (Target_Coin="DOGE")RegExMatch(Result_Json, "tradePrice"`":(.*?),", Result)
Return Result1
}
与Websocket相比,上面的方法似乎更明确、更容易。我唯一要做的就是用我的信息形成正确的url,并发送该url,然后从网站获得结果。
但是,当涉及到websocket时,我知道正确的url,正确的信息要发送,但不知道如何发送和…是的。
Url:wss://api.upbit.com/websocket/v1
发送内容:'[{"ticket":"test1243563456"},{"type":"trade",{"type":"trade","codes":["KRW-BTC", "KRW-ETH"]}]'
如何:我不知道。但我碰巧遇到了一些有趣的AHK的例子,我希望我可以修改这个。如果您能看一看,并在可能的情况下指导我,我将不胜感激。
#Include, Websocket.Ahk
class Example extends WebSocket
{
OnOpen(Event)
{
InputBox, Data, WebSocket, Enter some text to send through the websocket.
If (ErrorLevel==1)
this.Close()
this.Send(Data)
}
OnMessage(Event)
{
MsgBox, % "Received Data: " Event.data
new Example("wss://echo.websocket.org/")
}
OnClose(Event)
{
MsgBox, Websocket Closed
this.Disconnect()
}
首先,在AHK v1中,您通过做双引号""
来转义引号。
在"tradePrice"`":(.*?)."
中,您的结果字符串中有一个双引号,这几乎是纯粹的运气。
实际上应该这样做:"tradePrice"":(.*?)."
.
你需要正确地转义引号在你接下来要做的事情。
另外,因为你有一个json响应,你可能想要解析json,并使用它应该如何使用。(参见AHK JSON/Jxon)
关于websocket。我个人认为G33kDude的例子(Github)解释得很好,但也许你被他为它所做的面向对象的代码风格所抛弃。
如果你没有OOP/OOP AHK的经验,我想这不是那么容易理解的。
这是一个使用你想要发送的数据调用echo websocket的例子。
#Include WebSocket.ahk
New HelperClass("wss://echo.websocket.org/")
class HelperClass extends WebSocket
{
OnOpen(Event)
{
DataToSend := "[{""ticket"":""test1243563456""},{""type"":""trade"",{""type"":""trade"",""codes"":[""KRW-BTC"", ""KRW-ETH""]}]"
this.Send(DataToSend)
}
OnMessage(event)
{
MsgBox, % "Received a message!:`n" Event.data
this.Close()
}
OnClose(Event)
{
MsgBox, Websocket Closed
this.Disconnect()
}
OnError(Event)
{
MsgBox, Websocket Error
}
__Delete()
{
MsgBox, Exiting
ExitApp
}
}
由于它的设计方式,你必须使这个类扩展WebSocket类,但如果你知道OOP (AHK),它实际上是非常方便的。
它是这样工作的:
New HelperClass("wss://echo.websocket.org/")
你准备在后台魔术打开一个websocket连接到指定的websocket- 一旦魔法已经准备好,
OnOpen()
函数就会在HelperClass
中运行 this.Send(DataToSend)
您调用Send
函数(如果在WebSocket
类中找到)并传递您想要的数据- 你收到一个响应消息(
OnMessage()
在你的HelperClass
中运行),或者你可能收到一个错误(OnError()
在你的HelperClass
中运行) - 连接关闭,所以
OnClose()
在你的HelperClass
中运行。
你还想通过执行this.Disconnect()
在
WebSocket
类中调用Disconnect()
函数来重置幕后魔法。(当我说在HelperClass
或WebSocket
类内时,实际上是不正确的,因为它们是相同的类,你只是用HelperClass
扩展WebSocket
类)
就是这样。
其他注意事项:
从G33kDude的GitHub下载WebSocket类并包含WebSocket。使用#Include
(docs).
将ahk文件转换为您自己的脚本。G33kDude示例脚本使用#Include ../WebSocket.ahk
包含它,因为他的示例脚本在子文件夹中,所以他返回一个文件夹与..
,然后指定要包含的文件。
还要注意如何在DataToSend
变量中正确转义引号。