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 0000000000000000000000000000000000000000..c9091966812a38248c82f2efee7e6af358f4620f --- /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 0000000000000000000000000000000000000000..5663f9ec72d98f79af39d41dc8e8ab7610307732 --- /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 0000000000000000000000000000000000000000..f574aacb765169945c8dfc57451a9eff01955479 --- /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 0000000000000000000000000000000000000000..512fbbf06bc0f8fcdefc462f4cec3a9a892946d7 --- /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 0000000000000000000000000000000000000000..31c1e161933f2df3a5e28c5dd974e221f69cd058 --- /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 +}