Zur neuen Funktion „Rezensionen zu Orten“ migrieren

Mit Rezensionen für Orte können Sie Ihren Webseiten Rezensionen und Bewertungen von Nutzern hinzufügen. Auf dieser Seite werden die Unterschiede zwischen Rezensionen zu Orten, die in der Klasse Place (neu) und PlacesService (alt) verwendet werden, erläutert. Außerdem finden Sie einige Code-Snippets zum Vergleich.

  • PlacesService (alt) gibt für jede getDetails()-Anfrage ein Array von PlaceReview-Instanzen als Teil des PlaceResult-Objekts 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 Hauptunterschiede bei der Verwendung von Rezensionen für Orte zwischen der Place-Klasse und PlacesService aufgeführt:

PlacesService (alt) Place (neu)
PlaceReview-Benutzeroberfläche Review-Klasse
Für Methoden ist ein Callback erforderlich, um das Ergebnisobjekt und die 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.
PlacesService muss mit einem Karten- oder div-Element instanziiert werden. Place kann überall dort instanziiert werden, wo es benötigt wird, ohne Verweis auf ein Karten- oder Seitenelement.
PlaceReview gibt Attributionsdaten für die Rezension mithilfe der Felder author_name, author_url und profile_photo_url zurück. Review gibt Attributionsdaten für die Rezension mithilfe einer AuthorAttribution-Instanz zurück.

Codevergleich

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

Places Service (alte Version)

Im folgenden Snippet wird getDetails() aufgerufen, um Details zu einem Ort, einschließlich Rezensionen, anzufordern. Das erste Rezensionsergebnis wird in einem Infofenster angezeigt.

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)

Im folgenden Snippet wird die Methode fetchFields() aufgerufen, um Details zu einem Ort einschließlich Rezensionen anzufordern. Das erste Rezensionsergebnis wird in einem Infofenster angezeigt.

// 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,
});