Robot WeChat pesan push implementasi skema

Penulis:Kebaikan, Dibuat: 2020-07-24 09:52:33, Diperbarui: 2023-10-26 20:04:21

img

Grup WeChat adalah tempat umum di mana teman-teman yang berpikiran sama berkumpul, dan grup WeChat dalam lingkaran perdagangan kuantitatif tidak terkecuali.

Untuk alasan ini, saya mungkin melihat antarmuka WeChat dan menemukan bahwa akun resmi diperlukan, yang tidak sangat nyaman. Jadi saya memutuskan untuk mengambil pendekatan yang berbeda dan mencoba solusi berikut. Karena kapasitas terbatas saya, hanya fungsi paling dasar dari persyaratan ini yang dapat diselesaikan, dan itu hanya untuk referensi.

Rencana pelaksanaan

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

Pertama kita menjalankan program layanan di komputer kita, kode adalah sebagai 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 dari program layanan ini adalah untuk menunggu permintaan.postMsgfungsi untuk melakukan serangkaian klik gerakan mouse simulasi dan operasi input untuk membuka jendela perangkat lunak WeChat, klik pada area yang telah ditentukan sebelumnya, masukkan informasi dalam permintaan, dan kirim ke grup WeChat.

Klik area pada jendela WeChat untuk mengkonfirmasi dan menguji dua skenario. yang pertama adalah untuk menyimpan gambar nama kelompok WeChat, memuat layar perbandingan gambar ketikapostMsgmetode ini tidak sangat tinggi, dan kadang-kadang tidak dapat dikenali. Jadi solusi kedua digunakan, yang lebih dapat diandalkan. Ini untuk memperbaiki area klik dan merencanakan satu set koordinat dari area klik, yaitu: koordinat yang dicatat oleharrAreavariabel dalam kode di atas. Di mana koordinatnya? Jawaban: Lihat koordinat piksel dari tangkapan layar dan ukur T_T.

Program uji 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 pengiriman sinyal transaksi (ketika n==20, dengan asumsi bahwa sinyal transaksi dipicu pada saat ini, dan dianggap mungkin untuk berdagang), ia mengirim permintaan ke layanan lokal dihttp://127.0.0.1:9090/data.

Tes

Operasi robot FMZ (docker juga berjalan secara lokal):

img

img

Jendela WeChat

img

Pesan push adalah:

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

Rencana ini hanya untuk memulai, dan jika Anda memiliki rencana yang lebih baik, Anda dipersilakan untuk mendiskusikannya.


Berkaitan

Lebih banyak