contextual/management/commands/crawlfeeds.py
author David Larlet <larlet@gmail.com>
Mon Sep 01 13:48:50 2008 +0200 (10 months ago)
changeset 40 4e25f872a753
parent 265422b015a11f
permissions -rw-r--r--
Correct link to thoughts' comments, thanks jpcw2002!
     1 # -*- coding: utf-8 -*-
     2 import time
     3 import shelve
     4 from optparse import make_option
     5 import cPickle
     6 
     7 from django.conf import settings
     8 from django.core.management.base import BaseCommand, CommandError
     9 
    10 from contextual.models import ExternalFeed
    11 from contextual.feedcache import cache
    12 
    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)."),
    17     )
    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)
    22         try:
    23             fc = cache.Cache(storage, 
    24                 timeToLiveSeconds=settings.CACHE_EXTERNAL_FEED_SECONDS, 
    25                 userAgent='biologeek')
    26             for feed in ExternalFeed.objects.all():
    27                 try:
    28                     parsed_data = fc.fetch(feed.url)
    29                 except: # cPickle.UnpicklingError, AttributeError, more?
    30                     continue
    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
    35         finally:
    36             storage.close()
    37         return
    38