从 Drive.Files.list 获取新 Google 网站已发布 URL

Getting New Google Site Published URL from Drive.Files.list

所以我正在做一些事情来列出我们域中的所有站点。 我可以使用 Drive.File.list 获取它,这很好。我可以查询并获取站点的名称和所有者的电子邮件,但是,我想不出一种方法来发布站点 URL。

这是我目前所掌握的核心内容:

function getNewSites() {
  var responses = Drive.File.list({
    corpus: "DEFAULT",
    maxResults: 1,
    q: 'mimeType="application/vnd.google-apps.site" and title="Test Site"',
    fields: "items/owners/emailAddress,items/title"
  });
  Logger.log(responses);
}

哪个returns:

{
 "items": [
  {
   "title": "Test Site",
   "owners": [
    {
     "emailAddress": "email@address.co.uk"
    }
   ]
  }
 ]
}

您可以获得编辑 URL 和嵌入链接等,但我完全不知道如何获得已发布的 URL(是不是在中使用的文件名URL) 该示例中的 URL 是 https://sites.google.com/domain.co.uk/testsaaaaa/home

'testsaaaaa' 在有效负载中我能看到的任何地方都没有被引用。

我不确定这是否可以通过 Drive API 完成,因为 Drive API 或多或少是关于通用文件属性而不是特定于文档的东西。我使用 Google APIs Explorer 检查了 v2 和 v3,但无法获得任何类型的 "published" 信息。

Drive v2 demo link

Drive v3 demo link

不幸的是,Google 站点 API 与 "new" Google 站点不(还?)兼容。随着 old sites, you could access this published URL with a web address mapping request: https://developers.google.com/sites/docs/1.0/developers_guide_protocol#WebAddressMappings

您可以通过编辑 Apps 脚本清单文件以包含范围 "https://sites.google.com/feeds"

来授权 Google 站点 API

这是一个示例脚本(同样,仅适用于 "classic" Google 站点:

function ClassicSitesLister() {
  // https://developers.google.com/sites/docs/1.0/reference#feed_ListSites
  const url = 'https://sites.google.com/feeds/site/site?with-mappings=true'; // replace final 'site' with custom domain
  const options = {
    Authorization: "Bearer " + ScriptApp.getOAuthToken()
  };
  const resp = UrlFetchApp.fetch(url, {headers: options});
  const content = resp.getContentText(); // gets XML content
  console.log({message: "Classic Sites data", xmlContent: content});
}

并且记录的数据类似于:

<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' 
     xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gd='http://schemas.google.com/g/2005' xmlns:gs='http://schemas.google.com/spreadsheets/2006' 
     xmlns:thr='http://purl.org/syndication/thread/1.0' xmlns:sites='http://schemas.google.com/sites/2008' 
     xmlns:dc='http://purl.org/dc/terms' xmlns:gAcl='http://schemas.google.com/acl/2007'>
  <id>https://sites.google.com/feeds/site/site</id>
  <updated>2018-10-08T16:09:52.181Z</updated>
  <title>Site</title>
  <link rel='alternate' type='text/html' href='https://sites.google.com/feeds/site/site'/>
  <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://sites.google.com/feeds/site/site'/>
  <link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='https://sites.google.com/feeds/site/site'/>
  <link rel='self' type='application/atom+xml' href='https://sites.google.com/feeds/site/site?with-mappings=true'/>
  <generator version='1' uri='http://sites.google.com'>Google Sites</generator>
  <openSearch:startIndex>1</openSearch:startIndex>
  <entry gd:etag='&quot;KXsmYD5aEw..&quot;'>
    <id>https://sites.google.com/feeds/site/site/......</id>
    <updated>2015-08-25T20:44:44.336Z</updated>
    <app:edited xmlns:app='http://www.w3.org/2007/app'>2015-08-25T20:44:44.336Z</app:edited>
    <title>......</title>
    <summary>......</summary>
    <link rel='alternate' type='text/html' href='https://sites.google.com/site/....../'/>
    <link rel='http://schemas.google.com/acl/2007#accessControlList' type='application/atom+xml' href='https://sites.google.com/feeds/acl/site/site/.....'/>
    <link rel='edit' type='application/atom+xml' href='https://sites.google.com/feeds/site/site/.....?with-mappings=true'/>
    <link rel='self' type='application/atom+xml' href='https://sites.google.com/feeds/site/site/......'/>
    <sites:siteName>......</sites:siteName>
    <sites:theme>......</sites:theme>
  </entry>
</feed>

在上面的提要中,<link rel='alternate'>href 属性是针对该特定站点发布的 URL。根据链接示例,如果您为自定义域设置别名,该自定义域应在 <link rel='webAddressMapping' href='...."> 下显示为自己的条目,其中可能有多个。