Skip to content

Commit 48bbdfc

Browse files
author
UlinoyaPed
committed
添加demo,对normal.go和detect.go做了较大修改(主要是json解析部分)
1 parent f3080cb commit 48bbdfc

File tree

12 files changed

+539
-39
lines changed

12 files changed

+539
-39
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ releases/*
2626
#other
2727
*.log
2828
*.bk
29+
!*.off

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# golang的百度在线翻译库
22

3-
该库用于调用百度翻译API,实现翻译效果。使用前,需要注册 [百度翻译开放平台信息](http://api.fanyi.baidu.com/api/trans/product/index)
3+
该库用于调用百度翻译API实现翻译效果。使用前需要注册 [百度翻译开放平台信息](http://api.fanyi.baidu.com/api/trans/product/index)
44

55
## 安装
66

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

1111
## 使用
@@ -18,7 +18,7 @@ package main
1818
import (
1919
"fmt"
2020

21-
"github.com/UlinoyaPed/BaiduTranslate"
21+
"github.com/ulinoyaped/BaiduTranslate"
2222
)
2323

2424
func main() {
@@ -72,7 +72,7 @@ package main
7272
import (
7373
"fmt"
7474

75-
"github.com/UlinoyaPed/BaiduTranslate"
75+
"github.com/ulinoyaped/BaiduTranslate"
7676
)
7777

7878
func main() {

base.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package BaiduTranslate
22

33
import (
4+
"bufio"
45
"math/rand"
6+
"os"
57
"time"
68
)
79

@@ -23,3 +25,10 @@ func Salt(l int) string {
2325
}
2426
return string(result)
2527
}
28+
29+
// 输入工具,可直接输入整行,不必为fmt.Scan的空格分词所困扰
30+
func Input() string {
31+
reader := bufio.NewReader(os.Stdin)
32+
s, _ := reader.ReadString('\n')
33+
return s
34+
}
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"fmt"
6+
"io"
7+
"log"
8+
"os"
9+
"path"
10+
"strings"
11+
"time"
12+
13+
"translate/BaiduTranslate"
14+
15+
"github.com/dablelv/go-huge-util/file"
16+
)
17+
18+
func init() {
19+
now := time.Now()
20+
file := "./" + now.Format("2006-01-02") + ".log" // 使用2006年1月2号15点04分
21+
logFile, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0755)
22+
if err != nil {
23+
log.Println(err.Error())
24+
}
25+
log.SetOutput(logFile) // 将文件设置为log输出的文件
26+
log.SetPrefix("[Translate]")
27+
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
46+
}
47+
48+
func main() {
49+
s := `如果您第一次使用,请在本目录下创建profile.txt,并填入您的AppID和SecretKey
50+
一行一个,不加前后缀!
51+
请填入正确的AppID和SecretKey,否则输出为空!
52+
例:
53+
20220517XXXX1XXXX
54+
jXXEOXyXXXfXXXXXsXXX
55+
`
56+
fmt.Println(s)
57+
58+
deploy, err := os.OpenFile("profile.txt", os.O_RDONLY|os.O_CREATE, 0755)
59+
if err != nil {
60+
log.Println(err.Error())
61+
}
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)
68+
btr := BaiduTranslate.BaiduInfo{AppID: appID, SecretKey: secretKey}
69+
70+
in, err := os.OpenFile("input.txt", os.O_RDONLY|os.O_CREATE, 0755)
71+
if err != nil {
72+
log.Println(err.Error())
73+
}
74+
// 创建 Reader
75+
r := bufio.NewReader(in)
76+
77+
file, err := os.OpenFile("output.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755)
78+
if err != nil {
79+
fmt.Println(err.Error())
80+
}
81+
defer file.Close()
82+
writer := bufio.NewWriter(file)
83+
84+
i := 0
85+
n := 0
86+
from := "en"
87+
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+
97+
if line == "" {
98+
log.Printf("第%d行是空行", i)
99+
fmt.Println()
100+
101+
_, err = writer.WriteString("\n")
102+
if err != nil {
103+
log.Println(err.Error())
104+
}
105+
106+
} else {
107+
if n != 1 {
108+
lang := btr.Detect(line)
109+
if lang.Err() != nil {
110+
log.Println(lang.Err().Error())
111+
} else {
112+
fmt.Printf("语言:%s\n", lang.Lang)
113+
if lang.Lang == to {
114+
from, to = to, from
115+
}
116+
from = lang.Lang
117+
n++
118+
}
119+
}
120+
121+
result := btr.NormalTr(line, from, to)
122+
if result.Err() != nil {
123+
log.Printf("第%d行出现错误,错误:%s", i, result.Err().Error())
124+
_, err = writer.WriteString("\n")
125+
} else {
126+
fmt.Printf("%s\n", result.Dst)
127+
log.Printf("第%d行翻译完成!", i)
128+
129+
_, err = writer.WriteString(result.Dst + "\n")
130+
if err != nil {
131+
log.Println(err.Error())
132+
}
133+
}
134+
135+
}
136+
137+
if ierr == io.EOF {
138+
break
139+
}
140+
141+
}
142+
143+
fmt.Println("---翻译已完成,按回车键退出---")
144+
log.Println("---翻译已完成---")
145+
146+
writer.Flush()
147+
BaiduTranslate.Input()
148+
return
149+
}

demos/FileTranslate/input.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
文化大革命如火如荼进行的同时,军方探寻外星文明的绝秘计划“红岸工程”取得了突破性进展。但在按下发射键的那一刻,历经劫难的叶文洁没有意识到,她彻底改变了人类的命运。地球文明向宇宙发出的第一声啼鸣,以太阳为中心,以光速向宇宙深处飞驰……四光年外,“三体文明”正苦苦挣扎——三颗无规则运行的太阳主导下的百余次毁灭与重生逼迫他们逃离母星。而恰在此时,他们接收到了地球发来的信息。在运用超技术锁死地球人的基础科学之后,三体人庞大的宇宙舰队开始向地球进发……人类的末日悄然来临。

demos/FileTranslate/profile.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
20220517XXXX1XXXX
2+
jXXEOXyXXXfXXlXXsXXX
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"fmt"
6+
"os"
7+
"strings"
8+
9+
"translate/BaiduTranslate"
10+
)
11+
12+
func main() {
13+
14+
s := `如果您第一次使用,请在本目录下创建profile.txt,并填入您的AppID和SecretKey
15+
一行一个,不加前后缀!
16+
请填入正确的AppID和SecretKey,否则输出为空!
17+
例:
18+
20220517XXXX1XXXX
19+
jXXEOXyXXXfXXlXXsXXX
20+
21+
CTRL+C退出
22+
`
23+
fmt.Println(s)
24+
25+
deploy, err := os.OpenFile("profile.txt", os.O_RDONLY|os.O_CREATE, 0755)
26+
if err != nil {
27+
fmt.Println(err.Error())
28+
}
29+
30+
d := bufio.NewReader(deploy)
31+
appID, _ := d.ReadString('\n')
32+
appID = strings.TrimSpace(appID)
33+
secretKey, _ := d.ReadString('\n')
34+
secretKey = strings.TrimSpace(secretKey)
35+
btr := BaiduTranslate.BaiduInfo{AppID: appID, SecretKey: secretKey}
36+
37+
for {
38+
fmt.Printf(">")
39+
q := BaiduTranslate.Input() // 从标准输入读取整行,请不要用fmt的Scanner
40+
to := "zh"
41+
lang := btr.Detect(q).Lang
42+
if lang == to {
43+
to = "en"
44+
}
45+
a1 := btr.NormalTr(q, "auto", to)
46+
if a1.Err() != nil {
47+
fmt.Println(a1.Err().Error())
48+
} else {
49+
fmt.Println(a1.Dst)
50+
}
51+
}
52+
53+
}

demos/NormalTranslate/profile.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
20220517XXXX1XXXX
2+
jXXEOXyXXXfXXlXXsXXX

detect.go

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,23 @@ package BaiduTranslate
33
import (
44
"crypto/md5"
55
"encoding/hex"
6-
"encoding/json"
76
"errors"
87
"io/ioutil"
98
"log"
109
"net/http"
1110
"net/url"
11+
12+
"github.com/tidwall/gjson"
1213
)
1314

14-
func (BaiduInfo *BaiduInfo) Detect(Text string) (string, error) {
15+
type DetectResult struct {
16+
Lang string
1517

16-
type DetectResult struct {
17-
Data struct {
18-
Src string `json:"src"`
19-
} `json:"data"`
20-
ErrorCode string `json:"error_code"`
21-
ErrorMsg string `json:"error_msg"`
22-
}
18+
errCode string
19+
errMsg string
20+
}
21+
22+
func (BaiduInfo *BaiduInfo) Detect(Text string) DetectResult {
2323

2424
//合并字符串,计算sign
2525
salt := Salt(10)
@@ -36,16 +36,37 @@ func (BaiduInfo *BaiduInfo) Detect(Text string) (string, error) {
3636
if err != nil {
3737
log.Println("HTTP GET出现错误!")
3838
}
39+
3940
defer resp.Body.Close()
4041
body, err := ioutil.ReadAll(resp.Body)
4142

42-
var ts DetectResult
43-
_ = json.Unmarshal(body, &ts)
43+
// json解析
44+
bodyJson := string(body)
45+
var res DetectResult
46+
res.errCode = gjson.Get(bodyJson, "error_code").String()
47+
res.errMsg = gjson.Get(bodyJson, "error_msg").String()
48+
if res.errCode == "0" {
49+
res.Lang = gjson.Get(bodyJson, "data.src").String()
50+
}
4451

45-
if ts.ErrorCode != "" {
46-
err := errors.New("错误码:" + ts.ErrorCode + ",错误信息:" + ts.ErrorMsg)
47-
return "", err
52+
return res
53+
54+
}
55+
56+
func (j DetectResult) Err() error {
57+
if j.errCode != "0" {
58+
err := errors.New("语种识别错误,错误码:" + j.errCode + ",错误信息:" + j.errMsg)
59+
return err
4860
} else {
49-
return ts.Data.Src, nil
61+
return nil
5062
}
5163
}
64+
65+
/*
66+
if errorCode != "0" {
67+
err := errors.New("错误码:" + errorCode + ",错误信息:" + errorMsg)
68+
return "", err
69+
} else {
70+
return result, nil
71+
}
72+
*/

0 commit comments

Comments
 (0)