Facebook Graph API:将照片上传到特定的相册

时间:2013-11-29 15:55:44

标签: facebook facebook-graph-api facebook-opengraph

我试图将照片上传到经过身份验证的Facebook用户的特定相册。但照片没有出现在相册中。它出现在名为'" appname"的新专辑中。图片&#39 ;.我会尝试尽可能完整地描述我的方式 - 也许这可以帮助你找到我的错误。

我没有使用任何Facebook或第三方SDK。项目编程语言是C#(如果重要的话)。

首先,我通过将用户发送到以下网址来获取访问令牌:

https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&response_type={2}&scope={3}
  • {0}:客户端ID:我的应用程序ID,由Facebook提供
  • {1}:重定向URI,设置为' https://www.facebook.com/connect/login_success.html',因为我正在使用桌面应用程序
  • {2}:回复类型:'令牌'
  • {3}:范围 - 我要求的所有权限。这是以逗号分隔的以下项目列表:
    • manage_pages
    • 电子邮件
    • user_about_me
    • user_photos
    • user_videos
    • publish_actions
    • publish_stream
    • user_likes
    • user_activities
    • user_groups
    • photo_upload
    • video_upload

特权列表不仅适用于照片上传。

登录和它的实施工作非常顺利,因此我得到了一个“访问权限”'和' expires_in'答案中的字段。

如果我没有保存,我将获取由访问令牌表示的经过身份验证的用户的用户ID。这是通过简单的请求来完成的:

https://graph.facebook.com/me?access_token={0}
  • {0}是获取的访问令牌

这也很有效,我得到了一个积极的回复,包括姓名,电子邮件等以及用户ID。

下一个任务,获取用户与获取的访问令牌关联的相册列表和用户ID。这是通过FQL查询完成的:

SELECT aid,can_upload,created,name,description FROM album WHERE owner={0}
  • {0}是用户ID

通过调用此URL执行FQL查询:

https://graph.facebook.com/fql?q={0}&access_token={1}
  • {0}上面的查询
  • {1}访问令牌

同样,这很好用 - 我得到了请求的字段。 '援助'值稍后将用作相册ID,格式为99999999_999999999(中间某处带下划线的数字)。我只使用具有can_upload标志的专辑" true"。

现在,我希望我能够获得发布照片所需的所有信息。

我为此URL创建了一个POST请求multipart / form-data:

https://graph.facebook.com/{0}/photos?access_token={1}
  • {0}是9999999_999999相册ID
  • {1}是登录
  • 的访问令牌

请求包含两个字段:' source'包含照片的二进制数据,'消息'标题。

请求成功。没有问题可以解决。

但是,当我现在访问Facebook用户页面时,这些照片不在所选专辑中,而是在另一张名为"" appname"图片&#39 ;.标题设置正确。

我必须更改什么才能将照片直接带到所需的相册?

2 个答案:

答案 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}
  • {0}是9999999 对象ID
  • {1}是登录
  • 的访问令牌

请注意,您只需要user_photos权限即可上传照片。但是如果没有publish_stream权限,他们就不会立即出现在用户的相册中 - 相反,当用户浏览相册时,他们会看到:

enter image description here

一旦他们点击批准,他们就会出现在相册中。如果您的应用程序具有publish_stream,那么他们将直接进入相册,用户无需批准它们。

其余代码应该是正确的。

答案 1 :(得分:0)

  

重定向URI,设置为   ' https://www.facebook.com/connect/login_success.html',因为我正在工作   在桌面应用程序上

我不清楚在这种情况下你是如何获得USER的访问令牌的。对我来说,看起来你没有得到它,而是你正在使用你的APP令牌 - 这就是为什么奇怪的专辑名称。您可以仔细检查Token Debugger您确实使用了用户的令牌吗?

我的一个Windows窗体应用程序有类似的工作流程 - 但是我将用户重定向到localhost - 我的WCF服务正在监听的位置并从中获取用户的访问令牌。