Есть ли параметр api order_by / sort в работах? - PullRequest
5 голосов
/ 01 марта 2012

Было бы чрезвычайно полезно, если бы параметр "order_by" и "sort" мог быть передан в строку запроса API.

"order_by" должен принимать следующие параметры: distance |checkins |name

"sort" должен принимать следующие параметры: asc |desc

Совпадающий набор результатов должен иметь параметры order_by и sort, применяемые до сужения набора результатов до макс. 50 результатов, которые возвращаются.

Это на радаре четырехугольной формы илиэто что-то, что не будет предлагаться?

Мы создаем приложение, которое позволяет пользователям определять местоположение ближайших к ним «ресторанов» на основе геолокации устройства.

Проблема, с которой мы сталкиваемся, заключается в настройкерадиус по умолчанию.Мы начали с установки радиуса 3200 метров, надеясь, что это даст в аренду некоторые результаты для разреженных местоположений, а также вернет самые близкие результаты для плотных местоположений.

Это работает для местоположений, которые возвращают меньше 50, потому что мы можемсортировать пост-ответ, но в плотной области, такой как Вашингтон, округ Колумбия, когда более 50 результатов, 50, которые API-интерфейс решает вернуть, НЕ являются ближайшими к 11.

Поэтому мы должны структурировать наш запроскак показано ниже (что отстой, потому что требуется до 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 Ответ

1 голос
/ 02 марта 2012

Нет планов предлагать такие параметры.По большей части эти параметры полезны только для разработчиков, которые очищают все объекты в регионе, что является нарушением условий обслуживания * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *соответствуют действительным вариантам использования, требующим различных типов ранжирования.

  • intent = checkin возвращает список мест, где пользователь, скорее всего, находится

  • intent = browse возвращает список наиболее подходящих мест для запрошенного региона, без смещения по расстоянию от центральной точки.

  • intent= match возвращает одиночный результат, который с высокой степенью достоверности является соответствующим четырехугольным местом для запроса на основе запроса

...