我正在尝试使用单个API调用获取所有用户朋友的纬度/经度。我相信我需要编写一个多查询FQL语句,但我无法正确理解语法。
我认为这两个查询需要如下所示:
'"friends":"SELECT uid,current_location FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())"'
'"location":"SELECT location FROM page WHERE id IN (SELECT current_location_id FROM #friends)"';
我的问题是,我需要在第一个查询中获取current_location的ID,以便我可以在第二个查询中引用它,但我只知道如何获取包含id的数组。
感谢您的帮助!
澄清:
我不想让朋友办理登机手续。相反,我想在Geo地图上绘制所有用户朋友的“current_location”(即他们居住的地方)。我可以通过以下FQL查询获得用户的“current_location”:
"SELECT uid,sex,current_location FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())"
此查询返回以下数组:
[current_location] => Array
(
[city] => New York
[state] => New York
[country] => United States
[zip] =>
[id] => 108424279189115
[name] => New York, New York
)
其中不包含current_location的经度和纬度(上例中的纽约)
因此我现在需要获取current_location的ID(例如108424279189115)并运行第二个FQL查询,例如:
"SELECT location,name FROM page WHERE page_id = 108424279189115)"
获取current_location的纬度和经度。目前,我有一个运行第一个FQL查询的工作代码,然后在php中提取page_id,然后运行第二个FQL查询以获取current_location纬度/经度。但是,出于性能原因,如果可能的话,我只想运行一个多查询。
答案 0 :(得分:2)
编辑:
查询应该通过将第二个查询调整为:
来工作'"location":"SELECT location FROM page WHERE id IN (SELECT current_location.id FROM #friends)"';
在FB API中使用数组类型时,您可以通过执行array.value来访问任何查询中的值
此外,如果你只需要页面的id,你可能会通过在第一个查询中执行current_location.id来获得更好的性能
您将要使用fql.multiquery,这里有一个类似的答案可以根据您的需求量身定制:Facebook Graph API get all users and their status
有关multiquery的FQL文档位于:http://developers.facebook.com/docs/reference/fql/
你还试图获得一个签到对象的纬度/长度吗?如果是这样,您需要查看此资源:http://developers.facebook.com/docs/reference/fql/checkin/
编辑:
我不确定你想做什么是可能的。我只是浏览了api并测试了一些查询,你可以从朋友那里获得lat / long的唯一方法似乎是基于签到,从那里你可以在必要时获得页面上的详细信息...甚至看着你第二个查询,current_location_id不会在页面表中的任何位置引用,并且从页面表中选择位置将为您提供与其相关的位置的位置信息。也许你可以详细说明你想要完成的事情。
这是我在PHP中使用FQL编写的多个查询语句(它将选择所有朋友的签名,然后从那里获取有关该朋友的签到地点的详细信息):
try{
$multiQuery = "{
'query1':'SELECT coords, tagged_uids, page_id FROM checkin WHERE author_uid IN (SELECT uid2 FROM friend WHERE uid1 = me())',
'query2':'SELECT name, description FROM page WHERE page_id IN (SELECT page_id FROM #query1)'
}";
$param = array(
'method' => 'fql.multiquery',
'queries' => $multiQuery,
'callback' => ''
);
$queryresults = $facebook->api($param);
print_r($queryresults);
}
catch(Exception $o){
print_r($o);
}
答案 1 :(得分:2)
fql?q=SELECT location,name FROM page WHERE page_id in (SELECT current_location.id from user where uid in(select uid2 from friend where uid1=me()))
这将为你带来魔力
答案 2 :(得分:1)
facebook.batch_fql({
'query1': "SELECT uid, name, current_location.id FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me())",
'query2': "SELECT page_id, name, description, location FROM page WHERE page_id IN (SELECT current_location.id FROM #query1)"
})
将返回两个回复
一个将是朋友UID,名称及其当前位置ID的列表
另一个将是唯一的位置ID列表及其名称,描述和地理位置信息
编辑:如果您使用FQL查询current_location,您将在第一个响应中获得完整的latlong而您甚至不需要第二个