diff --git a/cmd-google.go b/cmd-google.go index 9dc6aaf..3a6961b 100644 --- a/cmd-google.go +++ b/cmd-google.go @@ -4,13 +4,17 @@ import ( "irc" "fmt" "strings" + "os" "http" - "json" + "net" + "bufio" "io/ioutil" "container/vector" "html" + "json" "regexp" "strconv" + "utf8" ) const googleAPIKey = "ABQIAAAA6-N_jl4ETgtMf2M52JJ_WRQjQjNunkAJHIhTdFoxe8Di7fkkYhRRcys7ZxNbH3MIy_MKKcEO4-9_Ag" @@ -82,6 +86,57 @@ func sayTr(conn *irc.Conn, target string, data interface{}) { } } +func roman(conn *irc.Conn, nick *irc.Nick, args, target string) { + if args == "" { + return + } + + var sourcelang string; + if utf8.NewString(args).IsASCII() { + sourcelang = "en" + } else { + sourcelang = "ja" + } + url := fmt.Sprintf("http://translate.google.com/translate_a/t?client=t&hl=ja&sl=%s&tl=en-U&text=%s", + sourcelang, http.URLEscape(args)) + + // please disregard the reproduction of src/pkg/http/client.go:send below + var request http.Request + var err os.Error + request.URL, err = http.ParseURL(url) + if err != nil { + say(conn, target, "%s: Error while preparing URL", nick.Nick); return + } + request.UserAgent = "Mozilla/5.0" + + httpcon, err := net.Dial("tcp", "", request.URL.Host + ":" + request.URL.Scheme) + if err != nil { + say(conn, target, "%s: Error while opening connection", nick.Nick); return + } + defer httpcon.Close() + err = request.Write(httpcon) + if err != nil { + say(conn, target, "%s: Error while requesting romanization", nick.Nick); return + } + reader := bufio.NewReader(httpcon) + response, err := http.ReadResponse(reader, request.Method) + if err != nil { + say(conn, target, "%s: Error while reading response header", nick.Nick); return + } + + b, err := ioutil.ReadAll(response.Body) + if err != nil { + say(conn, target, "%s: Error while downloading romanization", nick.Nick); return + } + + result := strings.Split(string(b), `"`, 7) + if len(result) < 7 { + say(conn, target, "%s: Error while parsing romanization", nick.Nick); return + } + + say(conn, target, "%s: %s", result[1], result[5]) +} + func calc(conn *irc.Conn, nick *irc.Nick, args, target string) { if args == "" { return diff --git a/handler.go b/handler.go index 6f85f69..0e8e17b 100644 --- a/handler.go +++ b/handler.go @@ -37,6 +37,7 @@ var commands = map [string]func(*irc.Conn, *irc.Nick, string, string) { // google "tr": translate, + "roman": roman, "calc": calc, }