Я использую динамически генерируемый KML , который, по-видимому, периодически прерывается из-за «проблем с синхронизацией» с сервером Google.В прошлый раз я проверял, что это сработало, но это похоже на совпадениеДолжен ли я выполнять работу cron, которая обращается к странице каждые 5 минут, чтобы данные оставались свежими в памяти?Серверный генератор KML:
class KMLHandler(webapp2.RequestHandler):
def get(self):
self.response.headers['Cache-Control'] = 'public,max-age=%s' \
% 86400
start = datetime.datetime.now() - timedelta(days=60)
from google.appengine.api import memcache
memcache_key = 'ads'
data = memcache.get(memcache_key)
if data is None:
a = Ad.all().filter('modified >',
start).filter('published =',
True).order('-modified').fetch(1000)
memcache.set('ads', a)
else:
a = data
dispatch = 'templates/kml.html'
template_values = {'a': a, 'request': self.request,
'host': os.environ.get('HTTP_HOST',
os.environ['SERVER_NAME'])}
path = os.path.join(os.path.dirname(__file__), dispatch)
output = template.render(path, template_values)
self.response.headers['Content-Type'] = \
'application/vnd.google-earth.kml+xml'
self.response.headers['Content-Length'] = len(output)
self.response.out.write(output)
- Файл шаблона:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
{% for ad in a %}
{% if ad.geopt %}
<Placemark><name></name><description>
<![CDATA[{% if ad.uri2view %}<img src="{{ ad.uri2view }}">{% endif %}<a href="http://www.koolbusiness.com/vi/{{ad.key.id}}"> {{ ad.title }} </a><br/>{{ad.text|truncatewords:20}}]]></description><Point><coordinates>{{ad.geopt.lon|floatformat:2}},{{ad.geopt.lat|floatformat:2}}</coordinates></Point></Placemark>{% endif %}{% endfor %}</Document></kml>
- Я также запустил вывод через валидатор KMLчтобы убедиться, что это правильно.Он генерируется динамически, и я пытаюсь его кешировать.Это просто терпит неудачу с перебоями без причины.У меня есть Python, который генерирует KML, и код проверен и должен работать.Я не вижу, где программа не так?Я могу взять вывод моего скрипта, сохранить его в виде статического файла kml, и это работает, и KML действителен, поэтому, похоже, возникают «проблемы с синхронизацией» при передаче его в Google, когда он генерируется динамически.Но как я могу устранить эту проблему дальше?Вместо этого я мог бы изменить всю стратегию на использование JSON, но это будет много перекодировать, и я думаю, что я близок к тому, чтобы заставить это работать.
Можно выделить 3 стратегии:
- Изменить на шаблоны Jinja2
- Изменить на JSON вместо KML
- Написать задание cron, котороеобращается к файлу каждые 5 минут, чтобы сохранить данные в memcache Спасибо за любую помощь