2012-03-01 16 views
5

Sẽ rất hữu ích nếu tham số "order_by" & "sắp xếp" có thể được chuyển trong chuỗi truy vấn api.Có thông số api order_by/sort trong các tác phẩm không?

"order_by" phải chấp nhận các tùy chọn sau: khoảng cách | checkins | tên

"sắp xếp" phải chấp nhận các tùy chọn sau: asc | desc

Tập hợp kết quả phù hợp phải có tham số order_by và sắp xếp được áp dụng trước khi thu hẹp tập hợp kết quả thành kết quả "50" tối đa được trả về.

Đây có phải là trên radar của thiết bị phát sóng hoặc là thứ gì đó sẽ không được cung cấp không?

Chúng tôi đang xây dựng một ứng dụng cho phép người dùng xác định vị trí "nhà hàng" gần nhất với họ dựa trên vị trí địa lý của thiết bị.

Vấn đề chúng tôi đang gặp phải là đặt bán kính mặc định. Chúng tôi bắt đầu bằng cách thiết lập bán kính đến 3200 mét, hy vọng rằng điều đó sẽ trả lại cho thuê một số kết quả cho các vị trí thưa thớt trong khi cũng trả lại kết quả gần nhất cho các vị trí dày đặc.

Tính năng này hoạt động cho các vị trí quay lại dưới 50 vì chúng tôi có thể sắp xếp phản hồi bài đăng, nhưng trong một khu vực dày đặc như Washington DC, khi có hơn 50 kết quả thì 50 mà api quyết định trả về KHÔNG phải là gần nhất các ll. Vì vậy chúng tôi phải cấu trúc truy vấn của chúng tôi như hình dưới đây (mà hút gây ra nó đòi hỏi tối đa 7 lượt truy cập vào api) để cố gắng tìm thấy rằng "điểm ngọt" chỉ dưới 50 kết quả.

Đây là vấn đề chúng tôi đang gặp phải đối với các vị trí "gần tôi" trong ứng dụng của chúng tôi. Chúng tôi có một vấn đề tương tự khi cố gắng hiển thị các địa điểm "phổ biến" trong ứng dụng, nhưng tôi sẽ lưu nó cho một bài đăng khác.

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); 
        } 
       } 
      } 
     } 
    } 
} 
+0

nên không phải là được yêu cầu trên một diễn đàn Foursquare? – rene

+0

Tôi cho rằng bạn đang đề cập đến/địa điểm/điểm cuối tìm kiếm cụ thể? hoặc tất cả các điểm cuối tìm kiếm? – akdotcom

+0

Có - Tôi chỉ đề cập đến/địa điểm/điểm cuối tìm kiếm –

Trả lời

1

Không có kế hoạch cung cấp các thông số như vậy. Đối với hầu hết các phần, các tham số này chỉ hữu ích cho các nhà phát triển có thể cạo tất cả các địa điểm trong một khu vực, vi phạm điều kiện là terms of service

Có ba "ý định" khác nhau được cung cấp tương ứng với các trường hợp sử dụng hợp lệ yêu cầu các loại xếp hạng khác nhau .

  • ý định = checkin trả về một danh sách các địa điểm nơi người dùng là nhất khả năng nằm

  • ý định = duyệt trả về một danh sách các địa điểm phù hợp nhất cho một khu vực yêu cầu, không thiên vị theo khoảng cách từ điểm trung tâm.

  • ý định = trận đấu trả về một kết quả duy nhất đó, với sự tự tin cao, là địa điểm tổ chức bốn ô vuông tương ứng cho các yêu cầu truy vấn dựa trên

+0

Tôi hiểu mối quan tâm của ai về việc ai đó đang cạo cơ sở dữ liệu, tuy nhiên, 50 kết quả tối đa, loại bỏ rất nhiều vấn đề đó đối với scraper bình thường. Tôi đã chỉnh sửa câu hỏi của mình ở trên để giải thích rõ hơn tình huống khó xử của tôi. –

+0

Bạn có thể đưa ra ví dụ trong đó các kết quả hàng đầu được trả lại đặc biệt xa với vĩ độ/lng được chỉ định không? intent = checkin phân tích mạnh kết quả dựa trên khoảng cách, do đó kết quả phải gần với lat/lng được chỉ định, trong khi cân bằng cho mức độ phổ biến của địa điểm (ví dụ: Nếu người dùng đang đứng bên cạnh một hot dog đứng bên ngoài một nhà hàng nổi tiếng, nhà hàng nổi tiếng sẽ được trả lại trước). Thứ hạng hiện tại có thể đo lường phù hợp hơn cho người dùng, đặc biệt khi thiết bị yêu cầu không có khóa chính xác trên vị trí chính xác của người dùng. – akdotcom

+0

Bắt đầu với 38.897758, -77.055286, là chính xác của 600 New Hampshire Ave NW, Washington, DC 20037 và cũng là địa chỉ chính xác của 3 địa điểm đã biết trong cơ sở dữ liệu của bạn. Nếu tôi đặt bán kính đến 100, các api thấy ít hơn 50 và tôi nhận được kết quả mong đợi: địa điểm/tìm kiếm ll = 38,897758, -77,055286 & bán kính = 100 & limit = 50 & categoryId = 4d4b7105d754a06374d81259 & ý định = checkin & v = 20.120.211 1. Cup'a Cup'a 2. Sông tại Watergate 3. 600 Nhà hàng tại Watergate –