しかし、僕は初心者なので、なかなか覚えきれていないので、IRC から HTTP のステータスコードをさがすのに便利なツールを用意しました。
go-httpstatusbot です。インストール方法は
go get .
として ./httpstatusbot
と実行して下さい。
package main
import (
"fmt"
irc "github.com/fluffle/goirc/client"
"os"
"regexp"
)
var pattern = regexp.MustCompile(`^\s*(HTTP|http) ([0-9]+)\s*$`)
var httpstatus = map[string]string {
"100": "Continue",
"101": "Switching Protocols",
"102": "Processing",
"200": "OK",
"201": "Created",
"202": "Accepted",
"203": "Non-Authoritative Information",
"204": "No Content",
"205": "Reset Content",
"206": "Partial Content",
"207": "Multi-Status",
"208": "Already Reported",
"300": "Multiple Choices",
"301": "Moved Permanently",
"302": "Found",
"303": "See Other",
"304": "Not Modified",
"305": "Use Proxy",
"307": "Temporary Redirect",
"400": "Bad Request",
"401": "Unauthorized",
"402": "Payment Required",
"403": "Forbidden",
"404": "Not Found",
"405": "Method Not Allowed",
"406": "Not Acceptable",
"407": "Proxy Authentication Required",
"408": "Request Timeout",
"409": "Conflict",
"410": "Gone",
"411": "Length Required",
"412": "Precondition Failed",
"413": "Request Entity Too Large",
"414": "Request-URI Too Large",
"415": "Unsupported Media Type",
"416": "Request Range Not Satisfiable",
"417": "Expectation Failed",
"418": "I'm a teapot",
"422": "Unprocessable Entity",
"423": "Locked",
"424": "Failed Dependency",
"425": "No code",
"426": "Upgrade Required",
"428": "Precondition Required",
"429": "Too Many Requests",
"431": "Request Header Fields Too Large",
"449": "Retry with",
"500": "Internal Server Error",
"501": "Not Implemented",
"502": "Bad Gateway",
"503": "Service Unavailable",
"504": "Gateway Timeout",
"505": "HTTP Version Not Supported",
"506": "Variant Also Negotiates",
"507": "Insufficient Storage",
"509": "Bandwidth Limit Exceeded",
"510": "Not Extended",
"511": "Network Authentication Required",
}
func main() {
c := irc.SimpleClient("httpstatusbot", "httpstatusbot")
c.EnableStateTracking()
c.AddHandler("connected", func(conn *irc.Conn, line *irc.Line) {
for _, room := range os.Args[1:] {
c.Join("#" + room)
}
})
quit := make(chan bool)
c.AddHandler("disconnected", func(conn *irc.Conn, line *irc.Line) {
quit <- true
})
c.AddHandler("privmsg", func(conn *irc.Conn, line *irc.Line) {
if pattern.MatchString(line.Args[1]) {
m := pattern.FindStringSubmatch(line.Args[1])
if status, ok := httpstatus[m[2]]; ok {
c.Notice(line.Args[0], status)
}
}
})
for {
if err := c.Connect("irc.freenode.net:6667"); err != nil {
fmt.Printf("Connection error: %s\n", err)
return
}
<-quit
}
}
使い方は... もういいですね。わかります。
今日の参考資料http://blog.64p.org/entry/2013/02/21/121830
http://mattn.kaoriya.net/software/vim/20130221123856.htm