public void GetResDetail(string resName, GetResDetailDel callBackEvent) { StartCoroutine(GetDetail(resName, callBackEvent)); }
IEnumerator GetDetail(string resName, GetResDetailDel callBackEvent) { Details d = null; if (resDetailDict.TryGetValue(resName, out d)) { if (!d.visited) // 如果這間餐廳還沒有向Google要過資料 { StringBuilder url = new StringBuilder(); url.Append("https://maps.googleapis.com/maps/api/place/details/json?placeid=") .Append(d.placeID).Append("&language=zh-TW&key=").Append(googlePlaceKey); #region ======= 取得餐廳的 Details ======= WWW www = new WWW(url.ToString()); yield return(www); JObject responce = JObject.Parse(www.text); #region ------------- 解析 Json ------------- // 是否永遠關閉 if (responce["result"]["permanently_closed"] != null) { d.permanentlyClosed = true; } // 取得地址 d.address = responce["result"].Value <string>("formatted_address"); if (d.address.Length > 0) { StringBuilder sb = new StringBuilder(); sb.Append(d.address[0]); //讓數字和中文字之間添加空白,避免一組數字被從中切開(ex. 631 -> 6 換行 31)。 for (int j = 1; j < d.address.Length; j++) { char c = d.address[j]; char pc = d.address[j - 1]; bool isNumber = char.IsNumber(c); bool wasNumber = char.IsNumber(pc); if (isNumber != wasNumber) { sb.Append(" "); } sb.Append(c); } d.address = sb.ToString(); } // 取得電話 d.phoneNum = responce["result"].Value <string>("formatted_phone_number"); // 取得營業時間 if (responce["result"]["opening_hours"] != null && responce["result"]["opening_hours"]["weekday_text"] != null) { JArray weekdayArray = (JArray)responce["result"]["opening_hours"]["weekday_text"]; for (int j = 0; j < weekdayArray.Count; j++) { d.openingHours.Add(weekdayArray[j].Value <string>()); } } // 取得是否營業中 if (responce["result"]["opening_hours"] != null && responce["result"]["opening_hours"]["open_now"] != null) { if (responce["result"]["opening_hours"]["open_now"].Value <bool>()) { d.openNow = 0; } else { d.openNow = 1; } } else { d.openNow = 2; } // 取得評價分數 d.rating = responce["result"].Value <float>("rating"); // 取得評價留言 JArray reviewArray = (JArray)responce["result"]["reviews"]; if (reviewArray != null) { for (int j = 0; j < reviewArray.Count; j++) { Reviews review = new Reviews(); JObject reviewJObject = (JObject)reviewArray[j]; review.name = reviewJObject.Value <string>("author_name"); review.rating = reviewJObject.Value <int>("rating"); review.text = reviewJObject.Value <string>("text") + "\n"; review.time = new DateTime(1970, 1, 1).AddSeconds(reviewJObject.Value <int>("time")); d.reviews.Add(review); } } #endregion ------------------------- #endregion ================================= d.visited = true; } } if (callBackEvent != null) { callBackEvent(d); } }