通过Python和Graphapi将图片上传到Facebook动态墙
我正在尝试用Python和GraphApi把图片发到用户的Facebook动态上。我可能发现我想做的事情是不可行的,但我还是希望不是这样,所以我还是来寻求帮助。
我可以成功地进行身份验证,并用以下代码在动态上发布文本:
self.client = GraphAPI(ACCESS_TOKEN)
self.client.put_object("me", "feed", message="我在FB动态上发布的文本")
所以我的问题是,想要从用户的电脑(特别是Windows,但任何操作系统都可以)直接把图片发到动态上,需要使用或添加哪些参数或配置。我看到很多关于图片网址的参考,但我想直接从桌面上传到动态。
1 个回答
在我使用Python实现Graph API的过程中,我找到了我之前问过的一个问题的答案。从某种角度来看,似乎不可能直接把图片发到Facebook的动态墙上(除了用链接的方式)。但换个角度看,这其实是非常可行的。你只需要把图片添加到一个相册中,给这张图片写个描述(这不是必须的),然后这张图片就会被发布到相册里,同时也会出现在Facebook的动态墙上,这样你就算是把这张图片发到了墙上。
把图片发到相册的代码是这样的(我在另一个StackOverflow的问题中得到了帮助):
caption = "This will be the description of the image in the album and also the message that appears on the wall" # caption = '' is acceptable if you do not wish to have a message
albumid = '' # this can be the album id of a facebook album or it can be left blank
with open("test.jpg","rb") as image:
posted_image_id = GraphAPI.put_photo(image, caption, albumid)
顺便说一下,还有另一种方法可以在Facebook动态墙上显示图片,但我没能完全搞定。不过我会提到这个方法,以防有人想知道我哪里出错了。
如果你知道已经发布的图片的Facebook图片ID,理论上(根据Facebook Graph API的文档),你可以通过object_attachment在动态墙的帖子中引用这张图片。所以代码大概是这样的:
msg = "This is the message that I want displayed on my wall"
imageid = facebook_image_id #to get this you will have execute a read via the graph api and select the image you want to "reference" on your wall post
GraphAPI.put_object("me", "feed", message=msg,object_attachment=imageid)
这个方法对我有效,不过我看到的不是图片,而是一个空白区域,但这个空白区域是可以点击的,点击后会打开正确的Facebook图片。所以我需要弄清楚为什么图片不显示在动态墙上,不过现在我不太需要这个功能,也许将来我会再来研究一下。