过去两年中特定地点的所有Facebook活动列表

时间:2014-01-22 15:02:28

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

我想做什么

我正在尝试提取2012年和2013年在特定城市中发生的所有公共 facebook事件的列表。此外,对于每个事件,我想提取以下内容:

  • 活动名称
  • 事件描述
  • 日期
  • 位置
  • 参加/可能/拒绝的人数

到目前为止我尝试了什么

我一直在图浏览器中尝试以下查询

search?q={Oslo}& [type={event}](#searchtypes)

我现在忽略了日期范围限制。我想我以后可以解决这个问题。

问题

这是列出状态更新(故事),地点和其他所有内容,并将其作为JSON对象返回。但是,这不会提供我所需的所有数据字段。有什么想法吗?

旁注

我试过调查FQL但显然不能像这样搜索? (如果可以,请随时提供帮助)。我得到的最接近的是:

SELECT eid FROM event_member WHERE uid IN 
(SELECT page_id FROM place WHERE  
 distance(latitude, longitude, "37.76", "-122.427") < 1000)

但这只会给我以后的活动。也许如果它允许我过去看过去?

2 个答案:

答案 0 :(得分:4)

只能通过Graph Search API搜索未链接到的公共对象(无参与,无邀请),而不能使用Graph API或FQL。

目前,this is the only documentation for Graph Search。您将看到此API没有提供太多可能性,因此如果您想实现目标,则必须将某些内容拼凑在一起。没有任何直接的方法可以做到这一点。

如果我们收集关于事件的内容,这几乎就是我们所拥有的一切:

  

搜索类型

     

活动:https://graph.facebook.com/search?q=conference&type=event

     

字段

     

您可以使用。限制这些搜索返回的字段   ?fields = URL参数,与读取其他参数时的方式相同   对象。例如,要仅获取事件的名称,您可以执行此操作   以下内容:

     

活动名称:   https://graph.facebook.com/search?fields=name&q=conference&type=event

     

时间

     

在用户的新闻Feed上搜索公开信息或帖子时,您   可以使用since,until和limit来翻页结果   参数。从而且直到两者都接受unix时间戳。分页时   回到过去,你应该使用,直到与限制在哪里   until是最后一个created_time字段的unixtime值   您之前的查询返回的对象。及时向前翻页时   你应该设置,因为它是created_time的unixtime值   上一个查询返回的第一个对象中的字段。请   请注意,您只能在新闻Feed中搜索大约1至2周。

接下来要知道的是,结果集由其中一个字段包含您要查找的字符串的事件组成(q=Oslo)。因此,“奥斯陆”可能出现在消息中,在描述中,在位置字段中的运气以及在时区字段中的不幸中。

然后,您必须“手动”过滤掉结果。您可能只搜索包含“Oslo”的事件,然后检查该位置是否确实包含“Oslo。或者如果您很容易想要查找具有特定位置的事件,我建议您搜索格式为"City, Country"的字符串,因为这就是Facebook格式化城市的方式。所以你可能会这样做:

search?fields=location&q="Oslo, Norway"&type=event&since=1356994800

从那时起,1356994800是unixtime,你想要检索事件。

可能的结果:

{
  "data": [
    {
      "location": "Oslo, Norway", 
      "id": "211893915563330", 
      "start_time": "2022-02-08T00:00:00"
    }, 
    {
      "location": "Lillestrøm, Norway", 
      "id": "641379122561097", 
      "start_time": "2015-09-06T09:00:00+0200"
    }, 
    {
      "location": "Oslo, Norway", 
      "id": "1434492323451716", 
      "start_time": "2014-11-06T20:45:00+0100"
    }, 
    {
      "location": "Oslo, Norway", 
      "id": "563423357073321", 
      "start_time": "2014-09-20"
    }, 

    ...

    {
      "location": "Oslo, Norway", 
      "id": "628230923890648", 
      "start_time": "2013-01-16T19:00:00+0100"
    }
  ],
}

然后,也许使用Google Maps API查看找到的位置是否确实靠近奥斯陆。即“Lillestrøm,挪威”非常接近它。

答案 1 :(得分:2)

看起来FQL可以为您提供所需的结果。 此FQL(这是您开始的扩展)将向您显示2012年至2013年之间的所有活动以及您想要的活动数据:

select 
    eid, 
    name, 
    description, 
    location, 
    all_members_count, 
    attending_count, 
    unsure_count, 
    not_replied_count, 
    declined_count, 
    start_time, 
    end_time,
    venue 
from 
    event 
where     
    eid in 
    (
        select 
            eid, 
            start_time 
        from 
            event_member 
        where 
            uid in 
            (
                select 
                    page_id 
                from 
                    place 
                where 
                    distance(latitude, longitude, "37.76", "-122.427") < 1000
            ) and 
            start_time > "2012-01-01"
    ) and 
    end_time < "2013-01-01" and 
    end_time <> 'null' 

这就是我运行此查询的结果之一:

{
  "eid": 170775033066718, 
  "name": "Lavender Diamond at The Chapel - Dec 11", 
  "description": "Get tickets: http://ticketf.ly/SUb4w9\nDetails: http://www.thechapelsf.com/event/184715/\n\nVERY SPECIAL GUEST WILL BE ANNOUNCED DAY OF SHOW", 
  "location": "The Chapel", 
  "all_members_count": 92, 
  "attending_count": 30, 
  "unsure_count": 3, 
  "not_replied_count": 59, 
  "declined_count": 4, 
  "start_time": "2012-12-11T20:00:00", 
  "end_time": "2012-12-12T00:00:00", 
  "venue": {
    "street": "", 
    "city": "", 
    "state": "", 
    "country": "", 
    "latitude": 37.760503799154, 
    "longitude": -122.42123452518, 
    "id": 113634312122520
  }
}