Google MapsのマイマップからRSSが無くなっていたので、社内用SkypeBotをRSSからKMLへ変更してみた。
その時いくつかハマったのでメモ代わりに書き残す。
KMLのパースにはElementTreeを使った。
コードはこんな感じ。
import urllib2 from xml.etree import ElementTree KML_FEED = 'http://maps.google.com/maps/ms?msid=[MSID]&output=kml' NAMESPACE = 'http://earth.google.com/kml/2.2' xml = ElementTree.parse(urllib2.urlopen(KML_URL)) entries = xml.findall('.//{%s}Placemark' % NAMESPACE)
ハマった点
- KMLにはIDがないので吹き出しを表示するURLを生成出来なくなってしまった。
- Google MapsのURLにあるllパラメータは北緯、東経の順なのに、KMLのcoordinatesタグは東経、北緯の順だった。
- ネームスペースを指定しないとタグを取って来れなかった。
KMLファイルをエディタで見てもネームスペースは書いてないので
xml.getroot().tag
で根エレメントのネームスペースを確認して、それを指定する必要があった。
結局1は解決出来ていないので、吹き出しを表示するURLの作り方を知ってる人は教えてください。