2013-03-11 93 views
0

有谁知道如何检查Google网站是否存在?如何检查Google网站是否存在?

我正在尝试使用var site = SitesApp.createSite(domain, siteName, name, summary);来创建一个新网站。但是,如果站点(读取URL)已经存在,则会引发错误。

然后我试着用var test = SitesApp.getSiteByUrl('https://sites.google.com/a/' + domain + '/' + siteName);来检查网站是否存在,但是如果它不存在就会抛出错误。

最终的结果,我想会是:

  1. 检查是否存在网站。
  2. 如果存在,修改站点名称(即添加'1') 到它的末尾,然后再次检查。
  3. 创建网站

我有两个可能的解决方案,但我并不感到有其一。他们两个都会在while循环内运行,直到找到不存在的url为止。

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

解决方案2 使用try/catch与UrlFetchApp.fetch(url).getResponseCode()。检查它是否返回'200 OK'。如果没有,尝试使用getHeaders()从标题中获取位置,然后解析它以查找'WebspaceNotFound'。不幸的是,我无法单独依靠响应代码,因为一个不存在的网站和一个要求你登录的网站都报告为'302 Moved Temporarily'。

有没有简单的解决方法呢?我的解决方案听起来比其他解决方案好吗?

+1

您有解决方案1时看到的问题吗?它看起来对我来说是最好的解决方案。 – 2013-03-11 19:44:41

+1

我同意Phil的观点,你也可以在try/catch中使用'createSite',这样如果它没有失败,你的网站将会在一个步骤中创建;-) – 2013-03-11 21:09:41

+0

感谢Phil和Serge。我想尽管在这种情况下使用try/catch是非常低音的,但它似乎是最好的方法。 – 2013-03-12 13:11:41

回答

0

因为你可以在域中的所有网站的列表,你可以做这样的事情:

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电话。另外,我不知道如果您无法访问所有网站,这将如何工作,因为我从管理员帐户进行测试。希望它能指出你的方向。

+0

不幸的是,我认为这只会在管理员帐户中起作用,最终我的脚本将由最终用户运行。 – 2013-03-12 13:12:16

+0

看来我稍后添加的更新没有正确发布。因此,我会再次补充说,使用哪种方式来确定网站是否存在并不重要。你提到的两种方法都很好。尽管如何处理结果很重要。 你可以做这样的递归: 'function createSite(name){ try {SitesApp.createSite('domain.tld',name)} catch(e){createSite(name + Math.round(Math。 random()* 10))} }' – rcknr 2013-03-12 17:50:48