geopos - limestone - A KDE marble commandline interface.
 (HTM) git clone git://r-36.net/limestone
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       geopos (1603B)
       ---
            1 #!/usr/bin/env python
            2 # coding=utf-8
            3 #
            4 # Copy me if you can.
            5 # by 20h
            6 #
            7 # usage: geopos [-gjri] position description
            8 #   -g - produce geo: URI
            9 #   -j - print JSON output
           10 #   -i - get position of some IP
           11 #   -r - do reverse search of a position to some description
           12 #
           13 
           14 import sys
           15 import os
           16 import geocoder
           17 import getopt
           18 
           19 def usage(app):
           20         app = os.path.basename(app)
           21         sys.stderr.write("usage: %s [-gjri] loc\n" % (app))
           22         sys.exit(1)
           23 
           24 def main(args):
           25         try:
           26                 opts, largs = getopt.getopt(args[1:], "hgjri")
           27         except getopt.GetoptError as err:
           28                 print(str(err))
           29                 usage(args[0])
           30         
           31         printjson = False
           32         isreverse = False
           33         isip = False
           34         dogeouri = False
           35         for o, a in opts:
           36                 if o == "-h":
           37                         usage(args[0])
           38                 elif o == "-g":
           39                         dogeouri = True
           40                 elif o == "-j":
           41                         printjson = True
           42                 elif o == "-i":
           43                         isip = True
           44                 elif o == "-r":
           45                         isreverse = True
           46                 else:
           47                         assert False, "unhandled option"
           48 
           49         if len(largs) < 1:
           50                 usage(args[0])
           51 
           52         g = None
           53         sarg = " ".join(largs)
           54         if isreverse == True:
           55                 g = geocoder.reverse(sarg)
           56         elif isip == True:
           57                 g = geocoder.ip(sarg)
           58         else:
           59                 g = geocoder.google(sarg)
           60 
           61         retval = 1
           62         if printjson == True:
           63                 if "ERROR" not in b.status:
           64                         print(g.json)
           65         else:
           66                 if dogeouri == True:
           67                         if "lat" in g.json and "lng" in g.json:
           68                                 print("geo:%s,%s" % (g.json["lat"], g.json["lng"]))
           69                                 retval = 0
           70                 else:
           71                         for k in ("lat", "lng", "address"):
           72                                 if k in g.json:
           73                                         if type(g.json[k]) == bytes:
           74                                                 s = g.json[k].decode("utf-8")
           75                                         else:
           76                                                 s = g.json[k]
           77                                         print("%s: %s" % (k, s))
           78                                         retval = 0
           79 
           80         return retval
           81 
           82 if __name__ == "__main__":
           83         sys.exit(main(sys.argv))
           84