【发布时间】:2013-04-28 15:17:39
【问题描述】:
一直在使用搜索 API,并在搜索结果中观察到一些奇怪的结果。
我知道今天有一场切尔西足球比赛,所以我快速搜索了与切尔西相关的所有赛事:
(使用 Graph API 资源管理器@https://developers.facebook.com/tools/explorer?)
search?q=Chelsea&limit=5000&type=event&since=2013-04-28&until=2013-04-29
返回
{
"data": [
{
"name": "Chelsea Jam Tree Comedy Competition Night",
"start_time": "2013-04-28T19:30:00+0100",
"timezone": "Europe/London",
"location": "The Jam Tree (Chelsea)",
"id": "201322573339969"
},
{
"name": "Chelsea Basham at Fly By Night Club",
"start_time": "2013-04-27T19:00:00",
"end_time": "2013-04-27T22:00:00",
"location": "Fremantle, WA, AU",
"id": "119017388296997"
},
{
"name": "The Chelsea & Alexis Show! with Special Friends",
"start_time": "2013-04-27T22:00:00-0400",
"timezone": "America/New_York",
"location": "Mark Fisher Fitness",
"id": "264038507064618"
}
],
"paging": {
"previous": "https://graph.facebook.com/search?q=Chelsea&limit=5000&since=1367173800&type=event&__paging_token=201322573339969",
"next": "https://graph.facebook.com/search?q=Chelsea&limit=5000&type=event&until=1367089200&__paging_token=119017388296997"
}
}
好吧,不完全是我想要的 - 也许该事件尚未添加/未公开。
但是 - 如果我搜索(注意 'Chelsea' 之前的 v)
search?q=v Chelsea&limit=5000&type=event&since=2013-04-28&until=2013-04-29
然后瞧 - 显示足球比赛。
{
"data": [
{
"name": "Man United v Chelsea",
"start_time": "2013-04-28T16:00:00+0100",
"timezone": "Europe/London",
"location": "The Rising Sun, Hazel Grove",
"id": "518842844847325"
},
{
"name": "FOOTBALL, Chelsea V Swansea City",
"start_time": "2013-04-28T15:00:00+0100",
"timezone": "Europe/London",
"location": "White Hart, Barnby Dun",
"id": "590753400942611"
},
{
"name": "Chelsea V Swansea City",
"start_time": "2013-04-28T15:00:00+0100",
"timezone": "Europe/London",
"location": "Lizard Lounge - South Woodford",
"id": "281525378649440"
},
{
"name": "Chelsea FC v Swansea",
"start_time": "2013-04-28T10:00:00-0400",
"end_time": "2013-04-28T12:00:00-0400",
"timezone": "America/Toronto",
"location": "Scallywags",
"id": "516466885084282"
},
{
"name": "Chelsea v Swansea",
"start_time": "2013-04-28T15:00:00+0100",
"timezone": "Europe/London",
"location": "Stamford Bridge",
"id": "152203718287492"
},
{
"name": "Chelsea v Swansea",
"start_time": "2013-04-28T19:00:00+0500",
"timezone": "Asia/Baku",
"location": "Stamford bridge, Fulham road, Лондон",
"id": "649119368438501"
},
{
"name": "Chelsea v Swansea",
"start_time": "2013-04-28T09:30:00-0400",
"end_time": "2013-04-28T12:30:00-0400",
"timezone": "America/New_York",
"location": "Ireland's Four Courts",
"id": "404696952971017"
}
],
"paging": {
"previous": "https://graph.facebook.com/search?q=v Chelsea&limit=5000&since=1367161200&type=event&__paging_token=518842844847325",
"next": "https://graph.facebook.com/search?q=v Chelsea&limit=5000&type=event&until=1367155800&__paging_token=404696952971017"
}
}
那么是 API 有问题,还是我做错了什么?
谢谢
【问题讨论】:
-
不,这是预期行为。想象一下有多少赛事有切尔西参加。使用像
v chelsea这样更具体的查询是正确的方法。 API 不是读心器,它无法确定您希望从“Chelsea”获得足球比赛的方式,但“V Chelsea”很可能会因为“对战”短语而提出足球赛事 -
如果我要求 API 返回标题中带有“Chelsea”的所有事件,作为我期望返回的 API 使用者(文档中并没有明确说明)。结果中的分页将有助于服务器负载。您对谷歌搜索的解释意味着搜索将在第 10 页之后停止。感谢您的回答,但也有任何证据支持“不,这是预期的行为。”?
-
所以它会在第 10 页左右开始返回您想要的结果,我猜?我不明白你为什么认为这是错误的行为。为什么你认为结果是错误的?您想要的那些活动(我检查了其中的 2 个)并不是特别“受欢迎”或参加人数众多的活动,那么为什么 Facebook 应该通过具有相同“受欢迎程度”的
The Chelsea & Alexis Show! with Special Friends返回切尔西足球比赛活动。此外,除了大量的 Graph API 经验外,没有任何证据。 -
而且,即使它们是“流行”事件,FB 在搜索 Query Term 时提供的先例远远多于流行度的权重。所以基本上我要问的是:你为什么假设 Facebook 会自动将搜索词“切尔西”与足球队联系起来?如果你搜索
San Francisco,为什么 Facebook 会假设你在谈论巨人队?明白我的意思了吗? -
不,我只是强调一个事实,即其他关键字搜索引擎往往会给出比查询字符串上的绝对匹配更多的结果。即便如此,我也希望“切尔西 V 斯旺西城”会回来寻找“切尔西”! eid:152203718287492 有 2005 人参加,但仍未进入结果列表。如果我搜索 San Francisco,我不会期望 Giants 会被返回。但是“Chelsea v Swansea”在其中包含关键字“Chelsea”,并且是第一个词。 q=Chelsea 肯定会回归吗?
标签: json facebook http facebook-graph-api