golang IP地址归属地查询(walk界面库)

来源:互联网 发布:淘宝金酷娃玩具消防车 编辑:程序博客网 时间:2024/05/16 08:03
package mainimport ("encoding/json""fmt""io/ioutil""log""net""net/http")import ("github.com/lxn/walk". "github.com/lxn/walk/declarative")type MyWindow struct {*walk.MainWindowip      *walk.LineEditcountry *walk.LineEditarea    *walk.LineEditregion  *walk.LineEditcity    *walk.LineEditisp     *walk.LineEditquery *walk.PushButton}type IPInfo struct {Code int `json:"code"`Data IP  `json:"data`}type IP struct {Country string `json:"country"`Area    string `json:"area"`Region  string `json:"region"`City    string `json:"city"`Isp     string `json:"isp"`}func main() {mw := new(MyWindow)if err := (MainWindow{AssignTo: &mw.MainWindow,Title:    "IP查询",MinSize:  Size{350, 300},Layout:   VBox{},Children: []Widget{Composite{MaxSize: Size{0, 50},Layout:  HBox{},Children: []Widget{Label{Text: "IP: "},LineEdit{AssignTo: &mw.ip},PushButton{AssignTo: &mw.query,Text:     "查询",},},},Composite{MinSize: Size{0, 100},Layout:  HBox{},Children: []Widget{GroupBox{Title:  "查询结果",Layout: Grid{Columns: 2},Children: []Widget{Label{Text: "国家"},LineEdit{AssignTo: &mw.country, ReadOnly: true},Label{Text: "地区"},LineEdit{AssignTo: &mw.area, ReadOnly: true},Label{Text: "省"},LineEdit{AssignTo: &mw.region, ReadOnly: true},Label{Text: "市"},LineEdit{AssignTo: &mw.city, ReadOnly: true},Label{Text: "运营商"},LineEdit{AssignTo: &mw.isp, ReadOnly: true},},},},},},}).Create(); err != nil {log.Fatalln(err)}mw.query.Clicked().Attach(func() {go func() {mw.query.SetText("查询中...")mw.query.SetEnabled(false)mw.GetIpInfo()mw.query.SetText("查询")mw.query.SetEnabled(true)}()})mw.Run()}func (mw *MyWindow) GetIpInfo() {mw.clearInfo()ip := net.ParseIP(mw.ip.Text())if ip == nil {walk.MsgBox(mw, "查询地址", "您输入的不是有效的IP地址,请重新输入!", walk.MsgBoxIconWarning)return}ipResult := tabaoAPI(ip.String())mw.country.SetText(ipResult.Data.Country)mw.area.SetText(ipResult.Data.Area)mw.region.SetText(ipResult.Data.Region)mw.city.SetText(ipResult.Data.City)mw.isp.SetText(ipResult.Data.Isp)walk.MsgBox(mw, "查询地址", "查询结束!", walk.MsgBoxIconInformation)}func (mw *MyWindow) clearInfo() {mw.country.SetText("")mw.area.SetText("")mw.region.SetText("")mw.city.SetText("")mw.isp.SetText("")}func tabaoAPI(ip string) *IPInfo {resp, err := http.Get(fmt.Sprintf("http://ip.taobao.com/service/getIpInfo.php?ip=%s", ip))if err != nil {return nil}defer resp.Body.Close()out, err := ioutil.ReadAll(resp.Body)if err != nil {return nil}var result IPInfoif err := json.Unmarshal(out, &result); err != nil {return nil}return &result}





0 0
原创粉丝点击