コマンドラインで翻訳できるツールを作った。(バイナリ配布)
こちらの記事でGlosbeの翻訳APIをしったので、このツールのGo実装を作成してみました。さらに、いろいろな言語に対応できるようにしました。
ソースコードです
package main import ( "encoding/json" "flag" "fmt" "io/ioutil" "net/http" "net/url" "os" "strings" ) // URL of api const URL = "https://glosbe.com/gapi/translate" func makeURL(src, srcLang, destLang string) string { v := url.Values{} v.Add("from", srcLang) v.Add("dest", destLang) v.Add("format", "json") v.Add("phrase", src) return URL + "?" + v.Encode() } // Send request. func request(url string) (result string, err error) { resp, err := http.Get(url) if err != nil { return } defer resp.Body.Close() b, err := ioutil.ReadAll(resp.Body) if err != nil { return } var response Response err = json.Unmarshal(b, &response) if err != nil { return } res := make([]string, len(response.Tuc)) count := 0 for i, v := range response.Tuc { if v.Phrase.Text != "" { res[i] = v.Phrase.Text count = i } } result = strings.Join(res[:count+1], ",") return } func main() { // Setting help message. flag.Usage = func() { fmt.Fprintf(os.Stderr, `dict [OPTIONS] <src> Options `) flag.PrintDefaults() } // If this option is exist, translate to Japanese from English. from := flag.String("f", "", "From") to := flag.String("t", "", "To") flag.Parse() args := flag.Args() if *to == "" || *from == "" || args == nil || len(args) != 1 { flag.Usage() os.Exit(1) } result, err := request(makeURL(args[0], *from, *to)) if err != nil { fmt.Println("Not found.") } else { fmt.Println(result) } } // Response object. type Response struct { Result string `json:"result"` Tuc []Tuc `json:"tuc"` Phrase string `json:"phrase"` From string `json:"from"` Dest string `json:"dest"` } // Tuc object. type Tuc struct { Phrase Phrase `json:"phrase"` Meanings []Meaning `json:"meanings"` MeaningID int64 `json:"meaningId"` Authors []int64 `json:"authors"` } // Phrase object. type Phrase struct { Text string `json:"text"` Language string `json:"language"` } // Meaning object. type Meaning struct { Language string `json:"language"` Text string `json:"text"` }
使い方はGithubにも書いてありますが。例えば
$ dict -f en -t ja cat $ 猫,ネコ,ねこ,にゃあにゃあ,neko,にゃにゃ,にゃんにゃん,ぬこ,カト,キャット
みたいな感じで実行します。
マークダウンとか英語で書いてる時この日本語英語でなんて言うんだろうって時にさっと検索できるのでいいと思います。
うえで上げたブログにかかれているようにaliasを好きな(自然)言語で設定するといいです。
バイナリも配布しているのでGoの環境を作らなくてもお気軽に試すことができるのでぜひ導入してみてください。
バイナリダウンロードリンク
良いお年を〜