diff --git a/README.md b/README.md index ad0b8d8b..d17997bc 100644 --- a/README.md +++ b/README.md @@ -304,6 +304,8 @@ Changelog * Add `Instagram.merge_scraped_comments()`. * ActivityStreams 2: * Handle error when `type` isn't a string. +* Reddit: + * Implement `get_activities()` to fetch posts by the current user or a user specified with `user_id`. ### 3.2 - 2021-09-15 * `Source.original_post_discovery`: add new `include_reserved_hosts` kwarg, defaults to `True`. diff --git a/granary/reddit.py b/granary/reddit.py index 54e5b1bf..5c8fd577 100644 --- a/granary/reddit.py +++ b/granary/reddit.py @@ -251,7 +251,7 @@ def _fetch_replies(self, r, activities): } def get_activities_response(self, user_id=None, group_id=None, app_id=None, - activity_id=None, start_index=0, count=0, + activity_id=None, start_index=0, count=None, etag=None, min_id=None, cache=None, fetch_replies=False, fetch_likes=False, fetch_shares=False, fetch_events=False, @@ -260,16 +260,21 @@ def get_activities_response(self, user_id=None, group_id=None, app_id=None, Currently only implements activity_id, search_query and fetch_replies. """ - activities = [] r = self.get_reddit_api() if activity_id: - subm = r.submission(id=activity_id) - activities.append(self.praw_to_activity(subm, 'submission')) + submissions = [r.submission(id=activity_id)] elif search_query: - sr = r.subreddit('all') - subms = sr.search(search_query, sort='new') - activities.extend([self.praw_to_activity(subm, 'submission') for subm in subms]) + submissions = r.subreddit('all').search(search_query, sort='new', limit=count) + else: + # Oddly user.me() returns None when in read only mode + # https://praw.readthedocs.io/en/stable/code_overview/reddit/user.html#praw.models.User.me + r.read_only = False + redditor = r.redditor(user_id) if user_id else r.user.me() + r.read_only = True + submissions = redditor.submissions.new(limit=count) + + activities = [self.praw_to_activity(s, 'submission') for s in submissions] if fetch_replies: self._fetch_replies(r, activities) diff --git a/granary/tests/test_reddit.py b/granary/tests/test_reddit.py index 8b6d87f7..262007bc 100644 --- a/granary/tests/test_reddit.py +++ b/granary/tests/test_reddit.py @@ -230,6 +230,15 @@ def test_post_id(self): 'lhzukq', self.reddit.post_id('https://www.reddit.com/r/xyz/comments/lhzukq/abc/')) + # TODO + # def test_get_activities_default_user(self): + # self.api.user.me().submissions.new(limit=None).AndReturn( + # [self.submission_selftext, self.submission_link]) + # self.mox.ReplayAll() + + # self.assert_equals([ACTIVITY_WITH_SELFTEXT, ACTIVITY_WITH_LINK], + # self.reddit.get_activities()) + def test_get_activities_activity_id(self): self.api.submission(id='abc').AndReturn(self.submission_selftext) self.mox.ReplayAll() @@ -241,7 +250,7 @@ def test_get_activities_search_query(self): subreddit = self.mox.CreateMock(praw.models.Subreddit) self.mox.StubOutWithMock(self.api, 'subreddit') self.api.subreddit('all').AndReturn(subreddit) - subreddit.search('foo bar', sort='new').AndReturn( + subreddit.search('foo bar', sort='new', limit=None).AndReturn( [self.submission_selftext, self.submission_link]) self.mox.ReplayAll()