我正在开发一个公共网站,我想要做的事情非常简单,但是我试图让一切正常运转。
我管理一个开放的Facebook群组,我想在我的网站上显示该群组的公开脸书活动。
我似乎无法弄清楚如何设置我的身份验证,以便我可以访问事件数据。以下是使用我的应用程序获取身份验证令牌的代码:
var fb = new FacebookClientWrapper();
dynamic result = fb.Get("oauth/access_token", new
{
client_id = AppSettings.AppID,
client_secret = AppSettings.AppSecret,
grant_type = "client_credentials"
});
fb.AccessToken = result.access_token;
我知道这样可以正常工作,因为我可以访问某些信息 - 例如,如果我通过其ID访问特定事件,我可以检索该信息。
当我尝试使用日期范围内的字段检索事件列表时,会出现问题:
[HttpGet]
public object GetEventDetails(string unixStartDateTime, string unixEndDateTime)
{
var parms = new Dictionary<string, object>();
parms.Add("fields", new[] { "id","name","description","start_time","venue" });
if (!String.IsNullOrEmpty(unixStartDateTime)) { parms.Add("since", unixStartDateTime); }
if (!String.IsNullOrEmpty(unixEndDateTime)) { parms.Add("until", unixEndDateTime); }
var eventsLink = String.Format(@"/{0}/events", AppSettings.GroupID);
return ObjectFactory.GetInstance<IFacebookClient>().Get(eventsLink,parms);
}
(我知道即使这确实成功了,返回值也不可序列化 - 我还没有关注它。)
此GET请求返回以下消息:
(OAuthException - #102) A user access token is required to request this resource.
所以消息很清楚:我需要一个用户访问令牌来获取我要求的数据。问题是 - 最好的方法是什么?我可以给我的申请一定的许可来阅读这些数据吗?我已经查看了应用程序可用的所有权限,但我没有看到可以执行此操作的权限。
我不想要求人们登录Facebook查看公共活动数据,我喜欢允许没有技术经验的人通过向群组发布Facebook活动来实质上更新网站内容的想法。现在,我必须复制他们做的任何事情。
我认为这种应用程序非常普遍,但无论我阅读或试过什么,我都能找到一个有效的例子。
答案 0 :(得分:1)
来自https://developers.facebook.com/docs/graph-api/reference/v2.0/group/events的文档,您需要
具有user_groups权限的组成员的用户访问令牌。
为避免麻烦,您可以通过Graph Explorer创建这样的Access Token,然后将其存储在您的应用程序中。请记住将访问令牌交换为长期存在(https://developers.facebook.com/docs/facebook-login/access-tokens/#extending),并且必须每隔60天更新一次访问令牌。