从googlecalend缓存日历数据

2024-05-20 02:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从Google日历中提取事件,以便在用Django构建的站点上显示它们。我不确定什么是最好的方法,但我相信数据应该被缓存(我的网站/应用程序现在不使用任何缓存)。在

因为我不需要事件归档,所以我想避免使用数据库。在

我正在考虑的方法是:

  1. (0)如果缓存的日历太旧:
  2. 从Google下载iCalendar(.ics)文件(不确定是否应该使用ics)。可能RSS/XML更好吗?)在
  3. 使用iCalendar(Python iCalendar lib)分析文件
  4. 从日历生成/呈现新的html输出,可以作为静态文件包含在Django站点上

欢迎提出改进程序或部分程序的建议。在

更新:我考虑过使用JavaScript,但是如果API关闭,数据将不可用。但如果这被认为是一个可以接受的解决方案,我将不得不进一步研究。在


Tags: 文件数据django方法程序数据库应用程序站点
2条回答

我的方法是通过调用ajax和gdata客户机库的javascript版本来避免缓存。在

“iCalendar”有什么特性吗(这是一个用于处理这种数据的python模块吗?)你不能用javascript复制?在

这种方法可以节省存储和处理,并且很可能为您提供响应最快的站点。在

我同意@marr75,因为您可以使用JavaScript实现您想要的功能(参见Google的JavaScript page for the GCal API)。在

一种解决方案是编写自己的custom management command,填充Django的low level cache,然后在模板中使用这些变量。然后,可以将此管理命令设置为作为cronjob定期运行,以保持数据的新鲜。您不必缓存单个变量—您可以始终缓存使用iCalendar(我假设是this)构造的整个HTML块。在

如果你能更详细地说明它是什么,那么我可以给出一个比这个稍微有用的答案。另外,您可能还想看看Django的per-view cache decorator。在

编辑:示例如下:

from django.core.cache import cache

# Generate HTML block to cache
html = '<div>Calendar</div>'

# Cache the HTML as 'google_calendar'
cache.set('google_calendar', html, 3600)

然后在您的视图中,您只需将缓存的HTML传递回它,如下所示:

^{pr2}$

相关问题 更多 >