v/GTT
1
0
mirror of https://github.com/eeeXun/GTT.git synced 2025-05-21 10:00:59 -07:00

add bing pos

This commit is contained in:
eeeXun 2023-04-18 20:47:08 +08:00
parent 462ae6ae74
commit 0d6a3576d6
2 changed files with 85 additions and 0 deletions

View File

@ -19,6 +19,7 @@ import (
const (
setUpURL = "https://www.bing.com/translator"
textURL = "https://www.bing.com/ttranslatev3?IG=%s&IID=%s"
posURL = "https://www.bing.com/tlookupv3?IG=%s&IID=%s"
ttsURL = "https://www.bing.com/tfettts?IG=%s&IID=%s"
ttsSSML = "<speak version='1.0' xml:lang='%[1]s'><voice xml:lang='%[1]s' xml:gender='Female' name='%s'><prosody rate='-20.00%%'>%s</prosody></voice></speak>"
)
@ -121,6 +122,46 @@ func (t *BingTranslate) Translate(message string) (translation, definition, part
translation = fmt.Sprintf("%v",
data[0].(map[string]interface{})["translations"].([]interface{})[0].(map[string]interface{})["text"])
userData = url.Values{
"from": {langCode[t.GetSrcLang()]},
"to": {langCode[t.GetDstLang()]},
"text": {message},
"key": {initData.key},
"token": {initData.token},
}
req, err = http.NewRequest("POST",
fmt.Sprintf(posURL, initData.ig, initData.iid),
strings.NewReader(userData.Encode()),
)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
req.Header.Add("User-Agent", core.UserAgent)
res, err = http.DefaultClient.Do(req)
if err != nil {
return "", "", "", err
}
body, err = ioutil.ReadAll(res.Body)
if err != nil {
return "", "", "", err
}
// Bing will return a list request part of speech success
// Otherwises, it would return map
// Then the following err would not be nil
if err = json.Unmarshal(body, &data); err == nil {
set := make(posSet)
for _, pos := range data[0].(map[string]interface{})["translations"].([]interface{}) {
pos := pos.(map[string]interface{})
var words translationWord
words.target = pos["displayTarget"].(string)
for _, backTranslation := range pos["backTranslations"].([]interface{}) {
backTranslation := backTranslation.(map[string]interface{})
words.add(backTranslation["displayText"].(string))
}
set.add(pos["posTag"].(string), words)
}
partOfSpeech = set.format()
}
return translation, definition, partOfSpeech, nil
}

View File

@ -0,0 +1,44 @@
package bingtranslate
import (
"fmt"
)
type translationWord struct {
target string
backTargets []string
}
func (t *translationWord) add(s string) {
t.backTargets = append(t.backTargets, s)
}
type posSet map[string][]translationWord
func (set posSet) add(tag string, words translationWord) {
if _, ok := set[tag]; !ok {
set[tag] = []translationWord{words}
} else {
set[tag] = append(set[tag], words)
}
}
func (set posSet) format() (s string) {
for tag := range set {
s += fmt.Sprintf("[%s]\n", tag)
for _, words := range set[tag] {
s += fmt.Sprintf("\t%s:", words.target)
firstWord := true
for _, backTarget := range words.backTargets {
if firstWord {
s += fmt.Sprintf(" %s", backTarget)
firstWord = false
} else {
s += fmt.Sprintf(", %s", backTarget)
}
}
s += "\n"
}
}
return s
}