Mercurial > silorider
changeset 73:63bb8d716204
Fix upload of attached photos to Facebook Pages posts
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 02 Feb 2024 21:08:10 -0800 |
parents | 58348b2e6085 |
children | 08ee3ffbe508 |
files | silorider/silos/facebook.py |
diffstat | 1 files changed, 12 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- 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)