2012-05-22 143 views
1

我开发了一个ASP.NET网站。它将包含文本文章,其中一些将包含我的Facebook帐户上方和超出文本的图片。请注意,我只会使用我帐户中的公开相册。Facebook SDK - 通过身份验证访问公共相册,无需身份验证

所以我创建了一个SQL表和绑定的articles,该albumsphotos(所有的人都在事实上IDs)。我已经使用facebook api sdk这是一个伟大的图书馆。

显然,我的网站的任何访问者(即使他没有一个Facebook帐户)mignt能够通过Facebook oAuth看到的文章和图片 withount访问Facebook和没有认证访问它们。

那么这里的问题:

1)我如何获得一个公开相册包含照片通过album iduser id无需验证? (我不知道,也许我应该使用除专辑ID和用户ID之外的其他参数)

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

回答

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. 自己登录,根据您的应用程序进行身份验证,获取所有数据并将其保存在数据库中,然后将其呈现给用户。 您需要每隔一段时间更新一次。


编辑

服务器侧认证流动引导件具有写入在PHP的例子。 这是一个简单的例子,并没有涵盖所有的场景,但这是一个很好的开始。

我在Python和Java实现这一点,但因为它涵盖了多个请求,并指出这不是一件很容易被共享的,所以我只是描述我认为你应该使用流程:

  1. 里面Facebook你去你的画布应用
  2. Facebook将进行POST到iframe与你的画布网址
  3. 在后的数据,你会得到一个signed request,对其进行解码,并检查它是否有一个访问令牌,如果所以检查它何时到期。如果一切顺利,保存该令牌并且验证过程结束,否则:
  4. 将用户重定向到oAuth dialog以及您需要的重定向url和权限。
  5. 当你允许你自己的应用程序后,你将被重定向到代码参数(在查询字符串中)的“recirect_uri”。
  6. 将访问令牌的代码与Facebook服务器交换并保存令牌。
  7. 然后,您可以将自己重定向到画布应用程序或停在那里。

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

至于把你的fb数据保存在你自己的数据库中,把数据保存在数据库中是一个非常简单的操作,这一切都取决于你想要保存的数据,你需要如何编码/使用它(json, XML,纯文本)。

例如,假设您想要显示自己的照片,那么在获取令牌后(如上所述),只需通过向您的服务器查询您的照片,即可发出http请求至:https://graph.facebook.com/me/photos?access_token=XXXXXX。 你应该得到一个json编码的结果,遍历它并将每张图片保存为你的db上的一条记录。

+0

你有一个例子如何在asp.net中做到这一点? – Alexandre

+0

我根本不使用.net,但你指的是哪一部分?服务器端认证还是数据的持久性? –

+0

两者。所以你可以用你使用的语言举个例子。没关系。 – Alexandre

1

检索用户的相册列表中,您需要发出下一个GET请求图形API:

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

,并检索照片列表:

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

但是你不能读取用户的相册(和照片)没有身份验证,并要求user_photos权限。

根据album文档:

要读取的相册,你需要

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

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

  1. 使用Facebook页面来存储所有要显示在现场Albums/Photos
  2. 使用您的个人帐户储存Albums/Photos
+0

我想我要使用Facebook页面来存储相册。你能告诉我如何通过它的ID获得一张专辑(只有一张)?和一个照片(也只有一个)通过它的ID? – Alexandre

+0

还有一件事。要阅读属于我的相册(作为用户),我必须进行身份验证,但是我应该怎么做才能避免访问者必须通过身份验证才能看到相册和照片? – Alexandre

+1

@Alex,你可以通过'id'访问每个对象(Album/Photo/User/Page/etc),只需使用'https:// graph.facebook.com/OBJECT_ID',这将返回与该对象相关的数据阅读Graph API文档,了解更多关于不同对象的数据信息)。 –