रोबोट वीचैट संदेश पुश कार्यान्वयन योजना

लेखक:अच्छाई, बनाया गयाः 2020-07-24 09:52:33, अद्यतनः 2023-10-26 20:04:21

img

वीचैट समूह एक सार्वजनिक स्थान है जहां समान विचारधारा वाले दोस्त इकट्ठा होते हैं, और मात्रात्मक ट्रेडिंग सर्कल में वीचैट समूह कोई अपवाद नहीं है। हाल ही में, कई एफएमजेड उपयोगकर्ता पूछते हैं कि वे वीचैट समूह में संदेश कैसे भेज सकते हैं। उदाहरण के लिए, उनकी रणनीति एक ट्रेडिंग सिग्नल भेजती है, लेकिन वे लेनदेन को स्वचालित नहीं करना चाहते हैं। वे उम्मीद करते हैं कि रोबोट द्वारा प्रदान किया गया संकेत एक संदर्भ के रूप में वीचैट समूह को भेजा जा सकता है।

इस कारण से, मैंने शायद वीचैट इंटरफ़ेस को देखा और पाया कि एक आधिकारिक खाते की आवश्यकता है, जो विशेष रूप से सुविधाजनक नहीं है। इसलिए मैंने एक अलग दृष्टिकोण लेने का फैसला किया और निम्नलिखित समाधानों की कोशिश की। मेरी सीमित क्षमता के कारण, इस आवश्यकता का केवल सबसे बुनियादी कार्य पूरा किया जा सकता है, और यह केवल संदर्भ के लिए है।

कार्यान्वयन योजना

मैं लिखने के लिए गोलांग का उपयोग करने का फैसला किया, एक गोलांग पुस्तकालय का उपयोग करने की जरूरत हैgithub.com/go-vgo/robotgo, मूल रूप से समाधान की आवश्यकताओं को इस पुस्तकालय द्वारा प्राप्त किया जाता है।

सबसे पहले हम अपने कंप्यूटर पर एक सेवा कार्यक्रम चलाते हैं, कोड इस प्रकार हैः

package main 
import (
    "fmt"
    "time"
    "github.com/go-vgo/robotgo" 
    "net/http"
    "io/ioutil"
)

func postMsg (msg string) {    
    fmt.Println("Start the mission!") 
    // process ids
    processIds := "WeChat"
    fpid, err3 := robotgo.FindIds(processIds)
    robotgo.ActivePID(fpid[0])
    time.Sleep(time.Millisecond * 2000)
    if err3 == nil {
        fmt.Println(fmt.Sprintf("find %s", processIds), "ids:", fpid)
        /* Use image recognition method to get the coordinates of the click area
        arrPicFileName := []string{"pic1.png", "pic2.png", "pic3.png"}
        for _, name := range arrPicFileName {
            picPath := fmt.Sprintf("/xxx/xxx/Desktop/xxx/%s", name)
            fmt.Println("picPath:", fmt.Sprintf("/xxx/xxx/Desktop/xxx/%s", name))
            fx, fy := robotgo.FindPic(picPath)
            fmt.Println("move to :", fx+10, fy+10)
            robotgo.MoveMouseSmooth(fx+10, fy+10)
            time.Sleep(time.Millisecond * 2000)
            robotgo.MouseClick("left", false)
            robotgo.TypeStr(msg)
            time.Sleep(time.Second)
            robotgo.KeyTap("enter")
            time.Sleep(time.Second)
        }
        */

        // /* Fixed area coordinates, the coordinates of the upper right corner of the screen are 0,0
        arrArea := []map[string]int{
            map[string]int{
                "x" : 190,
                "y" : 200,
            },
            map[string]int{
                "x" : 190,
                "y" : 200+70,
            },
            map[string]int{
                "x" : 190,
                "y" : 200+70+70,
            },
        }
        for _, area := range arrArea {
            robotgo.MoveMouseSmooth(area["x"], area["y"])
            time.Sleep(time.Millisecond * 2000)
            robotgo.MouseClick("left", false)
            robotgo.TypeStr(msg)
            time.Sleep(time.Second)
            robotgo.KeyTap("enter")
            time.Sleep(time.Second)
        }
        // */
    }
    fmt.Println("The mission is complete!") 
}



func Handle (w http.ResponseWriter, r *http.Request) {
    b, err := ioutil.ReadAll(r.Body)
    if err != nil {
        panic(err)
    }

    fmt.Println("req body:", string(b)) 
    postMsg(string(b))
    w.Write([]byte("finished!"))
}

func main () {
    fmt.Println("listen http://127.0.0.1:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe("127.0.0.1:9090", nil)
}

इस सेवा कार्यक्रम का कार्य अनुरोध का इंतजार करना है। अनुरोध प्राप्त करने के बाद, कॉल करेंpostMsgWeChat सॉफ़्टवेयर विंडो खोलने के लिए अनुकरणीय माउस आंदोलन क्लिक और इनपुट संचालन की एक श्रृंखला करने के लिए फ़ंक्शन, पूर्वनिर्धारित क्षेत्र पर क्लिक करें, अनुरोध में जानकारी दर्ज करें, और WeChat समूह में भेजें।

पुष्टि करने और दो परिदृश्यों का परीक्षण करने के लिए वीचैट विंडो पर क्षेत्र पर क्लिक करें। पहला वीचैट समूह का नाम छवि सहेजने के लिए है, छवि तुलना स्क्रीन लोड जबpostMsgइस विधि की पहचान दर बहुत अधिक नहीं है, और कभी कभी यह पहचाना नहीं जा सकता है। तो दूसरे समाधान का उपयोग किया जाता है, जो अधिक विश्वसनीय है। यह क्लिक क्षेत्र को ठीक करने और क्लिक क्षेत्र के निर्देशांक के सेट की योजना बनाने के लिए हैःarrAreaउपरोक्त कोड में चर. निर्देशांक कहाँ है? उत्तरः स्क्रीनशॉट के पिक्सेल निर्देशांक को देखो और T_T मापें.

एफएमजेड प्लेटफार्म रणनीति परीक्षण कार्यक्रमः

function main() {
    var msg = {
        "type" : "msg",
        "robotId" : _G(),
        "msg" : "hello fmz!"
    }
    var n = 0 
    while(true) {
        if(n == 20) {
            var ret = HttpQuery("http://127.0.0.1:9090/data", JSON.stringify(msg))
            Log("Exit")
            break    
        }
        n++
        LogStatus(_D(), "n:", n)
        Sleep(1000)
    }
}

यह रणनीति एक लेनदेन संकेत भेजने का अनुकरण करती है (जब n==20, यह मानते हुए कि लेनदेन संकेत इस समय ट्रिगर किया जाता है, और इसे व्यापार करने के लिए संभव माना जाता है), यह स्थानीय सेवा को अनुरोध भेजता हैhttp://127.0.0.1:9090/data.

परीक्षण

एफएमजेड रोबोट ऑपरेशन (डॉकर स्थानीय रूप से भी चलता है):

img

img

वीचैट विंडो

img

पुश संदेश हैः

{"type":"msg","robotId":130350,"msg":"hello fmz!"}

यह योजना केवल शुरुआत के लिए है, और यदि आपके पास बेहतर योजना है, तो आप इस पर चर्चा करने के लिए स्वागत करते हैं।


संबंधित

अधिक