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.
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.postMsg
fungsi 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 apabilapostMsg
Untuk mengesan kawasan klik dan merancang satu set koordinat kawasan klik, iaitu: koordinat yang direkodkan oleh komputer.arrArea
pembolehubah 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
.
Operasi robot FMZ (docker juga berjalan secara tempatan):
Tetingkap WeChat
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.