【问题标题】:How do I get Google search results from urlfetch in google apps script如何从谷歌应用脚​​本中的 urlfetch 获取谷歌搜索结果
【发布时间】:2015-04-30 08:37:17
【问题描述】:

我一直在尝试下面的代码

var response = UrlFetchApp.fetch("https://www.google.com/#q=this+is+a+test");      
var contentText = response.getContentText();
      Logger.log(contentText);
      var thisdoc=DocumentApp.getActiveDocument().getBody() ;
      thisdoc.setText(contentText);
     Logger.log(contentText.indexOf("About"));

但它似乎只返回标题和空正文,没有任何搜索结果。至少我应该能够在浏览器顶部看到“关于 xxx 结果”,但这不会出现在文本中,indexOf 也不会返回正面屏幕。我想知道搜索结果是否在页面加载后填充,这意味着 body 标记确实为空,如果是,是否有解决方法?

编辑:不,它不会违反 TOS,因为这是一个 GAFE 应用程序(这是一个商业应用程序),对于商业帐户,他们有免费和高级模型访问他们的 API。

【问题讨论】:

  • 通过在 chrome 中调试 google 页面来调查它的作用(例如,参见 GET/POST 网络调用)。可能会做一个 ajax,所以你可以从 gas 做同样的调用
  • 检查您是否违反了他们的 t.o.s.通过直接拨打电话

标签: google-apps-script google-docs google-custom-search


【解决方案1】:

Google 为授权搜索提供了一个 API,所以不要大惊小怪地抓取网页。

例如,您可以将Custom Search APIUrlFetch() 一起使用。

从脚本编辑器转到Resources -> Developer's Console Project... -> View Developer's Console。为公共 API 访问创建一个新密钥。按照自定义搜索 API 文档中的说明创建自定义搜索引擎。将密钥和 ID 输入脚本中指示的位置。 (下面有更多详细信息。)

此示例脚本将返回一个包含成功搜索结果的对象;您可以导航对象以提取您想要的任何信息。

/**
 * Use Google's customsearch API to perform a search query.
 * See https://developers.google.com/custom-search/json-api/v1/using_rest.
 *
 * @param {string} query   Search query to perform, e.g. "test"
 *
 * returns {object}        See response data structure at
 *                         https://developers.google.com/custom-search/json-api/v1/reference/cse/list#response
 */
function searchFor( query ) {

  // Base URL to access customsearch
  var urlTemplate = "https://www.googleapis.com/customsearch/v1?key=%KEY%&cx=%CX%&q=%Q%";

  // Script-specific credentials & search engine
  var ApiKey = "--get from developer's console--";
  var searchEngineID = "--get from developer's console--";

  // Build custom url
  var url = urlTemplate
    .replace("%KEY%", encodeURIComponent(ApiKey))
    .replace("%CX%", encodeURIComponent(searchEngineID))
    .replace("%Q%", encodeURIComponent(query));

  var params = {
    muteHttpExceptions: true
  };

  // Perform search
  Logger.log( UrlFetchApp.getRequest(url, params) );  // Log query to be sent
  var response = UrlFetchApp.fetch(url, params);
  var respCode = response.getResponseCode();

  if (respCode !== 200) {
    throw new Error ("Error " +respCode + " " + response.getContentText());
  }
  else {
    // Successful search, log & return results
    var result = JSON.parse(response.getContentText());
    Logger.log( "Obtained %s search results in %s seconds.",
               result.searchInformation.formattedTotalResults,
               result.searchInformation.formattedSearchTime);
    return result;
  }
}

例子:

[15-05-04 18:26:35:958 EDT] {
  "headers": {
    "X-Forwarded-For": "216.191.234.70"
  },
  "useIntranet": false,
  "followRedirects": true,
  "payload": "",
  "method": "get",
  "contentType": "application/x-www-form-urlencoded",
  "validateHttpsCertificates": true,
  "url": "https://www.googleapis.com/customsearch/v1?key=--redacted--&cx=--redacted--&q=test"
}
[15-05-04 18:26:36:812 EDT] Obtained 132,000,000 search results in 0.74 seconds.

 


使用 API 密钥向 Google 识别您的应用程序

(摘自Google's documentation。)

  1. 转到Google Developers Console

  2. 选择一个项目,或创建一个新项目。

  3. 在左侧边栏中,展开 APIs & auth。接下来,点击 API。在 API 列表中,确保 Custom Search API 的状态为 ON。

    。 . .

  4. 在左侧边栏中,选择凭据

    通过点击Public API access下的Create new Key来创建您的应用程序的API密钥。对于 Google Script 使用,请创建一个浏览器键

  5. 创建浏览器应用程序密钥后,将API密钥复制到您的代码中。

创建自定义搜索引擎

按照说明here。创建自定义搜索引擎后,将搜索引擎 ID 复制到您的代码中。

【讨论】:

  • 感谢您对用户友好的逐步描述...我喜欢它:-)
猜你喜欢
  • 2015-12-29
  • 2014-08-25
  • 1970-01-01
  • 2012-08-19
  • 2016-10-11
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 2012-04-10
相关资源
最近更新 更多