Facebook SDK - 无需身份验证即可通过ID访问公共相册

时间:2012-05-22 06:43:11

标签: asp.net facebook facebook-graph-api

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

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

显然,我的网站上的任何访问者(即使他没有Facebook帐户)也可以看到文章和图片,并且访问facebook和未经身份验证通过facebook oAuth访问它们。

以下是问题:

1)如何在album iduser id 未经身份验证的情况下获取公开相册所包含的照片? (我不知道,也许我应该使用除专辑ID和用户ID之外的其他参数)

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

2 个答案:

答案 0 :(得分:2)

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

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

并检索照片列表:

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

但是,如果没有身份验证并请求user_photos权限,您就无法阅读用户的相册(和照片)。

根据album文件:

  

要阅读您需要的相册

     
      
  • 任何有效的访问令牌,如果它是公开的并且属于Page
  •   
  • user_photos权限,如果它属于User
  •   
  • friend_photos权限,如果它属于User's朋友
  •   

因此,通常您只有两个选项来实现您想要的结果:

  1. 使用Facebook页面存储您要在网站上显示的所有Albums / Photos
  2. 使用您的个人帐户存储Albums / Photos

答案 1 :(得分:2)

没有访问令牌,你可以从图表api中获得很少的东西。 只需将浏览器定位到:http://graph.facebook.com/YOU_USER_ID即可自行尝试。

您还可以检查User object documentation中的字段/连接表,在权限列(第3个)中显示“无需access_token”,您可以获得令牌。

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

  1. 使用server-side authentication flow,获取长期访问令牌(60天),保存并在接下来的60天内使用它来从Facebook获取数据。 然后,当它过期时再次通过身份验证过程。 只有你需要经历它,而不是你的用户,而且每60天只需要一次。

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


  3. 修改

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

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

    1. 在Facebook内你转到你的画布应用程序
    2. Facebook将使用您的画布网址向iframe发布POST
    3. 在发布数据中,您将获得signed request,对其进行解码并检查是否具有访问令牌,如果是,请检查其何时到期。如果一切正常,那么保存该令牌并且auth进程结束,否则:
    4. 将用户重定向到oAuth dialog以及您需要的重定向网址和权限。
    5. 在您允许自己的应用程序后,您将被重定向到带有code参数的“recirect_uri”(在查询字符串中)。
    6. 针对Facebook服务器交换访问令牌的代码并保存令牌。
    7. 然后,您可以将自己重定向到画布应用程序或停在那里。
    8. 这应该是一个长期存在的访问令牌,你可以使用它60天。

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

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