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

时间:2018-10-08 13:59:25

标签: google-apps-script google-drive-api google-sites

因此,我正在努力列出我们域内的所有网站。 我可以使用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);
}

哪个返回:

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

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

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

1 个答案:

答案 0 :(得分:1)

我不确定是否可以使用Drive API来完成此操作,因为Drive API或多或少与通用文件属性有关,而与文档无关。我使用Google API Explorer检查了v2和v3,但无法获取任何形式的“已发布”信息。

Drive v2 demo link

Drive v3 demo link

不幸的是,Google Sites API与(新?)“新” Google Sites不兼容。使用old sites,您可以通过以下网址访问此发布的URL:https://developers.google.com/sites/docs/1.0/developers_guide_protocol#WebAddressMappings

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

来授权Google Sites API。

这是一个示例脚本(同样,该脚本仅适用于“经典” 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'>的{​​{1}}属性是该特定网站的已发布URL。按照链接的示例,如果您将别名作为自定义域的别名,则该自定义域应作为自己的条目显示在href下,其中可能有多个。