Некоторое время назад я заметил проблему с возвратом отзывов при использовании Google Places API.
Действительно, для предприятий, имеющих местоположение, он работает без проблем.
Когда я использую идентификатор места компании, у которой нет местоположения, но есть зоны обслуживания, он больше не работает.
После нескольких анализов я замечаю, что при использовании console.log на " google.maps. place.PlacesServiceStatus", он возвращает" NOT FOUND"для предприятий без местоположения. И все же они существуют.
Вот мой код на Codepen с двумя идентификаторами мест. Первый имеет местоположение и работает, другой имеет зоны обслуживания и не работает.
window.addEventListener("load", function() {
//////////////////////////////////////////////
// ┌──────────────────────────────────────┐ //
// │ Google Place │ //
// │ Based on Google-Place.js │ //
// └──────────────────────────────────────┘ //
//////////////////////////////////////////////
var parameters = {
selector : '#google-reviews',
min_rating : 1,
id : 'ChIJ4wzGc-h7wUcR3ncdI5-EELg' // (GMB ("FirewooD") with specified location) => Work, it return 5 last reviews
// id : 'ChIJsWBxIXYhwkcRtbHQpK2MnNc' // (GMB ("MD Jardins") without location but with service areas) => Doesn't work
}
// ─────────────────────────────────────── //
var initialize_place = function(c){
var request = {
placeId: parameters.id
};
var map = new google.maps.Map(document.getElementById('map-plug')),
service = new google.maps.places.PlacesService(map);
service.getDetails(request, function(place, status) {
console.log("status: " + status);
if (status == google.maps.places.PlacesServiceStatus.OK) {
c(place.reviews);
}
});
} // end initialize_place()
var sort_by_date = function(ray) {
ray.sort(function(a, b){
var keyA = new Date(a.time),
keyB = new Date(b.time);
// Compare the 2 dates
if(keyA < keyB) return 1;
if(keyA > keyB) return -1;
return 0;
});
return ray;
} // end sort_by_date()
var filter_minimum_rating = function(reviews){
for (var i = reviews.length -1; i >= 0; i--) {
if(reviews[i].rating < parameters.min_rating){
reviews.splice(i,1);
}
}
return reviews;
} // end filter_minimum_rating()
var renderRating = function(rating){
var html = "",
star = renderAverageStars(rating);
html = "<div class='average-rating'><h4>"+star+"</h4></div>";
} // end renderRating()
var shorten_name = function(name) {
if (name.split(" ").length > 1) {
var xname = "";
xname = name.split(" ");
return xname[0] + " " + xname[1][0] + ".";
}
} // end shorten_name()
var renderReviews = function(reviews){
reviews = sort_by_date(reviews);
reviews = filter_minimum_rating(reviews);
console.log(reviews);
var html = "",
row_count = (5 > 0)? 5 - 1 : reviews.length - 1;
for (var i = 0; reviews.length > i; i++) {
var stars = renderStars(reviews[i].rating),
date = convertTime(reviews[i].time),
name = reviews[i].author_name,
photo = reviews[i].profile_photo_url,
text = reviews[i].text;
html = "<div class='review-item CJS_slide'><div class='inner'><img class='photo' src='"+photo+"' alt=\""+name+"\"><div class='review-wrap'>"+stars+"<span class='review-author'>"+name+"</span><span class='review-date'>"+date+"</span><p class='review-text'>"+text+"</p></div></div></div>";
document.querySelector(parameters.selector+' .CJS_wrapper').innerHTML += html;
}
}; // end renderReviews()
var renderStars = function(rating){
var stars = "<div class='review-stars'><ul>";
// fill in gold stars
for (var i = 0; i < rating; i++) {
stars = stars+"<li><i class='star'></i></li>";
};
// fill in empty stars
if(rating < 5){
for (var i = 0; i < (5 - rating); i++) {
stars = stars+"<li><i class='star inactive'></i></li>";
};
}
stars = stars+"</ul></div>";
return stars;
} // end renderStars()
var convertTime = function(UNIX_timestamp){
var a = new Date(UNIX_timestamp * 1000),
months = ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Decembre'],
time = a.getDate() + ' ' + months[a.getMonth()] + ' ' + a.getFullYear();
return time;
} // end convertTime()
initialize_place(renderReviews);
});
https://codepen.io/bprodagnc/pen/zYGRERj
Для получения идентификатора места I используйте DevTools на кнопке «Написать отзыв» ( Проверьте скриншот ).
Это ошибка? Как вернуть отзывы от бизнеса, который имеет только зоны обслуживания, чтобы отобразить их на сайте компании?