Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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 Sites - Fatal编程技术网

Javascript 如何检查谷歌网站是否存在?

Javascript 如何检查谷歌网站是否存在?,javascript,google-apps-script,google-sites,Javascript,Google Apps Script,Google Sites,有人知道如何检查谷歌网站是否存在吗 我正在尝试使用var site=SitesApp.createSite(域、站点名、名称、摘要)以创建新站点。但是,如果站点(读取URL)已经存在,它将抛出一个错误 然后我尝试使用var test=SitesApp.getSiteByUrl('https://sites.google.com/a/“+域名+”/“+站点名称)检查站点是否存在,但如果不存在则会抛出错误 我希望的最终结果是: 检查站点是否存在 如果存在,请修改站点名称(即添加“1”) 到它的末尾,

有人知道如何检查谷歌网站是否存在吗

我正在尝试使用
var site=SitesApp.createSite(域、站点名、名称、摘要)以创建新站点。但是,如果站点(读取URL)已经存在,它将抛出一个错误

然后我尝试使用
var test=SitesApp.getSiteByUrl('https://sites.google.com/a/“+域名+”/“+站点名称)
检查站点是否存在,但如果不存在则会抛出错误

我希望的最终结果是:

  • 检查站点是否存在
  • 如果存在,请修改站点名称(即添加“1”) 到它的末尾,然后再次检查
  • 创建站点
  • 我有两种可能的解决方案,但我对其中任何一种都不满意。它们都将在while循环中运行,该循环将继续运行,直到找到不存在的url为止

    解决方案1 使用try/catch运行
    SitesApp.getSiteByUrl()

    解决方案2 将try/catch与
    UrlFetchApp.fetch(url.getResponseCode()
    一起使用。检查是否返回“200 OK”。如果没有,请尝试使用
    getHeaders()
    从标头获取位置,然后为“WebspaceNotFound”解析它。不幸的是,我不能仅仅依靠响应代码,因为一个不存在的站点和一个要求您以“302临时移动”的身份登录这两个报表的站点


    有没有一个简单的解决办法?我的解决方案中有一个听起来比另一个好吗?

    因为你可以得到域中所有站点的列表,你可以这样做:

    function siteExists(domain, siteName) {
      var sites = SitesApp.getSites(domain);
      sites.forEach(function(n, i, a){a[i] = n.getName()});
    
      if(~sites.indexOf(siteName)) return true;
      else return false;
    }
    

    注意,如果你有很多站点,你可能需要打几个getSites电话。此外,我不知道这将如何工作时,你没有访问所有的网站,因为我从管理员帐户测试。希望它能为你指明好的方向

    解决方案1是否存在问题?对我来说,这似乎是最好的解决方案。我同意Phil的观点,你也可以在try/catch中使用
    createSite
    ,这样,如果它没有失败,你的站点将在一个步骤中创建;-)谢谢菲尔和谢尔盖。我想我只是觉得在这种情况下使用try/catch有点像bass ackwards,但这似乎是最好的方式。不幸的是,我认为这只适用于管理员帐户,最终我的脚本将由最终用户运行。我后来添加的更新似乎没有正确发布。所以我要再次补充一点,不管你用哪种方式来判断这个网站是否存在。你提到的两种方法都很好。但如何处理结果很重要。您可以使用如下递归:
    function createSite(name){try{SitesApp.createSite('domain.tld',name)}catch(e){createSite(name+Math.round(Math.random()*10))}