2016-04-10 14 views
0

Ich verwende Feed-Parser, um Inhalte aus einem RSS-Feed zu erstellen. Sein etwas wie folgt aus:Warum kann ich kein Datum aus einem RSS-Feed abrufen und auf mein Django-Modell einstellen?

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() 

Jetzt bin ich nicht ganz sicher, ob der obige Code funktioniert oder nicht, wie ich es nicht testen können.

In meinem models.py, ich habe diese beiden Modelle:

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') 

Falls Sie sich fragen, wenn ein Feed gespeichert wird, wird der Inhalt von diesem Futter erzeugt und gespeichert als Content-Objekte in meine Datenbank. Das versuche ich zumindest. Allerdings, wenn ich einen Feed zu speichern, gibt es eine Fehlermeldung, so etwas wie diese:

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."] 

Wie behebe ich dieses Problem? Und außerdem, ich bin kein Experte, könnte mir jemand sagen, ob meine generate_content_from_feed Methode Probleme hat oder nicht? Danke vielmals.

+0

Ich habe mich gefragt, zu konvertieren Warum nicht in der Lage sein, es zu testen? Ich würde Ihnen empfehlen, in Ihren Code zu debuggen und vor dem Speichern genau den Inhalt Ihrer Variablen zu sehen. – Wtower

Antwort

0

Es kann eine bessere Art und Weise sein, aber Ihr Code sollte so etwas wie diese

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 

aussieht Wenn Sie Probleme wieder haben, ist es wahrscheinlich gut versuchen, die Apr zu einem Datum Nummer