在工作中是否有api order_by / sort参数?

时间:2012-03-01 17:23:49

标签: foursquare

如果是“order_by”& “sort”参数可以在api查询字符串中传递。

“order_by”应接受以下选项:距离|签到|名称

“sort”应该接受以下选项:asc |降序

匹配的结果集应该在将结果集缩小到返回的最大“50”结果之前应用order_by和sort参数。

这是在foursquare雷达上还是不会提供?

我们正在构建一个应用程序,让用户根据设备的地理位置找到离他们最近的“餐馆”。

我们遇到的问题是设置默认半径。我们首先将半径设置为3200米,希望这可以为稀疏位置返回一些结果,同时也为密集位置返回最接近的结果。

这适用于返回小于50的位置,因为我们可以对后期响应进行排序,但是在华盛顿特区等密集区域,当有超过50个结果时,api决定返回的50不是最接近的LL

因此,我们必须构建我们的查询,如下所示(这很糟糕,因为它需要最多7次点击到api)才能找到不到50个结果的“最佳点”。

这是我们在应用中遇到“靠近我”位置的问题。我们在尝试在应用中展示“热门”场地时遇到类似问题,但我会将其保存在另一个帖子中。

ob_start();
require_once 'includes/EpiCurl.php';
require_once 'includes/EpiFoursquare.php';
$clientId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$clientSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$fsObjUnAuth = new EpiFoursquare($clientId, $clientSecret);

$time_start2 = microtime(true);

$result = $fsObjUnAuth->get('/venues/search', array(
'categoryId' => '4d4b7105d754a06374d81259',
'limit' => '50',
'radius' => '100',
'intent' => 'checkin',
'll' => $ll,
'v' => '20120211'
));
$result_count1 = count($result->response->venues);

if ($result_count1 < 30) {

    $result = $fsObjUnAuth->get('/venues/search', array(
        'categoryId' => '4d4b7105d754a06374d81259',
        'limit' => '50',
        'radius' => '200',
        'intent' => 'checkin',
        'll' => $ll,
        'v' => '20120211'
        ));

    $result_count2 = count($result->response->venues);

    if ($result_count2 < 30) {

        $result = $fsObjUnAuth->get('/venues/search', array(
            'categoryId' => '4d4b7105d754a06374d81259',
            'limit' => '50',
            'radius' => '400',
            'intent' => 'checkin',
            'll' => $ll,
            'v' => '20120211'
            ));

        $result_count3 = count($result->response->venues);

        if ($result_count3 < 30) {

            $result = $fsObjUnAuth->get('/venues/search', array(
                'categoryId' => '4d4b7105d754a06374d81259',
                'limit' => '50',
                'radius' => '800',
                'intent' => 'checkin',
                'll' => $ll,
                'v' => '20120211'
                ));
            $result_count4 = count($result->response->venues);

            if ($result_count4 < 30) {

                $result = $fsObjUnAuth->get('/venues/search', array(
                    'categoryId' => '4d4b7105d754a06374d81259',
                    'limit' => '50',
                    'radius' => '1200',
                    'intent' => 'checkin',
                    'll' => $ll,
                    'v' => '20120211'
                    ));

                $result_count5 = count($result->response->venues);

                if ($result_count5 < 30) {                
                    $result = $fsObjUnAuth->get('/venues/search', array(
                        'categoryId' => '4d4b7105d754a06374d81259',
                        'limit' => '50',
                        'radius' => '1600',
                        'intent' => 'checkin',
                        'll' => $ll,
                        'v' => '20120211'
                        ));
                    $result_count6 = count($result->response->venues);

                    if ($result_count6 < 30) {

                        $result = $fsObjUnAuth->get('/venues/search', array(
                            'categoryId' => '4d4b7105d754a06374d81259',
                            'limit' => '50',
                            'radius' => '3200',
                            'intent' => 'checkin',
                            'll' => $ll,
                            'v' => '20120211'
                            ));
                        $result_count7 = count($result->response->venues);
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

没有计划提供这样的参数。在大多数情况下,这些参数仅对开发人员刮取区域中的所有场地非常有用,这违反了foursquare terms of service

提供了三种不同的“意图”,它们对应于需要不同类型排名的有效用例。

  • intent = checkin 会返回用户最多的场所列表 可能位于

  • intent = 浏览会返回a的最相关场地列表 要求的地区,不要偏离中心点的距离。

  • intent = 匹配会返回一个高可信度的结果 是基于查询的请求的相应foursquare场所