Было бы чрезвычайно полезно, если бы параметр "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);
}
}
}
}
}
}