Как обновить фид в django с помощью feedparser?
я ищу способ обновления rss-лент с помощью feedparser. я пробовал:
в models.py
class Feed(models.Model):
title = models.CharField(max_length=200, unique=True)
url = models.URLField(unique=True)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.title
def load_articles(self):
new_list = feedparser.parse(self.url)
for entry in new_list.entries:
try:
Article.objects.create(entry)
except IntegrityError:
pass
class Article(models.Model):
feed = models.ForeignKey('Feed', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
url = models.URLField()
description = models.TextField()
publication_date = models.DateTimeField()
и я создал команду управления
from django.core.management.base import BaseCommand, CommandError
from news.models import Feed, Article
art = Article()
class Command(BaseCommand):
help = 'updates feeds'
def handle(self, *args, **kwargs):
Feed.load_articles(art)
self.stdout.write("feeds updated")
команда не возвращает никакой ошибки и печатает обновленные фиды, но я не вижу никакого эффекта.
Ок, я заметил, что вы сделали неправильно после короткого разговора в комментариях.
Посмотрите, как вы написали команду handle:
def handle(self, *args, **kwargs):
Feed.load_articles(art)
self.stdout.write("feeds updated")
Это неправильно - потому что вы пытаетесь передать пустой Article()
без ЛЮБЫХ данных. Он даже не содержит url
- вот почему он возвращает пустое ничто, он просто вызывает, вероятно, /
.
Попробуйте написать команду handle таким образом:
def handle(self, *args, **kwargs):
feeds = Feed.objects.all()
for item in feeds:
item.load_articles()
self.stdout.write("feeds updated")
Надеюсь, что все получится.