# HG changeset patch # User Ludovic Chabant # Date 1706936890 28800 # Node ID 63bb8d716204fb31c37427d0819c96b740243db5 # Parent 58348b2e6085c269aaba1d29f541b9bbe11eef5c Fix upload of attached photos to Facebook Pages posts diff -r 58348b2e6085 -r 63bb8d716204 silorider/silos/facebook.py --- a/silorider/silos/facebook.py Fri Feb 02 21:07:10 2024 -0800 +++ b/silorider/silos/facebook.py Fri Feb 02 21:08:10 2024 -0800 @@ -1,3 +1,4 @@ +import json import logging import requests import pyfacebook @@ -142,12 +143,12 @@ profile_url_handlers=ctx.profile_url_handlers) def mediaCallback(self, tmpfile, mt, url, desc): - resp = self.client.post_object( - object_id=self.page_id, - connection='photos', - data={ - 'url': url, 'caption': desc, - 'published': False, 'temporary': True}) + with open(tmpfile, 'rb') as fp: + resp = self.client.post_object( + object_id=self.page_id, + connection='photos', + files={tmpfile: fp}, + data={'caption': desc, 'published': False}) logger.debug("Uploaded photo '%s' as object: %s" % (url, resp)) return resp['id'] @@ -157,7 +158,10 @@ attached_media = [] for media_id in media_ids: attached_media.append({"media_fbid": media_id}) - data['attached_media'] = attached_media + # Very bad: it looks like pyfacebook doesn't deep-JSONify + # things inside the data dictionary. So facebook returns + # an error code if we don't JSONify this array ourselves. + data['attached_media'] = json.dumps(attached_media) logger.debug("Posting Facebook update: %s" % entry_card.text) logger.debug("Using data: %s" % data) @@ -165,6 +169,6 @@ resp = self.client.post_object( object_id=self.page_id, connection='feed', - data={'message': entry_card.text}) + data=data) logger.debug("Posted as object: %s" % resp)