Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 应用程序脚本中的谷歌图像搜索_Javascript_Google Apps Script_Google Docs_Google Image Search - Fatal编程技术网

Javascript 应用程序脚本中的谷歌图像搜索

Javascript 应用程序脚本中的谷歌图像搜索,javascript,google-apps-script,google-docs,google-image-search,Javascript,Google Apps Script,Google Docs,Google Image Search,我的目标是有一个谷歌文档的关键字电子表格,我可以循环通过,执行每个关键字的图像搜索,并保存在同一个电子表格的结果图像URL的 找到了一个完整的谷歌图像搜索javascript API。在GoogleSheets中,自定义应用程序脚本也使用javascript。我正在寻找一种使用谷歌文档的应用程序脚本访问此图像搜索API的方法,但似乎找不到导入库的方法 更新:未弃用的google搜索API链接:不幸的是,google弃用了您链接到的API。此外,谷歌应用程序脚本中似乎没有类似的API。因此,您还有

我的目标是有一个谷歌文档的关键字电子表格,我可以循环通过,执行每个关键字的图像搜索,并保存在同一个电子表格的结果图像URL的

找到了一个完整的谷歌图像搜索javascript API。在GoogleSheets中,自定义应用程序脚本也使用javascript。我正在寻找一种使用谷歌文档的应用程序脚本访问此图像搜索API的方法,但似乎找不到导入库的方法


更新:未弃用的google搜索API链接:

不幸的是,google弃用了您链接到的API。此外,谷歌应用程序脚本中似乎没有类似的API。因此,您还有一个选择,那就是构造Google图像搜索的URL,并使用URL获取应用程序获取HTML。从这一点上,你也许可以找到返回图像的链接,但要预先警告,即使你让它工作起来,谷歌也不喜欢任何像机器人一样使用搜索的东西,而且很可能会标记流量。如果这不是您想要的答案,很抱歉,但这是唯一的答案。

不幸的是,谷歌不推荐您链接到的API。此外,谷歌应用程序脚本中似乎没有类似的API。因此,您还有一个选择,那就是构造Google图像搜索的URL,并使用URL获取应用程序获取HTML。从这一点上,你也许可以找到返回图像的链接,但要预先警告,即使你让它工作起来,谷歌也不喜欢任何像机器人一样使用搜索的东西,而且很可能会标记流量。如果这不是您想要的答案,很抱歉,但这是唯一的答案。

接受上面的建议,我放弃了直接合并google搜索API的尝试,而是使用URL方法。这是我的结论,以防将来有人想这样做

var delayMilli = 0;

function fetchURL(sheet,row,urlCell) {
  delay(delayMilli)
  var row = sheet.getRange(row,1,1,2).getValues()[0];
  // This example searches for two terms located in row number "row"
  var response = UrlFetchApp.fetch("https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q="+row[1]+"%20"+row[0]);
  var data = JSON.parse(response);
  if (data.responseData.results[0]) {
    var urlString = data.responseData.results[0].url;
    urlCell.setValue(urlString);
    if (delayMilli >= 0) {
      delayMilli -= 5; 
    }
  } else {
    // Delay the method and try again.
    delayMilli += 100;
    fetchURL(sheet,row,urlCell)
  } 
}
如果响应对象为空,通常是因为Google拒绝了服务器调用。在上面的代码中,每次失败的迭代将在重试之前增加0.1秒的延迟时间。一旦通话重新开始,并且没有任何问题,延迟时间就会慢慢减少到0。似乎对我很有效


一个很大的缺点是你不能根据图像大小、限制级别等过滤结果。

接受上面的建议,我放弃了直接合并谷歌搜索API的尝试,而是使用URL方法。这是我的结论,以防将来有人想这样做

var delayMilli = 0;

function fetchURL(sheet,row,urlCell) {
  delay(delayMilli)
  var row = sheet.getRange(row,1,1,2).getValues()[0];
  // This example searches for two terms located in row number "row"
  var response = UrlFetchApp.fetch("https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q="+row[1]+"%20"+row[0]);
  var data = JSON.parse(response);
  if (data.responseData.results[0]) {
    var urlString = data.responseData.results[0].url;
    urlCell.setValue(urlString);
    if (delayMilli >= 0) {
      delayMilli -= 5; 
    }
  } else {
    // Delay the method and try again.
    delayMilli += 100;
    fetchURL(sheet,row,urlCell)
  } 
}
如果响应对象为空,通常是因为Google拒绝了服务器调用。在上面的代码中,每次失败的迭代将在重试之前增加0.1秒的延迟时间。一旦通话重新开始,并且没有任何问题,延迟时间就会慢慢减少到0。似乎对我很有效


一个很大的缺点是,您无法按图像大小、限制级别等筛选结果。

感谢您的输入,我担心会出现这种情况。我在google自定义搜索API中添加了一个新的链接,这似乎是最新的。该API的不幸问题是,它只使用您使用google工具创建的特定于站点的搜索引擎。您将无法使用它访问标准谷歌图像搜索的信息。顺便说一句,如果您或其他人无法找到更理想的解决方案,请接受我的回答。有时人们只是不愿意这样做,因为这不是他们想要听到的答案。我有一个脚本,它做了一些类似于@JoshuaDannemann所描述的事情,在开发过程中,我曾几次被谷歌临时列入黑名单。除非你知道你的要求很少,否则绝对不是一个好办法。解决这个问题的最好办法是找到一个具有良好API的搜索引擎,尽管在我寻找API的过程中,我从未对它留下深刻印象。乔舒亚的回答肯定是正确的。谢谢你的意见,我担心会是这样。我在google自定义搜索API中添加了一个新的链接,这似乎是最新的。该API的不幸问题是,它只使用您使用google工具创建的特定于站点的搜索引擎。您将无法使用它访问标准谷歌图像搜索的信息。顺便说一句,如果您或其他人无法找到更理想的解决方案,请接受我的回答。有时人们只是不愿意这样做,因为这不是他们想要听到的答案。我有一个脚本,它做了一些类似于@JoshuaDannemann所描述的事情,在开发过程中,我曾几次被谷歌临时列入黑名单。除非你知道你的要求很少,否则绝对不是一个好办法。解决这个问题的最好办法是找到一个具有良好API的搜索引擎,尽管在我寻找API的过程中,我从未对它留下深刻印象。约书亚的回答肯定是正确的。