2016-04-10 4 views
0

私はrssフィードからコンテンツを作成するためにフィードパーサーを使用しています。RSSフィードから日付を取得して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() 

私はそれをテストできないので、上記のコードが動作しているかどうかは完全にはわかりません。私models.py

、私はこれらの2つのモデルがあります:

フィードは、そのフィードからのコンテンツが生成され、中のコンテンツのオブジェクトとして保存されて保存され、あなたが思っている場合、
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') 

私のデータベース。私がやろうとしていることはそれ以上です。フィードを保存すると、次のようなエラーが表示されます。

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

この問題を解決するにはどうすればよいですか?また、私は専門家ではない、私のgenerate_content_from_feedメソッドに問題があるかどうか誰にでも教えてもらえますか?どうもありがとう。

+0

日付番号にAprを変換しようと、なぜそれをテストすることができないのですか?コードにデバッグし、保存する前に変数の内容を正確に確認することをお勧めします。 – Wtower

答えて

0

は良い方法があるかもしれませんが、あなたは再び問題がある場合は、あなたのコードは、この

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 

のようになりますそのおそらく良い私は思っていた

関連する問題