IP归属地查询

#urllib:HTTP API请求

##re:IP格式验证、返回结果提取

tkinter:界面布局、样式


##  IP定位,根据盛大IP查询API所编写
##  anthor:YanZhenwei(yanzhenwei1101@qq.com)
##  Create version: V1.0Beta01 2012-03-02
##  Last Update:2012-03-03
from tkinter import *
import re
import urllib
import urllib.request
class MWindow(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.master.title('IPSearch')
        self.master.geometry('650x400')
        self.pack(side = TOP,expand = YES,fill = BOTH)
        ipVar = StringVar()
        res = {}
        res['result'] = StringVar()
        res['country'] = StringVar()
        res['city'] = StringVar()
        res['sp'] = StringVar()
        # top Frame
        topF = self.createFrame(self,TOP)
        inL = self.createLabel(topF,TOP,'请输入IP地址:')
        ipE = self.createEntry(topF,TOP,ipVar)
        resL = self.createLabel(topF,TOP,'查询结果:')
        resE = self.createEntry(topF,TOP,res['result'])
        #mid Frame
        midF = self.createFrame(self,TOP)
        conL = self.createLabel(midF,LEFT,'省')
        conE = self.createEntry(midF,LEFT,res['country'])
        citL = self.createLabel(midF,LEFT,'市')
        citE = self.createEntry(midF,LEFT,res['city'])
        conL = self.createLabel(midF,LEFT,'运营商')
        spE = self.createEntry(midF,LEFT,res['sp'])
        #bottom Frame
        botF = self.createFrame(self,TOP)
        searchB = Button(botF,text = 'search',
                         command = lambda ipVar = ipVar,res = res:self.IpSearch(ipVar,res))
        searchB.pack(side = TOP,expand = YES,fill = BOTH)
    def createFrame(self,parent,side):
        f = Frame(parent)
        f.pack(side = side,expand = YES,fill = BOTH)
        return f
    def createLabel(self,parent,side,text):
        l = Label(parent,text = text)
        l.pack(side = side,expand = YES)
        return l
    def createEntry(self,parent,side,textvariable):
        e = Entry(parent,relief = SUNKEN,textvariable = textvariable,width = 20)
        e.pack(side = side,expand = NO)
        return e
    def IpSearch(self,ipVar,res):
        ipRex = '((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))'
        ip = ipVar.get()
        tmp = re.findall(re.compile(ipRex),ip)
        if not tmp:
            res['result'].set('ip格式错误,请重新输入')
            return 
        data = IpS().search(ip)
        if data['result'] == '1':
            data['result'] = '该IP所在位置如下'
        else:
            data['result'] = '找不到相关信息'
        res['result'].set(data['result'])
        res['country'].set(data['country'])
        res['city'].set(data['city'])
        res['sp'].set(data['sp'])

class IpS():
    def __init__(self):
        self.apiurl = 'http://ipquery.sdo.com/getipinfo.php?ip='
    def search(self,ip):
        headers = ('User-Agent','Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1')
        opener = urllib.request.build_opener()
        opener.addheaders = [headers]
        data = opener.open(self.apiurl+ip).read()
        data = data.decode('UTF-8')
        dataList = {}
        patterns = '<result>([0-9])</result>'
        dataList['result'] = re.findall(re.compile(patterns),data)[0]
        patterns = '<country>([^x00-xff]+)</country>'
        dataList['country'] = re.findall(re.compile(patterns),data)[0]
        patterns = '<city>([^x00-xff]+)</city>'
        dataList['city'] = re.findall(re.compile(patterns),data)[0]
        patterns = '<sp>([^x00-xff]+)</sp>'
        dataList['sp'] = re.findall(re.compile(patterns),data)[0]
        return dataList
if __name__ == '__main__':
    MWindow().mainloop()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值