1 # -*- coding: utf-8 -*-
4 from optparse import make_option
7 from django.conf import settings
8 from django.core.management.base import BaseCommand, CommandError
10 from contextual.models import ExternalFeed
11 from contextual.feedcache import cache
13 class Command(BaseCommand):
14 option_list = BaseCommand.option_list + (
15 make_option('--verbose', default=False, dest='verbose', 16 help="Displays info during the crawl (feed's titles)."),
18 help = 'Crawls all feeds in ExternalFeed.'
19 def handle(self, *app_labels, **options):
20 verbose = options.get('verbose', False) 21 storage = shelve.open(settings.CACHE_EXTERNAL_FEED_FILE)
23 fc = cache.Cache(storage,
24 timeToLiveSeconds=settings.CACHE_EXTERNAL_FEED_SECONDS,
25 userAgent='biologeek')
26 for feed in ExternalFeed.objects.all():
28 parsed_data = fc.fetch(feed.url)
29 except: # cPickle.UnpicklingError, AttributeError, more?
31 if verbose and hasattr(parsed_data.feed, 'title'):
32 print parsed_data.feed.title
33 for entry in parsed_data.entries:
34 print '\t', entry.title