wifigeoloc - wifigeoloc - Client for the Geolocation API of Mozilla and Google
(HTM) git clone git://r-36.net/wifigeoloc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
wifigeoloc (1903B)
---
1 #!/usr/bin/env python3
2 # coding=utf-8
3 #
4 # See LICENSE for license details.
5 # by 20h
6 #
7
8 import os
9 import sys
10 import json
11 import getopt
12 import urllib.request, urllib.error
13
14 apikey="something"
15 bases = [
16 ("moz", "https://location.services.mozilla.com/v1/geolocate?key=%s"),
17 ("google", "https://www.googleapis.com/geolocation/v1/geolocate?key=&s")
18 ]
19
20 def usage(app):
21 app = os.path.basename(app)
22 sys.stderr.write("usage: %s [-h] [-a apikey] [-b baseuri]"\
23 " [-s service] mac [mac ...]\n" % (app))
24 sys.exit(1)
25
26 def main(args):
27 global apikey
28 global bases
29
30 try:
31 opts, largs = getopt.getopt(args[1:], "a:b:s:")
32 except getopt.GetoptError as err:
33 print(str(err))
34 usage(args[0])
35
36 service = "moz"
37 lapikey = apikey
38 baseuri = None
39
40 for o, a in opts:
41 if o == "-h":
42 usage(args[0])
43 elif o == "-a":
44 apikey = a
45 elif o == "-b":
46 baseuri = a
47 elif o == "-s":
48 service = a
49 else:
50 assert False, "unhandled option"
51
52 if len(largs) < 1:
53 usage(args[0])
54
55 if baseuri == None:
56 for serv in bases:
57 if serv[0] == service:
58 baseuri = serv[1]
59
60 if baseuri == None:
61 sys.stderr.write("service '%s' not supported.\n" %\
62 (service))
63 return 1
64 uri = baseuri % (apikey)
65
66 sendjson = {}
67 sendjson["wifiAccessPoints"] = []
68 for mac in largs:
69 sendjson["wifiAccessPoints"].append({"macAddress": mac})
70
71 jsons = json.dumps(sendjson).encode("utf-8")
72 req = urllib.request.Request(uri)
73 req.add_header("Content-Type", "application/json")
74 fd = urllib.request.urlopen(req, data=jsons)
75 answer = json.loads(fd.read().decode("utf-8"))
76 fd.close()
77
78 if "error" in answer:
79 print(answer)
80 return 1
81
82 if "accuracy" in answer and "location" in answer:
83 if answer["accuracy"] > 30000:
84 return 1
85 print("%s,%s,%s" % (answer["location"]["lat"],\
86 answer["location"]["lng"],\
87 answer["accuracy"]))
88 else:
89 return 1
90
91 return 0
92
93 if __name__ == "__main__":
94 sys.exit(main(sys.argv))
95