You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Places API仅能获取5条评论问题求助

解决Google Places API仅返回5条评论的问题

我正在用Google Spreadsheet和Google Places API抓取商家评论,商家实际有800+条评论,但脚本只能拿到5条。以下是我的代码和运行日志:

function fetchAllGoogleReviews() {
  const apiKey = 'MY_API_KEY'; // Replace with your API key
  const placeId = 'MY_PLACE_ID'; // Your Place ID
  const url = `https://maps.googleapis.com/maps/api/place/details/json?placeid=${placeId}&fields=name,reviews&key=${apiKey}`;

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // Clear previous data but keep the header row
  sheet.getRange('A2:D').clearContent();
  
  let nextPageToken = '';
  let allReviews = [];
  let totalReviewsCount = 0;

  do {
    const requestUrl = nextPageToken ? `${url}&pagetoken=${nextPageToken}` : url;
    
    Logger.log('Requesting URL: ' + requestUrl);
    const response = UrlFetchApp.fetch(requestUrl);
    const json = JSON.parse(response.getContentText());
    
    Logger.log('API Response: ' + JSON.stringify(json));

    if (json.result && json.result.reviews) {
      const reviews = json.result.reviews;
      totalReviewsCount += reviews.length;

      allReviews = allReviews.concat(reviews);
      nextPageToken = json.next_page_token || '';

      Logger.log('Retrieved ' + reviews.length + ' reviews. Total so far: ' + totalReviewsCount);
      Logger.log('Next Page Token: ' + nextPageToken);

      if (nextPageToken) {
        Utilities.sleep(3000); // Wait before fetching the next page
        Logger.log('Waiting for 3 seconds before the next request...');
      }
    } else {
      Logger.log('No more reviews or next_page_token not found.');
      nextPageToken = '';
    }
  } while (nextPageToken);

  // Populate the sheet with all reviews
  if (allReviews.length > 0) {
    allReviews.forEach((review, index) => {
      const row = index + 2; // Start from the second row (A2)
      const reviewDate = new Date(review.time * 1000);
      const formattedDate = Utilities.formatDate(reviewDate, Session.getScriptTimeZone(), 'dd-MM-yyyy');
      
      sheet.getRange(row, 1).setValue(review.author_name);  // Column A: Author Name
      sheet.getRange(row, 2).setValue(formattedDate);       // Column B: Review Date
      sheet.getRange(row, 3).setValue(review.rating);        // Column C: Rating
      sheet.getRange(row, 4).setValue(review.text);          // Column D: Review Text
    });
  } else {
    sheet.getRange(2, 1).setValue("No reviews found.");
  }

  Logger.log('Total reviews fetched: ' + totalReviewsCount);
}

运行脚本后的日志输出:

Info: Retrieved 5 reviews. Total so far: 5
Info: Next Page Token: 
Info: Total reviews fetched: 5

日志显示没有next_page_token,但实际商家评论远不止5条,求解决办法。


问题根源

Google Places API的Place Details端点本身存在评论返回限制:它最多仅返回5条最新的用户评论,且该端点不支持通过分页(next_page_token)获取更多评论——你看到next_page_token为空是正常现象,因为这个接口根本没提供评论分页的功能。

解决办法

要获取商家的全部评论,必须改用Google Business Profile API(原Google My Business API),这是官方唯一能获取商家所有评论的途径。具体步骤如下:

  • 权限验证:你需要拥有该商家的管理权限,并且通过OAuth 2.0完成API授权(该接口需要用户权限,无法直接用API Key调用)。
  • 调用正确端点:使用accounts/{accountId}/locations/{locationId}/reviews/list端点获取所有评论,这个端点支持分页,可通过pageSize和pageToken参数遍历全部评论。
  • 适配Spreadsheet脚本:在Google Apps Script中配置OAuth客户端,通过授权后的请求调用Business Profile API,再将返回的评论写入表格。

代码调整示例(Business Profile API方向)

以下是简化的实现框架(需先完成OAuth配置):

function fetchAllBusinessReviews() {
  const accountId = 'YOUR_ACCOUNT_ID';
  const locationId = 'YOUR_LOCATION_ID';
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange('A2:D').clearContent();

  let pageToken = '';
  let allReviews = [];

  do {
    const url = `https://mybusiness.googleapis.com/v4/accounts/${accountId}/locations/${locationId}/reviews?pageToken=${pageToken}&pageSize=50`;
    // 需通过OAuth授权请求,不能直接用无认证的UrlFetchApp.fetch
    const response = UrlFetchApp.fetch(url, {
      headers: {
        'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
      }
    });
    const json = JSON.parse(response.getContentText());
    
    if (json.reviews) {
      allReviews = allReviews.concat(json.reviews);
      pageToken = json.nextPageToken || '';
      Utilities.sleep(1000); // 避免请求频率超限
    } else {
      pageToken = '';
    }
  } while (pageToken);

  // 将评论写入表格
  allReviews.forEach((review, index) => {
    const row = index + 2;
    const reviewDate = new Date(review.updateTime);
    const formattedDate = Utilities.formatDate(reviewDate, Session.getScriptTimeZone(), 'dd-MM-yyyy');
    
    sheet.getRange(row, 1).setValue(review.reviewer.displayName);
    sheet.getRange(row, 2).setValue(formattedDate);
    sheet.getRange(row, 3).setValue(review.starRating);
    sheet.getRange(row, 4).setValue(review.comment);
  });

  Logger.log('Total reviews fetched: ' + allReviews.length);
}

注意事项

  • 需先在Google Cloud Console中启用Google Business Profile API,并配置OAuth同意屏幕和客户端ID。
  • 确保你的Google账号拥有该商家的管理权限,否则无法获取评论数据。

内容的提问来源于stack exchange,提问作者user17982950

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:34:54