Google マイマップのデータを画像化して保存する2

上のスクリプトと組み合わせて使うためのhtmlを生成するスクリプトも書いた. 基本は同じ. ただ, PSPのブラウザはこの手のhtmlの表示が遅いらしく, ちょっと不便.

def strip_tags(data):
    pattern = re.compile(r'<br>')
    lines = pattern.split(data)
    pattern = re.compile(r'<.*?>')
    return [pattern.sub('', line) for line in lines]

header_string = '''<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<style type="text/css"><!--
.left {
  float: left;
  width: 48%;
}

.right { 
  float: right;
  width:48%;
}
--></style>
</head>
<body>
'''

footer_string = '''</body>
</html>'''

def gmap2html(filenames, output_filename='maps.html', 
              dirname='file://ms0:/PSP/COMMON/maps'):
    parameters = []

    for filename in filenames:
        document = minidom.parse(filename)

        for placemark in  document.getElementsByTagName('Placemark'):
            name_node = get_element(placemark, 'name')
            description_node = get_element(placemark, 'description')
            coordinates_node = get_element(placemark, ['Point', 'coordinates'])
            if name_node is None or coordinates_node is None: continue

            coordinate = get_text(coordinates_node).split(',')
            if len(coordinate) != 3: continue

            name = get_text(name_node)
            description = get_text(description_node) \
                if description_node is not None else ''
            filename = '%s/%s.png' % (dirname, adjust_name(name))

            description = '<br />\n'.join(strip_tags(
                    description.encode('utf_8')))
            parameter = {'serial': len(parameters),
                         'name': name.encode('utf_8'),
                         'description': description,
                         'filename': filename.encode('utf_8') }

            parameters.append(parameter)

        document.unlink()

    output_stream = open(output_filename, 'w')
    output_stream.write(header_string)

    lines = ['<a href="#%(serial)d">%(name)s</a>' % parameter 
             for parameter in parameters]
    output_stream.write('<div><p>\n%s</p>\n</div>' % (', \n'.join(lines)))

    line_template = '<p><a href="%(filename)s" name="%(serial)d"' \
        + 'id="%(serial)d">%(name)s</a><br />%(description)s</p>'
    lines = [line_template % parameter for parameter in parameters]
    output_stream.write('<div class="left">\n%s</div>\n' 
                        % (''.join(lines[: : 2])))
    output_stream.write('<div class="right">\n%s</div>\n' 
                        % (''.join(lines[1: : 2])))

    output_stream.write(footer_string)
    output_stream.close()

使い方はgmap2imageの場合と同じ.