# Yahoo!地図情報 から住所の情報を取得する
# この関数を使用するためには、httplib, re が使用できる必要があります
from httplib import HTTPConnection
import re

def get_name(nl, el):
    path = "/pl?nl=%s&el=%s&la=1&fi=1&sc=2" % (nl, el)
    name = ""
    try:
        conn = HTTPConnection("map.yahoo.co.jp")
        conn.request("GET", path)
        res = conn.getresponse()
        map_html = unicode(res.read(), 'japanese.euc_jp').encode('utf8')
        pattern = re.compile("<title>Yahoo!地図情報 - (.*)の周辺地図</title>")
        m = pattern.search(map_html)
        if m:
            name = m.group(1)
    except:
        pass
    return name

# 緯度経度の表記を度分秒から10進に変換する
def min2dec(org):
    (deg, min, sec) = org.split(".", 2)
    dec = (float(deg) + float(min) / 60.0 + float(sec) / 3600.0)
    return dec

def error(url):
    string = """<html>
<head><title>URL が正しくありません</title></head>
<body>
<p>
入力した URL が正しくないため、地図情報の取得に失敗しました。<br />
入力された URL は以下のとおりです。<br />
<a href="%s">%s</a>
</p>
以下のいずれかの地図サイトから Bookmarklet を実行してください。
<ul>
<li><a href="http://map.yahoo.co.jp/">Yahoo!地図情報</a>
<li><a href="http://www.mapfan.com/">MapFan Web</a>
<li><a href="http://map.goo.ne.jp/">goo 地図</a>
<li><a href="http://map.livedoor.com/">livedoor 地図</a>
</ul>
</body>
</html>""" % (url, url)
    return string

# Import a standard function, and get the HTML request and response objects.
from Products.PythonScripts.standard import html_quote
request = container.REQUEST
RESPONSE =  request.RESPONSE

# parse url string
urlpattern = re.compile("http://(map.yahoo.co.jp|map.msn.co.jp|map.goo.ne.jp|map.livedoor.com||www.mapfan.com)/.*\?")
if urlpattern.search(request.url) == None:
    print error(request.url)
    return printed

(path, query_string) = request.url.split('?')
query = {}
for str in query_string.split('&'):
    (key, value) = str.split('=')
    query[key] =value

name = ""
el = ""
nl = ""

if path.startswith("http://map.yahoo.co.jp"):
    el = query['el']
    nl = query['nl']
elif path.startswith("http://map.msn.co.jp"):
    el = query['la']
    nl = query['lg']
elif path.startswith("http://map.goo.ne.jp") or path.startswith("http://map.livedoor.com") or path.startswith("http://www.mapfan.com/"):
    map = query['MAP']
    pos_e = map.find("E")
    pos_n = map.find("N")
    el = map[pos_e + 1:pos_n]
    nl = map[pos_n + 1:]
else:
    print error(request.url)
    return printed

if len(nl) > 0 and len(el) > 0:
    name = get_name(nl, el)
    b_tokyo = min2dec(nl)
    l_tokyo = min2dec(el)

# 日本測地系から WGS 84 に変換する
b_wgs84 = b_tokyo - 0.00010695 * b_tokyo + 0.000017464 * l_tokyo + 0.0046017
l_wgs84 = l_tokyo - 0.000046038 * b_tokyo - 0.000083043 * l_tokyo + 0.010040

RESPONSE.setHeader("Content-Type", "application/vnd.google-earth.kml+xml")

print '''<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Placemark>
  <name>%s</name>
  <View>
    <longitude>%s</longitude>
    <latitude>%s</latitude>
    <range>1000</range>
</View>
</Placemark>
</kml>
''' % (name, l_wgs84, b_wgs84)

return printed
