簡體   English   中英

使用Yelp API從JSON響應獲取數據

[英]Getting data from json response using Yelp API

我有一個使用Yelp API使用緯度和經度獲得最接近點的10個結果的客戶端。 api查詢將類別的“列表”組合在一起,然后將其傳遞給Yelp中的查詢。

像這樣:

 $categories = [ 'pharmacy', 'hospitals', 'firedepartments', 'policedepartments', 'parks', 'restaurants', 'grocery' ];

 $list = join($categories, ",");

進行該調用時,Yelp似乎無法正確返回所有類別別名。 但是,當分別調用每個類別時,它確實返回類別別名的權利。

因此,當我使用foreach()語句循環分類時,如下所示:

    foreach($categories as $k=>$v){

      $resulted = yelp_search($v, $range, $lat, $lon, $num);
      $resulted = json_decode($resulted, true);
      $result[] = array_merge($result, $resulted);
    }

它將添加到$ result數組中。 但是問題在於,它只會將最后一個類別添加到列表中,例如在這種情況下為“食品雜貨”。 因此,當將javascript中的函數選擇為“最近”時,它將僅在地圖上和列表中顯示雜貨店圖標,而不顯示其返回的所有內容。

這是問題1,問題2是這個。 在顯示的列表中,由於將“類別”設置為與javascript中的函數“最接近”,因此我必須仔細檢查返回的json數據中的類別,並檢查其是否與列表中的某些內容匹配。

像這樣

                    for (var i = 0; i < count; i++) {
                  var b = results[category]['businesses'][i];

                  if(category == "closest"){

                      ccount = b.categories.length;

                      for(var m = 0; m < ccount; m++){
                        console.log(b.categories[m]['alias']);

                        var alias = cats.includes(b.categories[m]['alias']);

                        if(alias){

                            var c = b.categories[m]['alias'];
                            break;

                        }
                        else{
                            var c = results[category]['category_name'];
                        }
                      }



                  update = update + '<tr><td role="button" class="td_menu" data-category="' + c + '" data-index="' + i + '"><img style="height: 20px; padding-right: 5px;" src="<?php echo get_template_directory_uri(); ?>/images/' + c + '.png"><span style="vertical-align: top;">' + b.name + 
                '</span></td><td></td><td>' + (b.distance * 0.00062137).toFixed(2) + '</td><td>mi</td></tr>\n';               

                  }
                  else{

                  update = update + '<tr><td role="button" class="td_menu" data-category="' + category + '" data-index="' + i + '"><img style="height: 20px; padding-right: 5px;" src="<?php echo get_template_directory_uri(); ?>/images/' + category + '.png"><span style="vertical-align: top;">' + b.name + 
                '</span></td><td></td><td>' + (b.distance * 0.00062137).toFixed(2) + '</td><td>mi</td></tr>\n';                   


                  }



                }

所有這部分似乎都可以正常工作,因為它確實返回了正確的類別別名(又名食品雜貨店),並且列表中的圖標也確實顯示了。 我懷疑一旦我弄清楚如何解決問題#1,問題#2就會解決。

我需要一些指導。 我花了2天的時間來解決這個問題,並在列表中顯示適當的圖標,並獲取最接近的數據,以便它確實包含數據中的所有別名。

Yelp的答案還包含元數據,您不能僅將它們連接起來:您只想合並業務:

$result = array();
foreach($categories as $k=>$v){
  $resulted = yelp_search($v, $range, $lat, $lon, $num);
  $resulted = json_decode($resulted, true);

  if(array_key_exists('businesses', $result))
    $result['businesses'] = array_merge($result['businesses'], $resulted['businesses']);
  else
    $result = $resulted ;
}

請注意,元數據是錯誤的(例如, total ),也許您也需要對其進行更新。 Yelp總是返回最具體的關鍵字,因此即使使用“餐廳”,您也將擁有“ libanese”或“ pizza”而不是“ restaurants”。 如果需要此關鍵字來顯示標記,可以將其添加到列表中(如果尚未存在)。

Yelp API會返回您正在查看的位置的距離:收集完整個集合后,您可以按遞減的距離對整個數組進行排序:

usort($result['businesses'], function ($a, $b){
    return $a['distance'] - $b['distance'] ;
});

現在,您有了一個不同類別的企業列表,無論類別是什么,最接近的企業始終排在第一位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM