Кэширование данных календаря из Google Calendar - PullRequest
0 голосов
/ 14 марта 2011

Мне нужно извлечь события из Календаря Google, чтобы представить их на сайте, созданном с помощью Django.Я не уверен, каков наилучший способ сделать это, но я считаю, что данные должны кэшироваться (мой сайт / приложение сегодня не использует кэширование).

Поскольку мне не нужен архив событий, Я хочу избегать использования базы данных.

Вот такой подход я рассматриваю:

  1. (0) Проверить возраст файла кэшированного календаря, если он слишком старый:
  2. Загрузить файл iCalendar (.ics) из Google (не уверен, стоит ли мне использовать ics. Может быть, RSS / XML лучше?)
  3. Анализ файла с iCalendar ( Python iCalendar lib * 1013)*)
  4. Создание / рендеринг нового вывода html из календаря, который может быть включен в виде статического файла и представлен на сайте Django

Предложения по улучшению процедуры или ее частейпризнателен.

ОБНОВЛЕНИЕ: Я рассмотрел использование JavaScript, но тогда, если API не работает, данные будут недоступны.Но если это будет считаться приемлемым решением, мне придется больше в него взглянуть.

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Я бы согласился с @ marr75, так как вы, вероятно, можете достичь того, что вы хотите сделать, используя JavaScript (см. Страницу Google JavaScript для GCal API ).

Одним из решений было бы написать собственную настраиваемую команду управления , которая заполняет низкоуровневый кеш Django , а затем использовать эти переменные внутри вашего шаблона. Затем вы можете настроить эту команду управления для периодического запуска в качестве cronjob для поддержания актуальности данных. Вам не нужно кэшировать отдельные переменные - вы всегда можете кэшировать целый блок HTML, созданный с использованием iCalendar (который я предполагаю this ).

Если бы вы дали немного больше подробностей о том, что это такое, то я могу дать ответ, который немного более полезен, чем этот. Кроме того, вы можете также взглянуть на декоратор кэша для каждого просмотра Django .

РЕДАКТИРОВАТЬ: Пример может выглядеть следующим образом:

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 обратно следующим образом:

from django.shortcuts import render_to_response
from django.core.cache import cache

def home(request):
    data = {
        'gcal': cache.get('google_calendar')
    }
    return render_to_response('home.html', data)
1 голос
/ 14 марта 2011

Мой подход заключается в том, чтобы избежать кэширования, делая вызовы ajax и версию javascript клиентской библиотеки gdata.

Есть ли в iCalendar функции (это модуль python для манипулирования данными такого типа?), Которые нельзя воспроизвести с помощью javascript?

Такой подход позволит вам сэкономить на хранении и обработке и, скорее всего, даст вам самый отзывчивый сайт.

...