From bf185979bdc88da53c547afc053d025a889f0b63 Mon Sep 17 00:00:00 2001 From: mochi-w650z Date: Wed, 2 Jun 2021 01:13:56 +0900 Subject: [PATCH] add: add scripts --- go.mod | 5 +++ go.sum | 13 ++++++ main.go | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..58e2df7 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module example/m/v2 + +go 1.16 + +require github.com/urfave/cli/v2 v2.3.0 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..f8207d7 --- /dev/null +++ b/go.sum @@ -0,0 +1,13 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/main.go b/main.go new file mode 100644 index 0000000..09caa49 --- /dev/null +++ b/main.go @@ -0,0 +1,126 @@ +package main + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "log" + "net/http" + "net/url" + "os" + + "github.com/urfave/cli/v2" +) + +type Setting struct { + AuthKey string + SourceLang string `json:"source_lang"` + TargetLang string `json:"target_lang"` +} + +type Response struct { + Translations []Translation +} + +type Translation struct { + DetectedSourceLaguage string `json:"detected_source_language"` + Text string `json:"text"` +} + +func LoadSettings() (Setting, error) { + var setting Setting + bytes, err := ioutil.ReadFile(os.Getenv("HOME") + "/.config/deepl-translation/setting.json") + if err != nil { + return setting, err + } + if err := json.Unmarshal(bytes, &setting); err != nil { + return setting, err + } + setting.AuthKey = os.Getenv("DEEPL_TOKEN") + if setting.AuthKey == "" { + return setting, fmt.Errorf("No deepl token is set.") + } + + return setting, nil +} + +func Translate(Text string, setting Setting) ([]string, error) { + params := url.Values{} + params.Add("auth_key", setting.AuthKey) + params.Add("source_lang", setting.SourceLang) + params.Add("target_lang", setting.TargetLang) + params.Add("text", Text) + baseUrl := "https://api-free.deepl.com/v2/translate" + resp, err := http.PostForm(baseUrl, params) + + results := []string{} + if err != nil { + return results, err + } + + translateResponse, err := ParseResponse(resp) + if err != nil { + return []string{}, err + } + for _, translated := range translateResponse.Translations { + results = append(results, translated.Text) + } + + return results, err + +} + +func ParseResponse(resp *http.Response) (Response, error) { + var responseJson Response + body, err := ioutil.ReadAll(resp.Body) + + if err != nil { + return responseJson, err + } + err = json.Unmarshal(body, &responseJson) + return responseJson, err +} + +func main() { + app := &cli.App{ + Name: "deepl", + Usage: "Translate sentences.", + UsageText: "deepl inputfile | --stdin ", + + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: "stdin", + Usage: "use stdin.", + }, + }, + Action: func(c *cli.Context) error { + setting, err := LoadSettings() + if err != nil { + return err + } + if c.NArg() < 1 && !c.Bool("stdin") { + return fmt.Errorf("the filename or --stdin option is needed.") + } + f, err := os.Open(c.Args().First()) + if err != nil { + return err + } + b, err := ioutil.ReadAll(f) + if err != nil { + return err + } + translateds, err := Translate(string(b), setting) + if err != nil { + return err + } + for _, translated := range translateds { + fmt.Print(translated) + } + return nil + }, + } + err := app.Run(os.Args) + if err != nil { + log.Fatal(err) + } +}