【问题标题】:access event by Facebook API通过 Facebook API 访问事件
【发布时间】:2014-01-21 13:47:48
【问题描述】:

我正在尝试获取有关我被邀请参加的活动的信息。 我在 Open Graph 页面中创建了具有所有可用权限的访问令牌并使用它。

我可以获取一个事件,但我看不到另一个事件,我很在意。我注意到该事件是“仅限邀请”,但它的设置超出了我的控制范围。

它没有显示在我的事件中/可能(当我单击“可能”时),当我尝试通过 ID(graph.facebook.com/id)访问它时,我收到错误消息“不支持的获取请求。 ”。

我试过了:

  • RestFB (Java) - 这是我的目的
  • PHP SDK
  • JavaScript SDK

除了使用 FQL,我还能做更多事情吗? 我读过它,我想使用简单的请求来获取事件,如本页所述:https://developers.facebook.com/docs/graph-api/reference/event/

如果有帮助,我可以附上代码。 非常感谢你看这个。

编辑: Java 代码:

FacebookClient facebookClient = new DefaultFacebookClient(MY_ACCESS_TOKEN);
    String attending = facebookClient.fetchObject("{event-id}/attending", String.class);
    System.out.println("Attending: " + attending);

它在一个事件上就像一个魅力,但在另一个事件上失败(返回空数据数组)(我被邀请参加两个)。

JavaScript 代码:

FB.api(
   'https://graph.facebook.com/{event-id}',
   'get',
   null,
   function(response) {
     if (!response) {
       alert('Error occurred.');
     } else if (response.error) {
       document.getElementById('result').innerHTML =
         'Error: ' + response.error.message;
     } else {
        alert('test');
        response['data'].forEach(function(entry) {
            alert(entry['object']['name']) ;
        });
     }
   }
);

不返回错误,但 response['data'] 数组为空,而在另一种情况下包含正确的数据。

编辑 2: 此外,我尝试使用 restFB 进行 FQL。它同样不起作用 - 以下代码仅返回一个事件,例如 http 请求。

FacebookClient facebookClient = new DefaultFacebookClient(MY_ACCESS_TOKEN);

    String query = "SELECT name, eid FROM event where eid = {event1-id} OR eid = {event2-id}";
    List<FqlUser> event = facebookClient.executeFqlQuery(query, FqlUser.class);

    System.out.println("Events: " + event);

【问题讨论】:

  • 请始终分享您的代码。这告诉我们你到目前为止所做的尝试。此外,这个地方到处都是极客(包括我),代码可以帮助我们更好地理解你的问题。
  • 为了确定,您想通过 API 接收的第二个事件,您是否被邀请参加(因为它是“仅限邀请”)?因为如果你不是,你只是没有权限“看到”它......
  • 我写道:“我都被邀请了”。是的,我仍然受邀参加。我可以以正常方式看到它。最后的结论很明显:)

标签: java javascript php facebook facebook-graph-api


【解决方案1】:

您可以为您提供(非拒绝)rsvp 反馈的所有事件编写 FQL 查询:

select eid, uid, rsvp_status from event_member where uid=me()

如果您想查看相应的事件数据,请使用:

select eid, name, description, start_time, venue, location, creator, host from event where eid in (select eid from event_member where uid=me())

请注意文档中有关事件表权限的内容:https://developers.facebook.com/docs/reference/fql/event/#permissions

您应该可以像这样通过 JS SDK 请求 FQL:

FB.api(
   'https://graph.facebook.com/fql?q=' + encodeURIComponent("select eid, name, description, start_time, venue, location, creator, host from event where eid in (select eid from event_member where uid=me())"),
   'get',
   ...);

【讨论】:

  • 我知道我能做到。但我写了一个问题:“除了使用 FQL”。
  • 对不起,我没有真正看到它......我更新了我的答案以显示如何通过 JS SDK 查询 FQL
  • 你测试过这段代码吗?我复制并粘贴它并得到错误:“错误:(#601)解析器错误:位置6处的意外'+'。”。当我将 + 更改为空格时,我得到“错误:(#601)解析器错误:查询意外结束。”。当我将查询更改为“从 eid =“{event-id}”的事件中选择 eid、名称、描述、开始时间、地点、位置、创建者、主机时(因为我知道我提到的 ID),我得到:“错误: 您的语句不可索引。WHERE 子句必须包含可索引列。在从developers.facebook.com/docs/reference/fql"链接的表中,此类列用 * 标记。
  • 直接粘贴到浏览器地址栏就可以了。要在 JS 中使用它,您首先需要对查询进行编码。我更新了答案,抱歉。
  • 它有效,但不返回我的事件之一 - 它返回我的事件数组,但最后一个与倒数第二个相同。当我尝试通过 eid = '{event-id}' 而不是 eid in (select eid from event_member where uid=me()) 结束您的查询来访问它时,我收到“错误:请求此资源需要访问令牌。” :(我已经厌倦了……
【解决方案2】:

现在似乎按预期工作。我认为这是 facebook 本身的一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2021-05-01
    • 2012-09-21
    相关资源
    最近更新 更多