Как обновить фид в 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")

Надеюсь, что все получится.

Вернуться на верх