2

我开发了一个 ASP.NET 网站。它将包含文本文章,其中一些将包含来自我的 Facebook 帐户的图片,超出文本。请注意,我将仅使用我帐户中的公开相册。

所以我创建了一个 sql 表并绑定了articles、 thealbums和 the photos(实际上IDs是所有这些)。我已经使用了facebook api sdk,它是一个很棒的库。

显然,我网站的任何访问者(即使他没有 facebook 帐户)都可以在不访问 facebook 且无需通过 facebook进行身份验证来访问它们的情况下查看文章和图片。oAuth

那么问题来了:

1)我如何获取公共相册包含的照片album iduser id 无论是否经过身份验证?(我不知道,也许我应该使用专辑ID和用户ID以外的其他参数)

2) 如何获取公开相册的属性(名称、id 等)?

4

2 回答 2

2

要检索用户相册列表,您需要向 Graph API 发出下一个 GET 请求:

https://graph.facebook.com/me/albums?access_token=...

并检索照片列表:

https://graph.facebook.com/ALBUM_ID?access_token=...

user_photos但是,未经身份验证和请求许可,您无法读取用户的相册(和照片) 。

根据album文档:

要阅读您需要的专辑

  • 任何有效的访问令牌(如果它是公开的并且属于页面)
  • user_photos属于用户的权限
  • friend_photos如果它属于用户的朋友的权限

所以通常你只有两种选择来达到你想要的结果:

  1. 使用 Facebook 页面存储您要在现场显示的 所有相册/照片
  2. 使用您的个人帐户存储相册/照片
于 2012-05-22T07:05:27.213 回答
2

如果没有访问令牌,您可以从图形 api 获得的信息很少。只需将您的浏览器引导至:http://graph.facebook.com/YOU_USER_ID.

您还可以检查User object documentation中的字段/连接表,其中在Permissions列(3rd)中显示“不需要 access_token”,您可以在没有令牌的情况下获得。

如果您想获取自己的其他数据并在您的网站上公开提供,您有两种选择:

  1. 使用服务器端身份验证流程,获取长期访问令牌(60 天),保存并在接下来的 60 天内使用它从 facebook 获取数据。然后,当它过期时,再次进行身份验证过程。只有你需要经历它,而不是你的用户,而且每 60 天只有一次。

  2. 自己登录,对您的应用进行身份验证,获取所有数据并将其保存在您的数据库中,然后将其呈现给您的用户。您需要每隔一段时间更新一次。


编辑

服务器端身份验证流程指南有一个用 php 编写的示例。这是一个简单的示例,并未涵盖所有场景,但它是一个好的开始。

我已经在 python 和 java 中实现了这一点,但它不是很容易共享的东西,因为它跨越多个请求和状态,所以我只描述我认为你应该使用的流程:

  1. 在 facebook 中,您可以访问您的画布应用程序
  2. Facebook 将使用您的画布 url 将 POST 放入 iframe
  3. 在发布数据中,您将获得一个签名的请求,对其进行解码并检查它是否具有访问令牌,如果有,请检查它何时过期。如果一切正常,请保存该令牌并且身份验证过程结束,否则:
  4. 将用户重定向到oAuth 对话框以及您的重定向 URL 和您需要的权限。
  5. 允许您自己的应用程序后,您将被重定向到带有代码参数(在查询字符串中)的“recirect_uri”。
  6. 针对 facebook 服务器交换访问令牌的代码并保存令牌。
  7. 然后,您可以将自己重定向到画布应用程序或停在那里。

这应该是一个长寿命的访问令牌,然后您可以使用 60 天。

至于将您的 fb 数据保存在您自己的数据库上,将数据保存在数据库上是一个非常简单的操作,这完全取决于您要保存的数据,您需要如何编码/使用它(json、xml、纯文本) )。

例如,假设您想要显示您自己的照片,然后在您获得令牌(如上所述)后,只需通过向以下位置发出 http 请求从您的服务器查询您的照片:https://graph.facebook.com/me/photos?access_token=XXXXXX。您应该得到一个 json 编码的结果,对其进行迭代并将每张图片保存为您的数据库中的记录。

于 2012-05-22T07:40:06.337 回答