javascript - 纯粹通过 JavaScript SDK 为所有用户获取 Facebook 页面事件,包括那些未登录 Facebook 的用户

标签 javascript facebook events authentication access-token

我正在努力在我的网站上添加发布到 Facebook 页面的事件列表。问题是我试图找到一种纯粹的客户端 JavaScript 方法来实现这一点。我无法使用 PHP。我也许可以使用 ASP.NET,但我因 Facebook C# SDK 严重缺乏文档而苦苦挣扎。然而,我在 JavaScript 中几乎完美地实现了我想要做的事情:

(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=MY_APP_ID";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

$(document).ready(function(){

FB.init({ 
    appId: 'MY_APP_ID',cookie: true,xfbml: true,status: true });
    var token;
    FB.getLoginStatus(function (response) {
        if (response.authResponse) {
        token = response.authResponse.accessToken;

        // Get and parse list of upcoming events
        $.getJSON("https://graph.facebook.com/mypagename/events?access_token="+token+"&callback=?",function(json){
            for (item in json.data) {
                $("#eventsFromFacebook").append('<h3><a href="https://www.facebook.com/events/' +json.data[item].id +'/">' +json.data[item].name + '</a></h3>');
                $("#eventsFromFacebook").append('<strong>' +json.data[item].start_time +'</strong>');
                getItemDescription(json.data[item].id);     
                $("#eventsFromFacebook").append("<div id='event"+json.data[item].id+"'></div>");
            }
        });

        // Get and parse event descriptions. This is a separate call for each event.
        function getItemDescription(id) {
            $.getJSON("https://graph.facebook.com/"+id+"?access_token="+token+"&callback=?",function(jsonItem) {
            $("#event"+id).html('<p>' +jsonItem.description+'</p>');
            });
        }

        } else {
            // not logged in
            $("#eventsFromFacebook").append("Not getting access to Facebook :(");
        }
    });
});

(这需要 FB JS SDK、jQuery 和以下 HTML:)

<div id="eventsFromFacebook"></div>

事实上,在我使用连接到应用程序和页面的帐户登录 Facebook 的情况下,此代码成功提取了我管理的特定页面上发布的事件并将它们发布到我的网站上。但是,如果我没有以已通过应用程序身份验证的身份登录,我将无法获得执行此操作的正确访问权限。

是否有一种纯粹的 JavaScript 方法可以让我在未登录时获取从页面获取事件信息所需的访问 token ??我不想要求用户在我的网站上使用我的应用程序进行身份验证才能查看信息。理想情况下,我希望他们能够在不登录任何 Facebook 帐户的情况下查看事件列表。这可能吗?

如果这是不可能的,作为后备选项,是否有办法允许喜欢该页面(无需通过应用程序进行身份验证)的用户至少看到事件?这样,至少我可以在有人未登录 Facebook 的情况下抛出一个指向我的 Facebook 页面的链接(或者激励他们喜欢该页面)。

谢谢。

最佳答案

Is there a purely JavaScript way to allow me to get the access token I need to get event information from a Page when I am not logged in? I don't want to require users to authenticate with my App on my website to be able to see the information. Ideally, I would like them to be able to see the events list without being logged into any Facebook account. Is this possible?

是的,这是可能的,但不建议这样做,因为您将公开页面访问 token 客户端。

您要做的就是首先获取管理员用户的用户访问 token 。然后将其扩展到60天品种。然后 HTTP 访问 me/accounts/PAGEID?fields=access_token&access_token=60DayUserAccessToken 并获取该访问 token (应该是 60 天的版本,如果不是,请调用延长它)。使用此访问 token 客户端(哎呀!不好暴露这个!!)使用 me/events?access_token=60DayPageAccessToken 来获取页面的事件。然后每隔 59 天左右,您将必须生成一个新的 60 天访问 token 以包含在您的 JavaScript 中(请不要这样做,因为暴露您的访问 token 真的很糟糕)。

关于javascript - 纯粹通过 JavaScript SDK 为所有用户获取 Facebook 页面事件,包括那些未登录 Facebook 的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9590417/

相关文章:

C# 事件分发

javascript - JSON连接数据之间如何进行操作?

javascript - 弹窗定位

plugins - jQuery 延迟加载是否有任何真正的性能提升?

javascript - 旋转 SVG 文本元素的内容

ios - Instagram WebView 阻止 FB 登录

facebook - 验证 Facebook 应用程序 ID 和应用程序 key

ios - 当我按下登录 Facebook 按钮时,我的应用程序总是要求我打开 TuneIn Radio?

wpf - 什么是 WPF 预览事件?

ios - 当整数的值改变时触发一个 Action