Improved code

git-svn-id: file:///srv/svn/repo/mai/trunk@20 e410bdd4-646f-c54f-a7ce-fffcc4f439ae
This commit is contained in:
manerakai
2023-08-31 08:28:02 +00:00
parent a550111b23
commit 4b95465cbe
7 changed files with 51 additions and 31 deletions

View File

@@ -12,13 +12,14 @@ type Engine interface {
TargetLanguages() (Language, error)
Translate(text string, from, to string) (TranslationResult, error)
DetectLanguage(text string) (string, error)
Tts(text, lang string) (string, error)
}
type Language map[string]string
var Engines = map[string]Engine{
"google": &GoogleTranslate{},
"icibia": &ICIBA{},
"libre": &LibreTranslate{},
"google": &GoogleTranslate{},
// "icibia": &ICIBA{},
// "libre": &LibreTranslate{},
"reverseo": &Reverso{},
}

View File

@@ -35,7 +35,6 @@ func (_ *GoogleTranslate) getLangs(type_ string) (Language, error) {
requestURL.RawQuery = query.Encode()
response, err := http.Get(requestURL.String())
if err != nil {
return nil, err
}
@@ -43,35 +42,27 @@ func (_ *GoogleTranslate) getLangs(type_ string) (Language, error) {
defer response.Body.Close()
doc, err := goquery.NewDocumentFromReader(response.Body)
if err != nil {
return nil, err
}
var langs Language
var langs Language = make(Language)
doc.Find(".language-item").Each(func(_ int, s *goquery.Selection) {
a := s.Find("a").First()
href, exists := a.Attr("href")
// Shouldn't happen, but here goes.
if !exists {
return
}
langURL, err := url.Parse(href)
if err != nil {
return
}
langCode := langURL.Query()[langsType][0]
if langCode == "auto" {
return
}
langs[langCode] = a.Text()
})
@@ -86,6 +77,18 @@ func (e *GoogleTranslate) TargetLanguages() (Language, error) {
return e.getLangs("target")
}
func (e *GoogleTranslate) Tts(text, lang string) (string, error) {
requestURL, _ := url.Parse("https://translate.google.com/translate_tts")
query := url.Values{}
query.Add("tl", lang)
query.Add("q", text)
query.Add("client", "tw-ob")
requestURL.RawQuery = query.Encode()
return requestURL.String(), nil
}
func (_ *GoogleTranslate) DetectLanguage(text string) (string, error) { return "", nil }
func (_ *GoogleTranslate) Translate(text string, from, to string) (TranslationResult, error) {

View File

@@ -225,12 +225,7 @@ type icibaTranslateResponse struct {
}
func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, error) {
requestURL, err := url.Parse("https://ifanyi.iciba.com/index.php")
if err != nil {
// The URL is constant, so it should never fail.
panic(err)
}
requestURL, _ := url.Parse("https://ifanyi.iciba.com/index.php")
query := url.Values{}
query.Add("c", "trans")
@@ -239,7 +234,6 @@ func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, erro
query.Add("auth_user", "key_web_fanyi")
sum := md5.Sum([]byte(("6key_web_fanyiifanyiweb8hc9s98e" + text)))
query.Add("sign", hex.EncodeToString(sum[:])[:16])
requestURL.RawQuery = query.Encode()
@@ -250,7 +244,6 @@ func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, erro
formData.Add("q", text)
response, err := http.PostForm(requestURL.String(), formData)
if err != nil {
return TranslationResult{}, err
}
@@ -286,3 +279,5 @@ func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, erro
TranslatedText: responseJSON.Content.Out,
}, nil
}
func (_ *ICIBA) Tts(text, lang string) (string, error) { return "", nil }

View File

@@ -63,6 +63,8 @@ func (e *LibreTranslate) SourceLanguages() (Language, error) { return e.getLangs
func (e *LibreTranslate) TargetLanguages() (Language, error) { return e.getLangs() }
func (e *LibreTranslate) Tts(text, lang string) (string, error) { return "", nil }
type libreDetectResponse []struct {
Confidence float64 `json:"confidence"`
LanguageCode string `json:"language"`

View File

@@ -46,6 +46,8 @@ func (_ *Reverso) SourceLanguages() (Language, error) { return reversoLangs, nil
func (_ *Reverso) TargetLanguages() (Language, error) { return reversoLangs, nil }
func (_ *Reverso) Tts(text, lang string) (string, error) { return "", nil }
type reversoAPIResponse struct {
LanguageDetection struct {
DetectedLanguage string `json:"detectedLanguage"`