Fix upload of attached photos to Facebook Pages posts
1 files changed, 12 insertions(+), 8 deletions(-)

M silorider/silos/facebook.py
M silorider/silos/facebook.py +12 -8
@@ 1,3 1,4 @@ 
+import json
 import logging
 import requests
 import pyfacebook

          
@@ 142,12 143,12 @@ class FacebookSilo(Silo):
                 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 @@ class FacebookSilo(Silo):
             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 @@ class FacebookSilo(Silo):
         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)