56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package google
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
func (t *Translator) TranslateV1(source, sourceLang, targetLang string) (string, error) {
|
|
var text []string
|
|
var result []interface{}
|
|
|
|
encodedSource := encodeURI(source)
|
|
uri := "https://translate.googleapis.com/translate_a/single?client=gtx&sl=" +
|
|
sourceLang + "&tl=" + targetLang + "&dt=t&q=" + encodedSource
|
|
|
|
r, err := http.Get(uri)
|
|
if err != nil {
|
|
return "err", errors.New("error getting translate.googleapis.com")
|
|
}
|
|
defer r.Body.Close()
|
|
|
|
body, err := io.ReadAll(r.Body)
|
|
if err != nil {
|
|
return "err", errors.New("error reading response body")
|
|
}
|
|
|
|
bReq := strings.Contains(string(body), `<title>Error 400 (Bad Request)`)
|
|
if bReq {
|
|
return "err", errors.New("error 400 (Bad Request)")
|
|
}
|
|
|
|
err = json.Unmarshal(body, &result)
|
|
if err != nil {
|
|
return "err", errors.New("error unmarshalling data")
|
|
}
|
|
|
|
if len(result) > 0 {
|
|
inner := result[0]
|
|
for _, slice := range inner.([]interface{}) {
|
|
for _, translatedText := range slice.([]interface{}) {
|
|
text = append(text, fmt.Sprintf("%v", translatedText))
|
|
break
|
|
}
|
|
}
|
|
cText := strings.Join(text, "")
|
|
|
|
return cText, nil
|
|
} else {
|
|
return "err", errors.New("no translated data in response")
|
|
}
|
|
}
|