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

Facebook Graph API:将照片上载到特定相册,facebook,facebook-graph-api,facebook-opengraph,Facebook,Facebook Graph Api,Facebook Opengraph,我正在尝试将照片上传到经过身份验证的Facebook用户的特定相册。但是这张照片没有出现在相册中。它出现在名为“appname”照片的新相册中。我会尽可能完整地描述我的方式——也许这能帮助你找出我的错误 我没有使用任何Facebook或第三方SDK。项目编程语言是C#(如果有必要的话) 首先,通过将用户发送到以下URL,我将获得一个访问令牌: https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&

我正在尝试将照片上传到经过身份验证的Facebook用户的特定相册。但是这张照片没有出现在相册中。它出现在名为“appname”照片的新相册中。我会尽可能完整地描述我的方式——也许这能帮助你找出我的错误

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

首先,通过将用户发送到以下URL,我将获得一个访问令牌:

https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&response_type={2}&scope={3}
  • {0}:客户端ID:我的应用程序ID,由Facebook提供
  • {1} :重定向URI,设置为“”,因为我正在处理桌面应用程序
  • {2} :响应类型:“令牌”
  • {3} :范围-我请求的所有特权。这是以下项目的逗号分隔列表:
    • 管理页面
    • 电子邮件
    • 用户关于我
    • 用户照片
    • 用户视频
    • 发布行动
    • 发布流
    • 用户喜欢什么
    • 用户活动
    • 用户组
    • 照片上传
    • 视频上传
特权列表不仅仅用于照片上传

登录和它的实现工作得很好,因此我在答案中得到了一个“access\u token”和一个“expires\u 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}
https://graph.facebook.com/{0}/photos?access_token={1}
  • {0}从上面查询
  • {1} 访问令牌
同样,这也很好——我得到了请求的字段。“aid”值稍后用作相册ID,格式为99999999 9999999(中间带下划线的数字)。我只使用带有can_upload标志的“true”相册

现在,我希望我有发布照片所需的所有信息

我创建一个POST请求,多部分/表单数据,发送到此URL:

https://graph.facebook.com/fql?q={0}&access_token={1}
https://graph.facebook.com/{0}/photos?access_token={1}
  • {0}是9999999 99999相册ID
  • {1} 是来自登录名的访问令牌
请求包含两个字段:“源”包含照片的二进制数据,“消息”包含标题

请求成功。对我来说没问题

但当我现在访问Facebook用户页面时,这些照片不在所选相册中,而是在一个名为“appname”photos的额外相册中。标题设置正确

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

重定向URI,设置为 ''我在工作的时候 在桌面应用程序上

我不清楚在这种情况下您是如何获得用户的访问令牌的。在我看来,你似乎没有得到它,但相反,你正在使用你的应用程序的令牌-这就是为什么奇怪的专辑名称。您是否可以再次检查您是否确实使用了用户的令牌


我的一个windows窗体应用程序也有类似的工作流程,但我确实将用户重定向到本地主机,这就是我的WCF服务监听和获取用户访问令牌的地方。

帮助是而不是您在上传时应该使用的ID。这在Facebook文档中并不明显,但您应该使用object\u id列,因为这表示Graph API上的对象

因此,将FQL查询更改为:

SELECT object_id,can_upload,created,name,description FROM album WHERE owner={0}
对象id只是一个数字,而不是用下划线分隔的两个数字。因此,请将您的帖子发送到:

https://graph.facebook.com/{0}/photos?access_token={1}
  • {0}是9999999对象ID
  • {1} 是来自登录名的访问令牌
请注意,上传照片只需要用户的照片权限。但如果没有发布流权限,它们不会立即出现在用户的相册中-相反,当用户浏览相册时,他们会看到以下内容:

单击“批准”后,它们将出现在相册中。如果您的应用程序有发布流,那么它们将直接进入相册,用户无需批准它们


代码的其余部分应该是正确的。

对象ID是缺少的链接。现在它就像一个符咒。非常感谢。代币没问题。从桌面应用程序的角度来看,您正在观看嵌入式浏览器的导航事件。当它到达上面的URL时,解析添加到URL的令牌,就像页面内引用令牌
https://www.facebook.com/connect/login_success.html#access_token=12345ABCED....&expires_in=12345