关于Websocket 的Autohotkey | Winhttp 和东西问题
Autohotkey concerning Websocket | Winhttp and stuff question
正在尝试通过websocket方法获取交易信息。有很多其他语言的指南和手册,我想通过 Autohotkey 获得它最好。
下面是我在使用 Autohotkey 接收信息时使用的代码。
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 并按照 应该使用的方式使用它 .(See 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 的设计方式,您必须 class 扩展 WebSocket class,但如果您了解 OOP (AHK),它实际上非常方便。
这是它的工作原理:
New HelperClass("wss://echo.websocket.org/")
你准备幕后魔术打开一个websocket连接到指定的websocket
OnOpen()
函数在您的 HelperClass
中运行,一旦魔法准备就绪
this.Send(DataToSend)
您调用 Send
函数(如果在 WebSocket
class 中找到)并传入您想要的数据
- 您收到一条响应消息(
OnMessage()
在您的 HelperClass
中运行),或者您可能收到一条错误消息(OnError()
在您的 HelperClass
中运行)
- 连接关闭,因此
OnClose()
在您的 HelperClass
中运行。
你还想通过 this.Disconnect()
在 WebSocket
class 中调用 Disconnect()
函数来重置幕后魔法
(当我说 HelperClass
或 WebSocket
class 时,实际上是不正确的,因为它们有点相同 class,你只是用 HelperClass
)
扩展 WebSocket
class
就是这样。
杂项说明:
从 G33kDude 的 GitHub 下载 WebSocket class 并使用 #Include
(docs) 将 WebSocket.ahk 文件包含到您自己的脚本中。
G33kDude示例脚本使用#Include ../WebSocket.ahk
来包含它,因为他的示例脚本在子文件夹中,所以他用..
返回一个文件夹,然后指定要包含的文件。
还要注意引号在 DataToSend
变量中是如何正确转义的。
正在尝试通过websocket方法获取交易信息。有很多其他语言的指南和手册,我想通过 Autohotkey 获得它最好。
下面是我在使用 Autohotkey 接收信息时使用的代码。
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 并按照 应该使用的方式使用它 .(See 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 的设计方式,您必须 class 扩展 WebSocket class,但如果您了解 OOP (AHK),它实际上非常方便。
这是它的工作原理:
New HelperClass("wss://echo.websocket.org/")
你准备幕后魔术打开一个websocket连接到指定的websocketOnOpen()
函数在您的HelperClass
中运行,一旦魔法准备就绪this.Send(DataToSend)
您调用Send
函数(如果在WebSocket
class 中找到)并传入您想要的数据- 您收到一条响应消息(
OnMessage()
在您的HelperClass
中运行),或者您可能收到一条错误消息(OnError()
在您的HelperClass
中运行) - 连接关闭,因此
OnClose()
在您的HelperClass
中运行。
你还想通过this.Disconnect()
在
WebSocket
class 中调用 Disconnect()
函数来重置幕后魔法
(当我说 HelperClass
或 WebSocket
class 时,实际上是不正确的,因为它们有点相同 class,你只是用 HelperClass
)
WebSocket
class
就是这样。
杂项说明:
从 G33kDude 的 GitHub 下载 WebSocket class 并使用 #Include
(docs) 将 WebSocket.ahk 文件包含到您自己的脚本中。
G33kDude示例脚本使用#Include ../WebSocket.ahk
来包含它,因为他的示例脚本在子文件夹中,所以他用..
返回一个文件夹,然后指定要包含的文件。
还要注意引号在 DataToSend
变量中是如何正确转义的。