import urllib, appuifw, e32, graphics, key_codes, os, os.path
APP_ID = "reuBqRjOdK4E3NaKfEsYopj3459fmas_xg7oa"
MAP_URL = "http://local.yahooapis.com/MapsService/V1/mapImage?"
MAP_FILE = u"E:\\Images\\mopymap.png"
if not os.path.exists("E:\\Images"):
os.makedirs("E:\\Images")
def naive_xml_parser(key, xml):
key = key.lower()
for tag in xml.split("<"):
tokens = tag.split()
if tokens and tokens[0].lower().startswith(key):
return tag.split(">")[1].strip()
return None
def new_map():
addr = appuifw.query(u"Address:", "text")
if not addr:
return
params = {"location": addr,
"appid": APP_ID,
"image_type": "png",
"image_height": "600",
"image_width": "600",
"zoom": "6"
}
show_text(u"Loading map...")
try:
url = MAP_URL + urllib.urlencode(params)
res = urllib.urlopen(url).read()
except:
show_text(u"Network error")
return
img_url = naive_xml_parser("result", res)
if img_url:
show_text(u"Loading map......")
load_image(img_url)
handle_redraw(canvas.size)
else:
msg = naive_xml_parser("message", res)
show_text(u"%s" % msg)
def load_image(url):
global mapimg, map_x, map_y, status
res = urllib.urlopen(url).read()
f = file(MAP_FILE, "w")
f.write(res)
f.close()
mapimg = graphics.Image.open(MAP_FILE)
map_x = mapimg.size[0] / 2 - canvas.size[0] / 2
map_y = mapimg.size[1] / 2 - canvas.size[1] / 2
status = None
def show_text(txt):
global status
status = txt
handle_redraw(canvas.size)
def handle_redraw(rect):
if mapimg:
canvas.blit(mapimg, target=(0, 0),
source=(map_x, map_y))
else:
canvas.clear((255, 255, 255))
if status:
canvas.text((10, 50), status,
fill=(0, 0, 255), font="title")
def handle_keys(event):
global map_x, map_y
if event['keycode'] == key_codes.EKeyLeftArrow:
map_x -= 10
elif event['keycode'] == key_codes.EKeyRightArrow:
map_x += 10
elif event['keycode'] == key_codes.EKeyUpArrow:
map_y -= 10
elif event['keycode'] == key_codes.EKeyDownArrow:
map_y += 10
handle_redraw(canvas.size)
def quit():
app_lock.signal()
map_x = map_y = 0
mapimg = status = None
appuifw.app.exit_key_handler = quit
appuifw.app.title = u"MopyMaps!"
appuifw.app.menu = [(u"New location", new_map),
(u"Quit", quit)]
canvas = appuifw.Canvas(redraw_callback = handle_redraw,
event_callback = handle_keys)
appuifw.app.body = canvas
show_text(u"Welcome to MopyMaps!")
app_lock = e32.Ao_lock()
app_lock.wait()