-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcellmapper.py
64 lines (57 loc) · 2.17 KB
/
cellmapper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import simplejson
import urllib
import urlparse
def get_codes(line):
"""Return mnc, mcc, lac 3-tuple."""
d = urlparse.parse_qs(line.split("window.open( 'map.php?")[1].split("'")[0])
return int(d['MNC'][0]), int(d['MCC'][0]), d['LAC'][0]
def get_base_numbers(mnc, mcc, lac):
if lac.rfind(',') != -1:
lac = lac.split(',')
else:
lac = [lac]
base_numbers = set()
signals = set()
for l in lac:
url = "http://www.cellmapper.net/api/v2/json.php?action=getTowers&data[MCC]=%s&data[MNC]=%s&data[LAC]=%s" \
% (mcc, mnc, l)
result = simplejson.loads(urllib.urlopen(url).read())
for data in result['data']:
base = data['base']
url = "http://www.cellmapper.net/api/v2/json.php?action=getBaseStation&data[MCC]=%s&data[MNC]=%s&data[LAC]=%s&data[base]=%s" \
% (mcc, mnc, l, base)
result = simplejson.loads(urllib.urlopen(url).read())
try:
if not result['data'].has_key('signals'):
continue
x = result['data']['signals'].split(',')
for s in x:
signals.add(int(s))
except:
pass
return signals
if __name__ == '__main__':
process = False
f = open('coordinates.csv', 'w')
for line in open('data.html').read().split('\n'):
val = ''
if line.startswith('window.open('):
mnc, mcc, lac = get_codes(line)
if mcc in [404, 405]:
process = True
print 'Processing mcc %s' % mcc
signals = get_base_numbers(mnc, mcc, lac)
if len(signals) == 0:
val = "-9999,-9999,"
else:
val = '%s,%s,' % (min(signals), max(signals))
f.write(val)
print val,
if process and line.startswith('position: new google.maps.LatLng('):
process = False
lat, lng = line.split('(')[1].split(')')[0].split(',')
val += '%s,%s\n' % (lat.strip(),lng.strip())
f.write(val)
f.flush()
print val
f.close()