首页 > 解决方案 > 问:如何将 URL 域列表转换为完整 url

问题描述

我有一个包含数千个 URL 域的列表,但已将其中的一些复制到此处的示例中(此处为电子表格),并且正在寻找一种将它们转换为完整 URL 的方法,因为我需要完整的 URL 来完成我正在做的事情.

例如 all-about-test.eu 将变为http://all-about-test.eu/

由于 www.、https、http 等之间的 URLS 可能不同,我不能简单地将其连接到前面。

我寻找可能能够做到这一点的谷歌工作表功能,但找不到任何东西。

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-formula

解决方案


您可以使用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"];
  });
}

有关的:


推荐阅读