From 8aeade177f9335351969e9f47a746f3b659d998b Mon Sep 17 00:00:00 2001 From: dlyt Date: Mon, 21 May 2018 18:21:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=99=BE=E5=BA=A6=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/model/auto_tag.go | 102 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) diff --git a/src/model/auto_tag.go b/src/model/auto_tag.go index ec353981..e6dd4815 100644 --- a/src/model/auto_tag.go +++ b/src/model/auto_tag.go @@ -7,15 +7,115 @@ package model import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" "strings" + "github.com/axgle/mahonia" "github.com/polaris1119/keyword" + "github.com/polaris1119/nosql" ) +type item struct { + Score float32 + Tag string +} +type resData struct { + Log_id int + Items []item +} + +type resTokenData struct { + Access_token string + Scope string + Session_key string + Refresh_token string + Session_secret string + Expires_in int +} + // AutoTag 自动生成 tag func AutoTag(title, content string, num int) string { defer func() { recover() }() - return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") + key := "baidu_access_token" + client_id := "geogVB0En5UM936L6Llf5EWr" + client_secret := "ec120xF6SItrEU4sjZk5s3av61eWde2X&" + + // 取百度token + redisClient := nosql.NewRedisClient() + defer redisClient.Close() + token := redisClient.GET(key) + if token == "" { + resp, err := http.Get("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + client_id + "client_secret=" + client_secret) + if err != nil { + fmt.Println(err) + return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + fmt.Println(err) + return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") + } + var data resTokenData + err = json.Unmarshal(body, &data) + if err != nil { + fmt.Println(err) + return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") + } + token = data.Access_token + err = redisClient.SET(key, token, data.Expires_in) + if err != nil { + fmt.Println(err) + return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") + } + } + + // 转成GBK + titleGBK := mahonia.NewEncoder("gbk").ConvertString(title) + contentGBK := mahonia.NewEncoder("gbk").ConvertString(content) + post := "{\"title\":\"" + string(titleGBK) + "\",\"content\":\"" + string(contentGBK) + "\"}" + url := "https://aip.baidubce.com/rpc/2.0/nlp/v1/keyword?access_token=" + token + jsonStr := []byte(post) + req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) + req.Header.Set("Content-Type", "application/json") + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") + } + defer resp.Body.Close() + body, _ := ioutil.ReadAll(resp.Body) + // 解析返回值 + var data resData + err = json.Unmarshal(ConvertToByte(string(body), "gbk", "utf8"), &data) + if err != nil { + return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") + } + var words []string + var length int + if len(data.Items) > num { + length = num + } else { + length = len(data.Items) + } + for i := 0; i < length; i++ { + word := data.Items[i].Tag + words = append(words, string(word)) + } + return strings.Join(words, ",") +} + +func ConvertToByte(src string, srcCode string, targetCode string) []byte { + srcCoder := mahonia.NewDecoder(srcCode) + srcResult := srcCoder.ConvertString(src) + tagCoder := mahonia.NewDecoder(targetCode) + _, cdata, _ := tagCoder.Translate([]byte(srcResult), true) + return cdata } From 380cc3af5c4ba447f26dd3ffad4d562c8eb5043f Mon Sep 17 00:00:00 2001 From: dlyt Date: Mon, 21 May 2018 18:45:22 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=9F=BA=E4=BA=8E=E7=99=BE=E5=BA=A6?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=8F=90=E5=8F=96=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/model/auto_tag.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/model/auto_tag.go b/src/model/auto_tag.go index e6dd4815..ad2693dd 100644 --- a/src/model/auto_tag.go +++ b/src/model/auto_tag.go @@ -9,7 +9,6 @@ package model import ( "bytes" "encoding/json" - "fmt" "io/ioutil" "net/http" "strings" @@ -43,8 +42,8 @@ func AutoTag(title, content string, num int) string { recover() }() key := "baidu_access_token" - client_id := "geogVB0En5UM936L6Llf5EWr" - client_secret := "ec120xF6SItrEU4sjZk5s3av61eWde2X&" + client_id := "" + client_secret := "" // 取百度token redisClient := nosql.NewRedisClient() @@ -53,25 +52,21 @@ func AutoTag(title, content string, num int) string { if token == "" { resp, err := http.Get("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + client_id + "client_secret=" + client_secret) if err != nil { - fmt.Println(err) return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { - fmt.Println(err) return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") } var data resTokenData err = json.Unmarshal(body, &data) if err != nil { - fmt.Println(err) return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") } token = data.Access_token err = redisClient.SET(key, token, data.Expires_in) if err != nil { - fmt.Println(err) return strings.Join(keyword.ExtractWithTitle(title, content, num), ",") } } @@ -86,6 +81,7 @@ func AutoTag(title, content string, num int) string { req.Header.Set("Content-Type", "application/json") client := &http.Client{} + // 请求百度接口,提取标签 resp, err := client.Do(req) if err != nil { return strings.Join(keyword.ExtractWithTitle(title, content, num), ",")