google-apps-script - 问:如何将 URL 域列表转换为完整 url
问题描述
我有一个包含数千个 URL 域的列表,但已将其中的一些复制到此处的示例中(此处为电子表格),并且正在寻找一种将它们转换为完整 URL 的方法,因为我需要完整的 URL 来完成我正在做的事情.
例如 all-about-test.eu 将变为http://all-about-test.eu/
由于 www.、https、http 等之间的 URLS 可能不同,我不能简单地将其连接到前面。
我寻找可能能够做到这一点的谷歌工作表功能,但找不到任何东西。
解决方案
您可以使用UrlFetchApp.fetch来尝试使用不同的协议访问不同的 URL,并指定参数followRedirects: false
。然后,您将检查 HTTP 响应代码(请参阅getResponseCode()),如果它是可接受的响应代码,则返回 URL:
function returnFullURL(domain) {
const options = ["https://","http://", "www.", "https://www.", "http://www.", ""]; // Possible protocols, change if necessary
const badCodes = [404,301,302,303,307,308]; // Acceptable response codes, change if necessary
for (let i = 0; i < options.length; i++) {
const url = options[i] + domain;
try {
const params = {
muteHttpExceptions: true,
followRedirects: false
}
const response = UrlFetchApp.fetch(options[i] + domain, params);
const code = response.getResponseCode();
if (!badCodes.includes(code)) return url;
} catch (err) {
console.log(err);
}
}
return "No combination allowed";
}
然后,您可以将其用作自定义功能:
笔记:
- 我不确定这些是否是要检查的适当的 HTTP 响应状态代码,以及这些是否是协议、www 子域等的所有可能性,但这应该给你一个开始。
编辑:
作为替代方案,您可以通过一次调用您的函数来构建所有 URL,而不是为每个域调用它。为此,请复制并调用以下函数并指定所有域的范围(在您的示例表中,即=returnAllURLs(A2:A18)
):
function returnAllURLs(domains) {
const options = ["https://","http://", "www.", "https://www.", "http://www.", ""]; // Possible protocols, change if necessary
const badCodes = [404,301,302,303,307,308]; // Acceptable response codes, change if necessary
return domains.map(domain => {
for (let i = 0; i < options.length; i++) {
const url = options[i] + domain[0];
try {
const params = {
muteHttpExceptions: true,
followRedirects: false
}
const response = UrlFetchApp.fetch(options[i] + domain[0], params);
const code = response.getResponseCode();
if (!badCodes.includes(code)) return [url];
} catch (err) {
console.log(err);
}
}
return ["No combination allowed"];
});
}
有关的:
推荐阅读
- javascript - 这是使用 jquery 实现表单验证的正确代码吗?
- java - 使用 Spring Cloud Gateway 进行 Ldap 身份验证
- php - 找不到类“PhpOffice\PhpWord\TemplateProcessor”
- angular - 尝试将 Angular 7 应用程序部署到 Azure 失败
- razor - 如何修复 DNN 中 2sxc 的“无法加载文件或程序集”System.Web.Helpers,版本 = 2.0.0.0”错误
- c# - 无法将公共变量的值获取到 Unity3D c# 中的另一个脚本中
- python - 标记为不需要 Argparse 中的强制参数?
- excel - 寻找可以采用输入名称并返回该名称出现的所有工作表的公式或 VBA
- hyperledger-fabric - 谁能解决这个错误:无法读取块:&{SERVICE_UNAVAILABLE}?
- python - 在python中解包是什么意思?