Zur neuen Funktion „Rezensionen zu Orten“ migrieren

Entwickler im Europäischen Wirtschaftsraum (EWR)

Mit Ortsrezensionen können Sie Ihren Webseiten Nutzerrezensionen und ‑bewertungen hinzufügen. Auf dieser Seite werden die Unterschiede zwischen Ortsrezensionen in der Klasse Place(neu) und PlacesService (alt) erläutert und einige Code-Snippets zum Vergleich bereitgestellt.

  • PlacesService (alt) gibt ein Array von PlaceReview Instanzen als Teil des PlaceResult-Objekts für jede getDetails()-Anfrage zurück, wenn das Feld reviews in der Anfrage angegeben ist.
  • Place (neu) gibt ein Array von Review Instanzen als Teil einer fetchFields()-Anfrage zurück, wenn das Feld reviews in der Anfrage angegeben ist.

In der folgenden Tabelle sind einige der wichtigsten Unterschiede bei der Verwendung von Orts rezensionen zwischen der Place Klasse und PlacesService aufgeführt:

PlacesService (alt) Place (neu)
PlaceReview -Schnittstelle Review -Klasse
Für Methoden ist die Verwendung eines Callbacks erforderlich, um das Ergebnisobjekt und google.maps.places.PlacesServiceStatus Antwort zu verarbeiten. Verwendet Promises und funktioniert asynchron.
Für Methoden ist eine PlacesServiceStatus-Prüfung erforderlich. Keine Statusprüfung erforderlich, Standardfehlerbehandlung kann verwendet werden. Weitere Informationen.
PlacesService muss mit einer Karte oder einem div-Element instanziiert werden. Place kann überall instanziiert werden, ohne dass ein Verweis auf eine Karte oder ein Seitenelement erforderlich ist.
PlaceReview gibt Attributionsdaten für die Rezension über die Felder author_name, author_url und profile_photo_url zurück. Review gibt Attributionsdaten für die Rezension über eine AuthorAttribution-Instanz zurück.

Codevergleich

In diesem Abschnitt wird Code für Textsuchmethoden verglichen, um die Unterschiede zwischen Ortsrezensionen in der alten PlacesService und der neueren Place Klasse zu veranschaulichen.

Places Service (alt)

Das folgende Snippet ruft getDetails() auf, um Ortsdetails einschließlich Rezensionen anzufordern, und zeigt das erste Rezensionsergebnis in einem Infofenster an.

const request = {
  placeId: "ChIJpyiwa4Zw44kRBQSGWKv4wgA", // Faneuil Hall Marketplace, Boston, MA
  fields: ["name", "formatted_address", "geometry", "reviews"],
};
const service = new google.maps.places.PlacesService(map);

service.getDetails(request, (place, status) => {
  if (
    status === google.maps.places.PlacesServiceStatus.OK &&
    place &&
    place.geometry &&
    place.geometry.location
  ) {
    // If there are any reviews display the first one.
    if (place.reviews && place.reviews.length > 0) {
      // Get info for the first review.
      let reviewRating = place.reviews[0].rating;
      let reviewText = place.reviews[0].text;
      let authorName = place.reviews[0].author_name;
      let authorUri = place.reviews[0].author_url;

      // Format the review using HTML.
      contentString =`
            <div id="title"><b>${place.name}</b></div>
            <div id="address">${place.formatted_address}</div>
            <a href="${authorUri}" target="_blank">Author: ${authorName}</a>
            <div id="rating">Rating: ${reviewRating} stars</div>
            <div id="rating"><p>Review: ${reviewText}</p></div>`;
    } else {
      contentString = `No reviews were found for ${place.name}`;
    }

    const infowindow = new google.maps.InfoWindow({
      content: contentString,
      ariaLabel: place.displayName,
    });

    // Add a marker.
    const marker = new google.maps.Marker({
      map,
      position: place.geometry.location,
    });

    // Show the info window.
    infowindow.open({
      anchor: marker,
      map,
    });
  }
});

Place-Klasse (neu)

Das folgende Snippet ruft fetchFields() Methode auf, um Ortsdetails einschließlich Rezensionen anzufordern, und zeigt das erste Rezensions ergebnis in einem Infofenster an.

// Use a place ID to create a new Place instance.
const place = new google.maps.places.Place({
  id: "ChIJpyiwa4Zw44kRBQSGWKv4wgA", // Faneuil Hall Marketplace, Boston, MA
});

// Call fetchFields, passing 'reviews' and other needed fields.
await place.fetchFields({
  fields: ["displayName", "formattedAddress", "location", "reviews"],
});

// If there are any reviews display the first one.
if (place.reviews && place.reviews.length > 0) {
  // Get info for the first review.
  let reviewRating = place.reviews[0].rating;
  let reviewText = place.reviews[0].text;
  let authorName = place.reviews[0].authorAttribution.displayName;
  let authorUri = place.reviews[0].authorAttribution.uri;

  // Format the review using HTML.
  contentString =`
          <div id="title"><b>${place.displayName}</b></div>
          <div id="address">${place.formattedAddress}</div>
          <a href="${authorUri}" target="_blank">Author: ${authorName}</a>
          <div id="rating">Rating: ${reviewRating} stars</div>
          <div id="rating"><p>Review: ${reviewText}</p></div>`;
} else {
  contentString = `No reviews were found for ${place.displayName}`;
}

// Create an infowindow to display the review.
infoWindow = new google.maps.InfoWindow({
  content: contentString,
  ariaLabel: place.displayName,
});

// Add a marker.
const marker = new google.maps.marker.AdvancedMarkerElement({
  map,
  position: place.location,
  title: place.displayName,
});

// Show the info window.
infoWindow.open({
  anchor: marker,
  map,
});