diff --git a/activitystreams b/activitystreams index 21b75828..338997d3 160000 --- a/activitystreams +++ b/activitystreams @@ -1 +1 @@ -Subproject commit 21b7582858ee58da5890593e0d3a3416dbdc3383 +Subproject commit 338997d3f6928926aab0af53c0dcd705237cf68b diff --git a/facebook.py b/facebook.py index 58a6ac8f..063a36bf 100644 --- a/facebook.py +++ b/facebook.py @@ -139,7 +139,15 @@ def get_activities_response(self, **kwargs): raise items = resp.setdefault('items', []) - items += [self.as_source.post_to_activity(p) for p in photos] + + # only add photos that we don't already have activities for + fb_object_ids = util.trim_nulls(set( + i.get('object', {}).get('fb_object_id') for i in items)) + logging.info('@ %s %s', fb_object_ids, + [p.get('id') for p in photos]) + items += [self.as_source.post_to_activity(p) for p in photos + if p.get('id') not in fb_object_ids] + items += [self.as_source.event_to_activity(e, rsvps=r) for e, r in events_and_rsvps] return resp diff --git a/facebook_test.py b/facebook_test.py index 381419dd..bbeb4e36 100644 --- a/facebook_test.py +++ b/facebook_test.py @@ -79,6 +79,21 @@ def test_get_activities(self): event_activity, ], page.get_activities()) + def test_get_activities_post_and_photo_duplicates(self): + self.expect_urlopen( + 'https://graph.facebook.com/me/posts?offset=0&access_token=my_token', + json.dumps({'data': [as_facebook_test.POST]})) + self.expect_urlopen( + 'https://graph.facebook.com/me/photos/uploaded?access_token=my_token', + json.dumps({'data': [as_facebook_test.PHOTO]})) + self.expect_urlopen( + 'https://graph.facebook.com/me/events?access_token=my_token', + json.dumps({})) + self.mox.ReplayAll() + + page = FacebookPage.new(self.handler, auth_entity=self.auth_entity) + self.assert_equals([as_facebook_test.ACTIVITY], page.get_activities()) + def test_revoked(self): self.expect_urlopen( 'https://graph.facebook.com/me/posts?offset=0&access_token=my_token',