Javascript 应用程序脚本中的谷歌图像搜索
我的目标是有一个谷歌文档的关键字电子表格,我可以循环通过,执行每个关键字的图像搜索,并保存在同一个电子表格的结果图像URL的 找到了一个完整的谷歌图像搜索javascript API。在GoogleSheets中,自定义应用程序脚本也使用javascript。我正在寻找一种使用谷歌文档的应用程序脚本访问此图像搜索API的方法,但似乎找不到导入库的方法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。因此,您还有
更新:未弃用的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的过程中,我从未对它留下深刻印象。约书亚的回答肯定是正确的。