From 90e31046b45507b004c2a3f11138c46352ca9fd0 Mon Sep 17 00:00:00 2001 From: m27149 <1478026873@qq.com> Date: Mon, 28 Oct 2024 13:58:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E4=B8=AA=E6=8E=A8=E9=80=81=E6=AF=8F?= =?UTF-8?q?=E6=97=A5=E9=B8=A1=E6=B1=A4=E7=9A=84=E5=91=BD=E4=BB=A4=E8=A1=8C?= =?UTF-8?q?=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md" | 7 ++ .../aiciba/aiciba.go" | 67 +++++++++++++++ .../go.mod" | 3 + .../main.go" | 35 ++++++++ .../qywx/qiyeweixin.go" | 84 +++++++++++++++++++ 5 files changed, 196 insertions(+) create mode 100644 "\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/README.md" create mode 100644 "\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/aiciba/aiciba.go" create mode 100644 "\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/go.mod" create mode 100644 "\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/main.go" create mode 100644 "\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/qywx/qiyeweixin.go" diff --git "a/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/README.md" "b/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/README.md" new file mode 100644 index 0000000..c909196 --- /dev/null +++ "b/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/README.md" @@ -0,0 +1,7 @@ +# QywxDailyTips +获取"词霸每日一句" https://open.iciba.com/dsapi/中的文本,生成消息发送到企业微信。 + +注意:需要提前创建推送应用并取到corpid和corpsecret。 + +## 命令行使用帮助 +Usage: dailytips -i corpid -s corpsecret diff --git "a/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/aiciba/aiciba.go" "b/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/aiciba/aiciba.go" new file mode 100644 index 0000000..5663f9e --- /dev/null +++ "b/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/aiciba/aiciba.go" @@ -0,0 +1,67 @@ +package aiciba + +import ( + "encoding/json" + "fmt" + "io" + "net/http" +) + +//只要是可导出成员(变量首字母大写),都可以转成json。因成员变量sid是不可导出的,故无法转成json。 +//json标签 +type dailySentence struct { + sid string + TTS string `json:"tts"` + Content string `json:"content"` + Note string `json:"note"` + love string + translation string + Picture string `json:"picture"` + picture2 string + caption string + dateline string + s_pv string + sp_pv string + fenxiang_img string + picture3 string + picture4 string + tags []interface{} +} + +//GetDailySentence ... +func GetDailySentence() (tts, content, note, picture string, err error) { + ds := dailySentence{} + // fmt.Println(ds) + response, err := http.Get("http://open.iciba.com/dsapi/") + if err != nil { + fmt.Println(err) + return + } + // fmt.Println(response.StatusCode) + // fmt.Println(response.Proto) + contentbyte := make([]byte, 0) + tmp := make([]byte, 100) + for { + n, err := response.Body.Read(tmp) + contentbyte = append(contentbyte, tmp[:n]...) + if err == io.EOF { + break + } + } + ok := json.Valid(contentbyte) + if ok { + // fmt.Println(string(contentbyte)) + //fmt.Println("--------------------------------------") + } + + err = json.Unmarshal(contentbyte, &ds) + if err != nil { + panic(err) + } + // fmt.Println(ds) + // fmt.Println(string(ds.TTS)) + // fmt.Println(string(ds.Content)) + // fmt.Println(string(ds.Note)) + // fmt.Println(string(ds.Picture)) + return string(ds.TTS), string(ds.Content), string(ds.Note), string(ds.Picture), err +} diff --git "a/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/go.mod" "b/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/go.mod" new file mode 100644 index 0000000..f574aac --- /dev/null +++ "b/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/go.mod" @@ -0,0 +1,3 @@ +module dailytips + +go 1.14 diff --git "a/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/main.go" "b/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/main.go" new file mode 100644 index 0000000..512fbbf --- /dev/null +++ "b/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/main.go" @@ -0,0 +1,35 @@ +package main + +import ( + "dailytips/aiciba" + "dailytips/qywx" + "flag" + "fmt" +) + +func main() { + var corpid, corpsecret string + flag.StringVar(&corpid, "i", "", "corpid") + flag.StringVar(&corpsecret, "s", "", "corpsecret") + flag.Parse() + + flag.Usage = func() { + fmt.Println(` +Usage: dailytips -i corpid -s corpsecret +Options:`) + flag.PrintDefaults() + } + if corpid == "" || corpsecret == "" { + flag.Usage() + return + } + _, content, note, _, _ := aiciba.GetDailySentence() + // fmt.Println(tts) + // fmt.Println(content) + // fmt.Println(note) + // fmt.Println(picture) + + tocken := qywx.GetAccessToken(corpid, corpsecret) + dailytip := content + "\n" + note + qywx.SendTextMsg(tocken, dailytip) +} diff --git "a/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/qywx/qiyeweixin.go" "b/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/qywx/qiyeweixin.go" new file mode 100644 index 0000000..31c1e16 --- /dev/null +++ "b/\360\237\215\262\346\257\217\346\227\245\351\270\241\346\261\244\351\231\220\351\207\217\346\216\250\351\200\201/qywx/qiyeweixin.go" @@ -0,0 +1,84 @@ +package qywx + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +type accessTokenResp struct { + errcode int + errmsg string + AccessToken string `json:"access_token"` + expires_in int +} + +//GetAccessToken ... +func GetAccessToken(id, sec string) string { + addr := "https://qyapi.weixin.qq.com/cgi-bin/gettoken" + params := url.Values{} + params.Add("corpid", id) + params.Add("corpsecret", sec) + + // fmt.Println(params.Encode()) + + resp, err := http.Get(fmt.Sprintf("%s?%s", addr, params.Encode())) + if err != nil { + panic(err) + } + tmpATR := accessTokenResp{} + tmpByte := make([]byte, 512) + n, err := resp.Body.Read(tmpByte) + if err != nil { + panic(err) + } + err = json.Unmarshal(tmpByte[:n], &tmpATR) + if err != nil { + panic(err) + } + // fmt.Println(tmpATR.AccessToken) + return tmpATR.AccessToken +} + +type texts struct { + Content string `json:"content"` //最长不超过2048个字节,超过将截断 +} + +type textMsg struct { + Totag string `json:"totag"` + Msgtype string `json:"msgtype"` //文本"text" + Agentid int `json:"agentid"` + Text texts `json:"text"` //最长不超过2048个字节,超过将截断 +} + +//SendTextMsg ... +func SendTextMsg(token, dailytip string) error { + addr := "https://qyapi.weixin.qq.com/cgi-bin/message/send" + params := url.Values{} + params.Add("access_token", token) + // fmt.Printf("%s?%s\n", addr, params.Encode()) + + tmpMsg := textMsg{ + Totag: "1", + Msgtype: "text", + Agentid: 1000002, + Text: texts{ + Content: dailytip, + }, + } + jsonMsgByte, err := json.Marshal(tmpMsg) + if err != nil { + fmt.Println(err) + } + fmt.Println(string(jsonMsgByte)) + reader := bytes.NewReader(jsonMsgByte) + resp, err := http.Post(fmt.Sprintf("%s?%s", addr, params.Encode()), "application/json", reader) + if err != nil { + fmt.Println(err) + } + defer resp.Body.Close() + fmt.Println("返回值:", resp.StatusCode) + return err +} -- Gitee