Skip to content

Commit

Permalink
add: add scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
mochi-w650z committed Jun 1, 2021
1 parent a2fc2cf commit bf18597
Show file tree
Hide file tree
Showing 3 changed files with 144 additions and 0 deletions.
5 changes: 5 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module example/m/v2

go 1.16

require github.com/urfave/cli/v2 v2.3.0
13 changes: 13 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -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=
126 changes: 126 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -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)
}
}

0 comments on commit bf18597

Please sign in to comment.