【问题标题】:FQL: search events from their venue fieldFQL:从他们的场地字段搜索事件
【发布时间】:2012-07-14 02:48:26
【问题描述】:

我正在开发一个通过 FQL 从 facebook 页面检索事件的应用程序。 有时这些页面的所有者不会从页面配置文件中创建这些事件,而是从他们自己的配置文件中创建这些事件,并且只是将事件链接到页面作为字段地点(因为我正在寻找的页面是公共场所)

是否有可能通过 FQL 或任何其他方式获取所有以特定 Facebook 页面 ID 作为场地的活动 ID??

现在,只有当页面所有者使用以下代码通过页面配置文件插入事件时,我才能获取所有事件:

$fql    =   "SELECT eid, creator, name, pic, timezone, start_time, end_time, location, description 
            FROM event WHERE eid IN ( SELECT eid FROM event_member WHERE uid IN  ($clubsstring) )
            AND start_time > $today
            AND start_time < $nextweek
            ORDER BY start_time asc";

$param  =   array(
    'method'    => 'fql.query',
    'query'     => $fql,
    'callback'  => ''
);

$fqlResult   =   $facebook->api($param);

谢谢 卢卡

【问题讨论】:

  • 如何获取页面事件?你能分享你的 fql 查询吗?
  • @NitzanTomer 我用代码更新了问题

标签: facebook events facebook-graph-api facebook-fql


【解决方案1】:

嗯,您确实可以根据场所进行搜索,但这只能是次要条件,因为场所字段不可索引。

这意味着您首先必须根据 eid(Event 表中唯一的可索引字段)进行搜索,然后根据地点过滤这些结果。

问题是场地字段是一个数组,其中的字段并不总是存在,例如一个事件可能有这个作为场地:

"venue": {
    "id": VENUE_ID
}

但另一个会有:

"venue": {
    "street": "", 
    "city": "", 
    "state": "", 
    "country": ""
}

你应该能够得到你想要的东西:

SELECT eid, creator, name, pic, timezone, start_time, end_time, location, description 
FROM event
WHERE 
    ((eid IN (SELECT eid FROM event_member WHERE uid IN ($clubsstring)))
    OR
    (eid IN (SELECT eid FROM event_member WHERE uid IN (OWNERS_IDS_STRING)))
    AND
    venue.id IN (VENUE_IDS_STRING))
    AND start_time > $today
    AND start_time < $nextweek
    ORDER BY start_time asc;

我没有测试过这个查询,你可能需要稍微修改一下才能工作,你也可以使用除id之外的其他场地字段。

希望这会有所帮助。

【讨论】:

  • 对,您只是在确认我对事件 FQL 表的看法,但也许可以从其他表或其他方式检索所有这些设置为场所的地方的开斋节事件。
  • 我为您提供的解决方案与您的需求不符?根据我从你的问题中了解到的应该足够了。
  • 我的坏 Nitzan,您的解决方案完美运行。但即使事件是从其他用户创建的,它也必须工作。不过你是对的,我只对页面的所有者做了这个例子,对不起。
  • 在我的示例中,您只需在 OWNERS_IDS_STRING 中放置一个用户 ID 列表。
  • 但我不认识那些用户。事实上,我希望能够找到特定页面是创建者或场地的事件
【解决方案2】:

我用这个,它目前正在工作。

{"eventos":"SELECT start_time, end_time, name, eid, pic,venue.id, location, creator, description 
FROM event WHERE eid IN  (SELECT eid FROM event_member WHERE uid IN (  SELECT uid2 FROM friend WHERE uid1=me() LIMIT 150) 
 OR uid = me() AND rsvp_status = 'attending') AND venue.id <>'' 
 AND location <> '' AND location <> '#data'","lugares":"SELECT latitude,longitude  
 FROM place WHERE page_id IN (SELECT venue.id FROM #eventos)"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多