Improved code
git-svn-id: file:///srv/svn/repo/mai/trunk@20 e410bdd4-646f-c54f-a7ce-fffcc4f439ae
This commit is contained in:
@@ -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{},
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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"`
|
||||
|
||||
@@ -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"`
|
||||
|
||||
Reference in New Issue
Block a user