我试图将照片上传到经过身份验证的Facebook用户的特定相册。但照片没有出现在相册中。它出现在名为'" appname"的新专辑中。图片&#39 ;.我会尝试尽可能完整地描述我的方式 - 也许这可以帮助你找到我的错误。
我没有使用任何Facebook或第三方SDK。项目编程语言是C#(如果重要的话)。
首先,我通过将用户发送到以下网址来获取访问令牌:
https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&response_type={2}&scope={3}
特权列表不仅适用于照片上传。
登录和它的实施工作非常顺利,因此我得到了一个“访问权限”'和' expires_in'答案中的字段。
如果我没有保存,我将获取由访问令牌表示的经过身份验证的用户的用户ID。这是通过简单的请求来完成的:
https://graph.facebook.com/me?access_token={0}
这也很有效,我得到了一个积极的回复,包括姓名,电子邮件等以及用户ID。
下一个任务,获取用户与获取的访问令牌关联的相册列表和用户ID。这是通过FQL查询完成的:
SELECT aid,can_upload,created,name,description FROM album WHERE owner={0}
通过调用此URL执行FQL查询:
https://graph.facebook.com/fql?q={0}&access_token={1}
同样,这很好用 - 我得到了请求的字段。 '援助'值稍后将用作相册ID,格式为99999999_999999999(中间某处带下划线的数字)。我只使用具有can_upload标志的专辑" true"。
现在,我希望我能够获得发布照片所需的所有信息。
我为此URL创建了一个POST请求multipart / form-data:
https://graph.facebook.com/{0}/photos?access_token={1}
请求包含两个字段:' source'包含照片的二进制数据,'消息'标题。
请求成功。没有问题可以解决。
但是,当我现在访问Facebook用户页面时,这些照片不在所选专辑中,而是在另一张名为"" appname"图片&#39 ;.标题设置正确。
我必须更改什么才能将照片直接带到所需的相册?
答案 0 :(得分:2)
援助 不您上传时应使用的ID。这在Facebook文档中并不明显 - 但您应该使用 object_id 列,因为它代表了图谱API上的一个对象。
因此,请将您的FQL查询更改为:
SELECT object_id,can_upload,created,name,description FROM album WHERE owner={0}
object_id只是一个数字 - 而不是两个用下划线分隔的数字。请将您的帖子发送到:
https://graph.facebook.com/{0}/photos?access_token={1}
请注意,您只需要user_photos权限即可上传照片。但是如果没有publish_stream权限,他们就不会立即出现在用户的相册中 - 相反,当用户浏览相册时,他们会看到:
一旦他们点击批准,他们就会出现在相册中。如果您的应用程序具有publish_stream,那么他们将直接进入相册,用户无需批准它们。
其余代码应该是正确的。
答案 1 :(得分:0)
重定向URI,设置为 ' https://www.facebook.com/connect/login_success.html',因为我正在工作 在桌面应用程序上
我不清楚在这种情况下你是如何获得USER的访问令牌的。对我来说,看起来你没有得到它,而是你正在使用你的APP令牌 - 这就是为什么奇怪的专辑名称。您可以仔细检查Token Debugger您确实使用了用户的令牌吗?
我的一个Windows窗体应用程序有类似的工作流程 - 但是我将用户重定向到localhost - 我的WCF服务正在监听的位置并从中获取用户的访问令牌。