from pelican import signals
from xml.dom import minidom
settings = {}
collection = {}
gpx_root = '''
'''
kml_root = '''
'''
def init(self):
settings['files'] = self.settings.get('OUTPUT_PATH')
def generate_latlon(generator):
for article in generator.articles:
if "location" in article.metadata:
lat, lon = [float(i) for i in article.metadata['location'].replace(' ', '').split(',')]
article.metadata['lat'] = lat
article.metadata['lon'] = lon
def make_files(void):
print(collection)
makeGPX()
makeKML()
def makeKML():
if len(collection) > 0:
root = minidom.parseString(kml_root)
folder = root.createElement('name')
foldername = root.createTextNode( 'articles' )
folder.appendChild( foldername )
root.childNodes[0].childNodes[0].childNodes[0].appendChild( folder )
for place in collection:
placemark = root.createElement('Placemark')
name = root.createElement('name')
title = root.createTextNode( collection[place]['name'] + ' (' + collection[place]['url'] +')')
name.appendChild( title )
placemark.appendChild( name )
point = root.createElement('Point')
coordinates = root.createElement('coordinates')
lat, lon = collection[place]['coordinates'].replace(' ', '').split(',')
latlon = root.createTextNode( lon + ',' + lat)
coordinates.appendChild( latlon )
point.appendChild( coordinates )
placemark.appendChild( point )
root.childNodes[0].childNodes[0].childNodes[0].appendChild( placemark )
with open(settings['files'] + '/articles.kml', 'w') as xml_file:
root.writexml(xml_file, indent="", addindent=" ", newl='\n')
def makeGPX():
if len(collection) > 0:
root = minidom.parseString(kml_root)
for place in collection:
lat, lon = collection[place]['coordinates'].replace(' ', '').split(',')
wpt = root.createElement('wpt')
wpt.setAttribute('lat', lat)
wpt.setAttribute('lon', lon)
name = root.createElement('name')
title = root.createTextNode( collection[place]['name'] + ' (' + collection[place]['url'] +')' )
name.appendChild( title )
wpt.appendChild( name )
root.childNodes[0].appendChild( wpt )
with open(settings['files'] + '/articles.gpx', 'w') as xml_file:
root.writexml(xml_file, indent="", addindent=" ", newl='\n')
def geodata(generator):
for article in generator.articles:
if "location" in article.metadata:
collection.update({
article.slug : {
"url" : generator.settings['SITEURL'] + '/' + article.url,
"name": article.title,
"coordinates": article.metadata["location"],
}
})
def register():
signals.initialized.connect(init)
signals.article_generator_finalized.connect(generate_latlon)
signals.article_generator_finalized.connect(geodata)
signals.finalized.connect(make_files)