使用Graph FQL获取朋友当前位置的纬度/经度

时间:2012-01-13 05:57:21

标签: facebook facebook-fql

我正在尝试使用单个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纬度/经度。但是,出于性能原因,如果可能的话,我只想运行一个多查询。

3 个答案:

答案 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而您甚至不需要第二个