Skim pelaksanaan push mesej robot WeChat

Penulis:Kebaikan, Dicipta: 2020-07-24 09:52:33, Dikemas kini: 2023-10-26 20:04:21

img

Kumpulan WeChat adalah tempat awam di mana rakan-rakan yang berpikiran sama berkumpul, dan kumpulan WeChat dalam bulatan perdagangan kuantitatif tidak terkecuali. Baru-baru ini, banyak pengguna FMZ bertanya bagaimana mereka dapat mendorong mesej ke kumpulan WeChat. Sebagai contoh, strategi mereka menghantar isyarat perdagangan, tetapi mereka tidak mahu mengotomatiskan transaksi. Mereka berharap isyarat yang disediakan oleh robot dapat dihantar ke kumpulan WeChat sebagai rujukan.

Oleh sebab ini, saya mungkin melihat antara muka WeChat dan mendapati bahawa akaun rasmi diperlukan, yang tidak begitu mudah. jadi saya memutuskan untuk mengambil pendekatan yang berbeza dan mencuba penyelesaian berikut. kerana kapasiti terhad saya, hanya fungsi yang paling asas dari keperluan ini dapat diselesaikan, dan hanya untuk rujukan.

Pelan Pelaksanaan

Saya memutuskan untuk menggunakan Golang untuk menulis, perlu menggunakan perpustakaan Golanggithub.com/go-vgo/robotgo, pada dasarnya keperluan penyelesaian dicapai oleh perpustakaan ini.

Pertama kita jalankan program perkhidmatan pada komputer kita, kod adalah seperti berikut:

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)
}

Fungsi program perkhidmatan ini adalah untuk menunggu permintaan.postMsgfungsi untuk melakukan satu siri klik pergerakan tetikus yang disimulasikan dan operasi input untuk membuka tetingkap perisian WeChat, klik pada kawasan yang telah ditentukan, masukkan maklumat dalam permintaan, dan hantar Ke kumpulan WeChat.

Klik kawasan di tetingkap WeChat untuk mengesahkan dan menguji dua senario. Yang pertama adalah untuk menyimpan imej nama kumpulan WeChat, memuatkan skrin perbandingan imej apabilapostMsgUntuk mengesan kawasan klik dan merancang satu set koordinat kawasan klik, iaitu: koordinat yang direkodkan oleh komputer.arrAreapembolehubah dalam kod di atas. Di mana koordinat? Jawapan: Lihat koordinat piksel tangkapan skrin dan mengukur T_T.

Program ujian strategi platform FMZ:

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)
    }
}

Strategi ini mensimulasikan menghantar isyarat urus niaga (apabila n==20, dengan mengandaikan bahawa isyarat urus niaga dicetuskan pada masa ini, dan ia dianggap mungkin untuk berdagang), ia menghantar permintaan kepada perkhidmatan tempatan dihttp://127.0.0.1:9090/data.

Ujian

Operasi robot FMZ (docker juga berjalan secara tempatan):

img

img

Tetingkap WeChat

img

Mesej push adalah:

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

Rancangan ini hanya untuk permulaan, dan jika anda mempunyai rancangan yang lebih baik, anda dialu-alukan untuk membincangkannya.


Berkaitan

Lebih lanjut