diff --git a/src/newsreader/news/collection/models.py b/src/newsreader/news/collection/models.py index 92dfe51..ce5d62d 100644 --- a/src/newsreader/news/collection/models.py +++ b/src/newsreader/news/collection/models.py @@ -75,6 +75,19 @@ class CollectionRule(TimeStampedModel): return reverse("news:collection:feed-update", kwargs={"pk": self.pk}) + @property + def source_url(self): + if self.type == RuleTypeChoices.subreddit: + from newsreader.news.collection.reddit import REDDIT_API_URL, REDDIT_URL + + return self.url.replace(REDDIT_API_URL, REDDIT_URL) + elif self.type == RuleTypeChoices.twitter_timeline: + from newsreader.news.collection.twitter import TWITTER_URL + + return f"{TWITTER_URL}/{self.screen_name}" + + return self.url + @property def failed(self): return not self.succeeded and self.last_run diff --git a/src/newsreader/news/collection/reddit.py b/src/newsreader/news/collection/reddit.py index 1fbffe2..fecda54 100644 --- a/src/newsreader/news/collection/reddit.py +++ b/src/newsreader/news/collection/reddit.py @@ -131,6 +131,9 @@ class RedditBuilder(PostBuilder): for entry in entries: try: post = self.build_post(entry) + except BuilderDuplicateException: + logger.warning("Skipping duplicate post") + continue except BuilderException: logger.exception("Failed building post") continue diff --git a/src/newsreader/news/collection/templates/news/collection/views/rules.html b/src/newsreader/news/collection/templates/news/collection/views/rules.html index ef05352..9373391 100644 --- a/src/newsreader/news/collection/templates/news/collection/views/rules.html +++ b/src/newsreader/news/collection/templates/news/collection/views/rules.html @@ -53,8 +53,8 @@ {{ rule.category.name }} {% endif %} - - {{ rule.url }} + + {{ rule.source_url }} {% if rule.failed %} diff --git a/src/newsreader/news/collection/twitter.py b/src/newsreader/news/collection/twitter.py index 36047a5..5ae0b06 100644 --- a/src/newsreader/news/collection/twitter.py +++ b/src/newsreader/news/collection/twitter.py @@ -56,6 +56,9 @@ class TwitterBuilder(PostBuilder): for post in self.payload: try: post = self.build_post(post) + except BuilderDuplicateException: + logger.warning("Skipping duplicate post") + continue except BuilderException: logger.exception("Failed building post") continue