def
fetch(ip):
url
=
'http://ip.taobao.com/service/getIpInfo.php?ip='
+
ip
result
=
[]
try
:
response
=
urllib.urlopen(url).read()
jsondata
=
json.loads(response)
if
jsondata[u
'code'
]
=
=
0
:
result.append(jsondata[u
'data'
][u
'ip'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'country'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'country_id'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'area'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'area_id'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'region'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'region_id'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'city'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'city_id'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'county'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'county_id'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'isp'
].encode(
'utf-8'
))
result.append(jsondata[u
'data'
][u
'isp_id'
].encode(
'utf-8'
))
else
:
return
0
, result
except
:
logging.exception(
"Url open failed:"
+
url)
return
0
, result
return
1
, result
def
worker(ratelimit, jobs, results, progress):
global
cancel
while
not
cancel:
try
:
ratelimit.ratecontrol()
ip
=
jobs.get(timeout
=
2
)
# Wait 2 seconds
ok, result
=
fetch(ip)
if
not
ok:
logging.error(
"Fetch information failed, ip:{}"
.
format
(ip))
progress.put("")
# Notify the progress even it failed
elif
result
is
not
None
:
results.put(
" "
.join(result))
jobs.task_done()
# Notify one item
except
Queue.Empty:
pass
except
:
logging.exception(
"Unknown Error!"
)