#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import getopt
import sys
import time
from geopy import geocoders  
import csv
import traceback
from StringIO import *
import unicodedata
import re
_avirer = re.compile(u'[,\.]')

re_zipcode = re.compile('^[0-9]+')

def unaccent(str):
    str = unicodedata.normalize('NFKD', unicode(str)).encode('ascii','ignore').upper()
    str = str.replace('-' , ' ')
    str = str.replace("'" , ' ')
    return _avirer.sub('', str)



def main():
    """
    geolocalyse.py 
    """
    debug = 0
    sleep = 0
    data = sys.stdin
    output = sys.stdout
    
    try:
        opts, args = getopt.getopt(sys.argv[1:], 's:f:o:e:d')
    except getopt.error, msg:
        usage(msg)

    for o, a in opts:
        if o == '-s': sleep = a
        if o == '-f': data = open(a)
        if o == '-o': output = open(a, 'w')
        if o == '-e': output_error = open(a, 'w')
        elif o == '-d': debug = 1

    g = geocoders.Google(resource='maps')
 
    locations = csv.reader(data, delimiter='|')
    l = 0
    for key, location in locations:
        time.sleep(float(sleep))
        l = l + 1
        if debug:
            sys.stderr.write('fetching location "%s" .. ' % location) 
        try:
            place, (lat, lng) = g.geocode(location)
        except ValueError:
             fp = StringIO()
             traceback.print_exc(1,file=fp)
             sys.stderr.write(fp.getvalue())
             continue
        if debug:
            sys.stderr.write("get %s, (%s, %s))\n" % (place, lat, lng)) 
        output.write(u"%s|%s|%s|%s|%s\n" % (key, location, place, lat,lng))
           
        
        
if __name__ == "__main__":
	main()

