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の場合と同じ.