Skip to content

Commit 54ae2dc

Browse files
committed
对主文件进行大改,同时优化demo
README.md 修正go get链接有误 normal.go 删除无用部分,添加注释,最重要的是请求方法从GET变为POST 2个demos 修正一个问题,添加go.mod解决本地包引用问题 Signed-off-by: UlinoyaPed <ulinoyaped@gmail.com>
1 parent 48bbdfc commit 54ae2dc

File tree

10 files changed

+181
-114
lines changed

10 files changed

+181
-114
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
## 安装
66

77
```bash
8-
go get github.com/UlinoyaPed/BaiduTranslate@v1.1
8+
go get github.com/UlinoyaPed/BaiduTranslate@v1.0.2
99
```
1010

1111
## 使用
@@ -110,7 +110,7 @@ en
110110
错误码:54000,错误信息:PARAM_FROM_TO_OR_Q_EMPTY
111111
```
112112

113-
## 受支持的翻译语言
113+
## 受支持的翻译语言(部分)
114114

115115
**(源语言语种不确定时可设置为 auto,目标语言语种不可设置为 auto)**
116116

demos/FileTranslate/FileTranslate.go

Lines changed: 33 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,29 @@ package main
33
import (
44
"bufio"
55
"fmt"
6-
"io"
6+
"io/ioutil"
77
"log"
88
"os"
9-
"path"
109
"strings"
1110
"time"
1211

13-
"translate/BaiduTranslate"
14-
15-
"github.com/dablelv/go-huge-util/file"
12+
"github.com/UlinoyaPed/BaiduTranslate"
1613
)
1714

1815
func init() {
1916
now := time.Now()
20-
file := "./" + now.Format("2006-01-02") + ".log" // 使用2006年1月2号15点04分
17+
file := "./" + now.Format("2006-01-02") + ".log"
2118
logFile, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0755)
2219
if err != nil {
23-
log.Println(err.Error())
20+
log.Fatal(err)
2421
}
25-
log.SetOutput(logFile) // 将文件设置为log输出的文件
22+
log.SetOutput(logFile)
2623
log.SetPrefix("[Translate]")
2724
log.SetFlags(log.LstdFlags | log.Lshortfile)
28-
29-
return
30-
}
31-
32-
func FindFile(dirname string, format string) ([]string, error) {
33-
names, err := file.GetDirAllEntryPaths(dirname, true)
34-
if err != nil {
35-
log.Println(err.Error())
36-
}
37-
var result []string
38-
ext := ""
39-
for i := 0; i < len(names); i++ {
40-
ext = path.Ext(names[i])
41-
if ext == format {
42-
result[i] = names[i]
43-
}
44-
}
45-
return result, err
4625
}
4726

4827
func main() {
28+
// 打印欢迎消息
4929
s := `如果您第一次使用,请在本目录下创建profile.txt,并填入您的AppID和SecretKey
5030
一行一个,不加前后缀!
5131
请填入正确的AppID和SecretKey,否则输出为空!
@@ -55,59 +35,50 @@ jXXEOXyXXXfXXXXXsXXX
5535
`
5636
fmt.Println(s)
5737

58-
deploy, err := os.OpenFile("profile.txt", os.O_RDONLY|os.O_CREATE, 0755)
38+
// 读取配置文件中的AppID和SecretKey
39+
deployData, err := ioutil.ReadFile("profile.txt")
5940
if err != nil {
60-
log.Println(err.Error())
41+
log.Fatal(err)
6142
}
62-
63-
d := bufio.NewReader(deploy)
64-
appID, _ := d.ReadString('\n')
65-
appID = strings.TrimSpace(appID)
66-
secretKey, _ := d.ReadString('\n')
67-
secretKey = strings.TrimSpace(secretKey)
43+
deployLines := strings.Split(string(deployData), "\n")
44+
appID := strings.TrimSpace(deployLines[0])
45+
secretKey := strings.TrimSpace(deployLines[1])
6846
btr := BaiduTranslate.BaiduInfo{AppID: appID, SecretKey: secretKey}
6947

70-
in, err := os.OpenFile("input.txt", os.O_RDONLY|os.O_CREATE, 0755)
48+
// 读取输入文件内容
49+
inputData, err := ioutil.ReadFile("input.txt")
7150
if err != nil {
72-
log.Println(err.Error())
51+
log.Fatal(err)
7352
}
74-
// 创建 Reader
75-
r := bufio.NewReader(in)
53+
inputLines := strings.Split(string(inputData), "\n")
7654

77-
file, err := os.OpenFile("output.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755)
55+
// 打开输出文件
56+
outputFile, err := os.OpenFile("output.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755)
7857
if err != nil {
79-
fmt.Println(err.Error())
58+
log.Fatal(err)
8059
}
81-
defer file.Close()
82-
writer := bufio.NewWriter(file)
60+
defer outputFile.Close()
61+
62+
writer := bufio.NewWriter(outputFile)
8363

84-
i := 0
8564
n := 0
8665
from := "en"
8766
to := "zh"
88-
for {
89-
line, ierr := r.ReadString('\n')
90-
line = strings.TrimSpace(line) // 去掉字符串首尾空白字符
91-
if ierr != nil && ierr != io.EOF {
92-
log.Println(err.Error())
93-
}
94-
95-
i++
96-
67+
for i, line := range inputLines {
68+
line = strings.TrimSpace(line)
9769
if line == "" {
98-
log.Printf("第%d行是空行", i)
70+
log.Printf("第%d行是空行", i+1)
9971
fmt.Println()
100-
10172
_, err = writer.WriteString("\n")
10273
if err != nil {
103-
log.Println(err.Error())
74+
log.Fatal(err)
10475
}
105-
10676
} else {
10777
if n != 1 {
78+
// 检测语言并切换翻译方向
10879
lang := btr.Detect(line)
10980
if lang.Err() != nil {
110-
log.Println(lang.Err().Error())
81+
log.Printf("第%d行出现错误,错误:%s", i+1, lang.Err().Error())
11182
} else {
11283
fmt.Printf("语言:%s\n", lang.Lang)
11384
if lang.Lang == to {
@@ -118,32 +89,26 @@ jXXEOXyXXXfXXXXXsXXX
11889
}
11990
}
12091

92+
// 进行翻译
12193
result := btr.NormalTr(line, from, to)
12294
if result.Err() != nil {
123-
log.Printf("第%d行出现错误,错误:%s", i, result.Err().Error())
95+
log.Printf("第%d行出现错误,错误:%s", i+1, result.Err().Error())
12496
_, err = writer.WriteString("\n")
12597
} else {
12698
fmt.Printf("%s\n", result.Dst)
127-
log.Printf("第%d行翻译完成!", i)
128-
99+
log.Printf("第%d行翻译完成!", i+1)
129100
_, err = writer.WriteString(result.Dst + "\n")
130101
if err != nil {
131-
log.Println(err.Error())
102+
log.Fatal(err)
132103
}
133104
}
134-
135105
}
136-
137-
if ierr == io.EOF {
138-
break
139-
}
140-
141106
}
142107

143108
fmt.Println("---翻译已完成,按回车键退出---")
144109
log.Println("---翻译已完成---")
145110

111+
// 刷新缓冲区并关闭写入器
146112
writer.Flush()
147113
BaiduTranslate.Input()
148-
return
149114
}

demos/FileTranslate/go.mod

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module FileTranslate
2+
3+
go 1.19
4+
5+
require (
6+
github.com/dablelv/cyan v0.0.54
7+
github.com/tidwall/gjson v1.17.0 // indirect
8+
github.com/tidwall/match v1.1.1 // indirect
9+
github.com/tidwall/pretty v1.2.0 // indirect
10+
)
11+
12+
require github.com/UlinoyaPed/BaiduTranslate v0.0.0
13+
14+
replace github.com/UlinoyaPed/BaiduTranslate => ../../

demos/FileTranslate/go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
github.com/dablelv/cyan v0.0.54 h1:LFMzt0gndYJFbSScw/kGeTvfVZkszds7HJDjKFu69Hk=
2+
github.com/dablelv/cyan v0.0.54/go.mod h1:SyRS9eXKDIXKiTgQ3Qjs97FsMh2mPi9ndPRDkJqSR3g=
3+
github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
4+
github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
5+
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
6+
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
7+
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
8+
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=

demos/NormalTranslate/NormalTranslate.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"os"
77
"strings"
88

9-
"translate/BaiduTranslate"
9+
"github.com/UlinoyaPed/BaiduTranslate"
1010
)
1111

1212
func main() {

demos/NormalTranslate/go.mod

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module NormalTranslate
2+
3+
go 1.19
4+
5+
require (
6+
github.com/tidwall/gjson v1.17.0 // indirect
7+
github.com/tidwall/match v1.1.1 // indirect
8+
github.com/tidwall/pretty v1.2.0 // indirect
9+
)
10+
11+
require github.com/UlinoyaPed/BaiduTranslate v0.0.0
12+
13+
replace github.com/UlinoyaPed/BaiduTranslate => ../../

demos/NormalTranslate/go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
2+
github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
3+
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
4+
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
5+
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
6+
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=

go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module github.com/UlinoyaPed/BaiduTranslate
2+
3+
go 1.19

normal.go

Lines changed: 60 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -4,71 +4,88 @@ import (
44
"crypto/md5"
55
"encoding/hex"
66
"errors"
7+
"fmt"
78
"io/ioutil"
8-
"log"
99
"net/http"
1010
"net/url"
11+
"time"
1112

1213
"github.com/tidwall/gjson"
1314
)
1415

16+
// NormalResult 包含翻译结果和错误信息的结构体
1517
type NormalResult struct {
16-
Dst string
17-
18-
errCode string
19-
errMsg string
18+
Dst string // 翻译结果
19+
ErrCode string // 错误码
20+
ErrMsg string // 错误信息
2021
}
2122

22-
func (BaiduInfo *BaiduInfo) NormalTr(Text string, From string, To string) NormalResult {
23-
24-
//合并字符串,计算sign
23+
// NormalTr 执行普通翻译的方法
24+
func (info *BaiduInfo) NormalTr(text, from, to string) NormalResult {
25+
// 生成随机盐值
2526
salt := Salt(10)
26-
montage := BaiduInfo.AppID + Text + salt + BaiduInfo.SecretKey
27-
ctx := md5.New()
28-
ctx.Write([]byte(montage))
29-
sign := hex.EncodeToString(ctx.Sum(nil))
27+
// 构造待翻译的字符串,并计算签名
28+
sign := generateSign(info.AppID, text, salt, info.SecretKey)
3029

31-
// 传入需要翻译的语句
32-
urlstr := "http://fanyi-api.baidu.com/api/trans/vip/translate?q=" + url.QueryEscape(Text) + "&from=" + From + "&to=" + To + "&appid=" + BaiduInfo.AppID + "&salt=" + salt + "&sign=" + sign
30+
// 构造请求URL
31+
urlStr := "http://fanyi-api.baidu.com/api/trans/vip/translate?q=" + url.QueryEscape(text) + "&from=" + from + "&to=" + to + "&appid=" + info.AppID + "&salt=" + salt + "&sign=" + sign
3332

34-
// 发送GET请求
35-
resp, err := http.Get(urlstr)
33+
// POST请求
34+
method := "POST"
35+
// 5秒超时
36+
timeout := time.Duration(5 * time.Second)
37+
client := &http.Client{
38+
Timeout: timeout,
39+
}
40+
req, err := http.NewRequest(method, urlStr, nil)
3641
if err != nil {
37-
log.Println("HTTP GET出现错误!")
42+
fmt.Println(err)
43+
// return
3844
}
39-
defer resp.Body.Close()
40-
body, err := ioutil.ReadAll(resp.Body)
45+
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
46+
// 发送请求
47+
res, err := client.Do(req)
48+
if err != nil {
49+
fmt.Println(err)
50+
// return
51+
}
52+
defer res.Body.Close()
4153

42-
bodyJson := string(body)
43-
var res NormalResult
44-
res.errCode = gjson.Get(bodyJson, "error_code").String()
45-
res.errMsg = gjson.Get(bodyJson, "error_msg").String()
46-
if res.errCode == "" {
47-
trans := gjson.Get(bodyJson, "trans_result").Array()[0]
48-
res.Dst = trans.Get("dst").String()
54+
// 解析返回数据
55+
body, err := ioutil.ReadAll(res.Body)
56+
if err != nil {
57+
fmt.Println(err)
58+
// return
4959
}
50-
return res
60+
//fmt.Println(string(body))
61+
62+
bodyJSON := string(body)
63+
var resp NormalResult
64+
resp.ErrCode = gjson.Get(bodyJSON, "error_code").String()
65+
resp.ErrMsg = gjson.Get(bodyJSON, "error_msg").String()
66+
if resp.ErrCode == "" {
67+
trans := gjson.Get(bodyJSON, "trans_result").Array()[0]
68+
resp.Dst = trans.Get("dst").String()
69+
}
70+
return resp
5171
}
5272

53-
func (j NormalResult) Err() error {
54-
if j.errCode != "" {
55-
err := errors.New("通用翻译错误,错误码:" + j.errCode + ",错误信息:" + j.errMsg)
73+
// Err 返回翻译错误信息
74+
func (result NormalResult) Err() error {
75+
if result.ErrCode != "" {
76+
err := errors.New("通用翻译错误,错误码:" + result.ErrCode + ",错误信息:" + result.ErrMsg)
5677
return err
5778
} else {
5879
return nil
5980
}
6081
}
6182

62-
/*
63-
// json解析
64-
trans := gjson.Get(string(body), "trans_result").Array()[0]
65-
result := trans.Get("dst").String()
66-
errorCode := gjson.Get(string(body), "error_code").String()
67-
errorMsg := gjson.Get(string(body), "error_msg").String()
68-
if errorCode != "" {
69-
err := errors.New("错误码:" + errorCode + ",错误信息:" + errorMsg)
70-
return "", err
71-
} else {
72-
return result, nil
73-
}
74-
*/
83+
// generateSign 根据给定的参数生成签名
84+
func generateSign(appID, text, salt, secretKey string) string {
85+
// 合并字符串,计算sign
86+
montage := appID + text + salt + secretKey
87+
hash := md5.New()
88+
hash.Write([]byte(montage))
89+
sign := hex.EncodeToString(hash.Sum(nil))
90+
return sign
91+
}

0 commit comments

Comments
 (0)