Feed-Reader (Server): Nachrichten und Blogs, Volltext, Meldungen bündeln
Neue App feeds: Quellen sind entweder Nachrichten oder Blog.
- Abruf wie bei Podcasts (ETag, Body-Hash, Backoff), refresh_newsfeeds für den Cron
- Anrisstexte: der Artikel wird von der Seite geholt (trafilatura), HTML bereinigt,
relative Links absolut
- Nachrichten: gleiche Meldung aus mehreren Quellen wird eine Story (tf-idf, je
Artikel verglichen), Briefing „Seit letztem Mal“ (Top-Themen, dann nach Ressort),
verfallen nach news_keep_days (Standard 2)
- Blogs: Ungelesen-Liste je Blog, bleiben bis gelesen
- API unter /feeds/: Quellen suchen/abonnieren/OPML, News, Stories, Blogs,
Artikel, gelesen, merken
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 19:57:23 +02:00
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
|
from django.utils import timezone
|
|
|
|
|
|
|
|
|
|
from feeds.models import Source
|
|
|
|
|
from feeds.refresh import refresh
|
|
|
|
|
from podcasts.views import _in_backoff_q
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Command(BaseCommand):
|
|
|
|
|
help = 'Refresh the feed reader\'s sources (news and blogs)'
|
|
|
|
|
|
|
|
|
|
def add_arguments(self, parser):
|
|
|
|
|
parser.add_argument('--source-id', type=int, help='Refresh only this source (even when backing off)')
|
|
|
|
|
|
|
|
|
|
def handle(self, *args, **options):
|
2026-11-09 09:27:01 +01:00
|
|
|
qs = Source.objects.filter(synthetic=False).select_related('user').order_by('last_refreshed_at')
|
Feed-Reader (Server): Nachrichten und Blogs, Volltext, Meldungen bündeln
Neue App feeds: Quellen sind entweder Nachrichten oder Blog.
- Abruf wie bei Podcasts (ETag, Body-Hash, Backoff), refresh_newsfeeds für den Cron
- Anrisstexte: der Artikel wird von der Seite geholt (trafilatura), HTML bereinigt,
relative Links absolut
- Nachrichten: gleiche Meldung aus mehreren Quellen wird eine Story (tf-idf, je
Artikel verglichen), Briefing „Seit letztem Mal“ (Top-Themen, dann nach Ressort),
verfallen nach news_keep_days (Standard 2)
- Blogs: Ungelesen-Liste je Blog, bleiben bis gelesen
- API unter /feeds/: Quellen suchen/abonnieren/OPML, News, Stories, Blogs,
Artikel, gelesen, merken
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 19:57:23 +02:00
|
|
|
if options['source_id']:
|
|
|
|
|
qs = qs.filter(pk=options['source_id'])
|
|
|
|
|
else:
|
|
|
|
|
qs = qs.exclude(_in_backoff_q(timezone.now()))
|
|
|
|
|
if not qs.exists():
|
|
|
|
|
self.stdout.write('No sources to refresh.')
|
|
|
|
|
return
|
|
|
|
|
refreshed, failed, new = refresh(qs)
|
|
|
|
|
self.stdout.write(f'{refreshed} sources refreshed, {failed} failed, +{new} items')
|