2016-04-10 6 views
0

J'utilise l'analyseur de flux pour créer du contenu à partir d'un flux rss. Ses quelque chose comme ceci:Pourquoi ne puis-je pas obtenir une date à partir d'un flux RSS et la définir sur mon modèle Django?

import feedparser 

def parse_rss(rss_url): 
    return feedparser.parse(rss_url) 

def generate_content_from_feed(feed): 
    parsed_feed = parse_rss(feed.rss_url) 

    for item in parsed_feed['items']: 
     if not Content.objects.filter(link=item['link']).exists(): 
      content = Content.objects.create(
       title=item['title'], 
       link=item['link'], 
       description=item['description'], 
       pub_date=item['published'], 
       category=item['category'], 
       feed=feed, 
      ) 
      if item['enclosure']: 
       content.media_url = item['enclosure']['url'] 
       content.media_type = item['enclosure']['type'] 
      content.save() 

Maintenant, je ne suis pas certain si le code ci-dessus fonctionne ou non, comme je ne peux pas tester.

Dans mon models.py, j'ai ces deux modèles:

class Feed(models.Model): 
    rss_url = models.URLField() 

    def save(self, *args, **kwargs): 
     super(Feed, self).save(*args, **kwargs) 
     generate_content_from_feed(self) # Generating the content 

class Content(models.Model): 
    title = models.CharField(max_length=500) 
    link = models.URLField() 
    description = models.TextField() 
    pub_date = models.DateTimeField(default=None) 
    category = models.CharField(max_length=500, blank=True) 
    media_url = models.URLField(blank=True) # Attached media file url 
    media_type = models.CharField(max_length=50, blank=True) 
    feed = models.ForeignKey(Feed, related_name='content_feed') 

Si vous vous demandez, quand un flux est enregistré, le contenu de cette alimentation est générée et enregistrée sous forme d'objets de contenu dans ma base de données. Atleast c'est ce que j'essaye de faire. Cependant, lorsque j'enregistre un flux, il donne une erreur disant quelque chose comme ceci:

ValidationError at /admin/myapp/feed/add/ 
[u"'Fri, 08 Apr 2016 14:51:02 +0000' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."] 

Comment puis-je résoudre ce problème? Et aussi, je ne suis pas un expert, quelqu'un pourrait-il me dire si ma méthode generate_content_from_feed a des problèmes ou pas? Merci beaucoup.

+0

Je me demandais, pourquoi ne pas pouvoir le tester? Je vous recommande de déboguer dans votre code et voir exactement le contenu de vos variables avant d'enregistrer. – Wtower

Répondre

0

Il peut y avoir une meilleure façon, mais votre code devrait ressembler à ceci

a = 'Fri, 08 A`enter code here`pr 2016 14:51:02 +0000' 

dates = re.search(r'(\w+), (\d+) (\w+) (\d{4}) (\d+):(\d+):(\d+) ([\w+]+)', a) 
# YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."] 

day_str = dates.group(1) 
day = dates.group(2) 
month_str = dates.group(3) 
year = dates.group(4) 
hour = dates.group(5) 
minute = dates.group(6) 
second = dates.group(7) 

new_date = "%s-%s-%s %s:%s:%s" % (year, month_str, day, hour, minute, second) 
print(new_date) 

>>> 2016-Apr-08 14:51:02 

Si vous avez encore des problèmes, il est probablement bon d'essayer de convertir le Apr à un numéro de date