Получение нового сайта Google, опубликованного URL-адреса с Drive.Files.list - PullRequest
0 голосов
/ 08 октября 2018

Так что я работаю над тем, чтобы перечислить все сайты в нашем домене.Я могу получить это с помощью 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-адреса и вставлять ссылки и т. Д., Но я не могу понять, как получить опубликованный URL-адресвообще (разве это не имя файла, которое используется в этом URL) URL в этом примере https://sites.google.com/domain.co.uk/testsaaaaa/home

'testsaaaaa' нигде не упоминается, что я могу видеть в полезной нагрузке.

1 Ответ

0 голосов
/ 08 октября 2018

Я не уверен, что это можно сделать с помощью Drive API, поскольку Drive API в большей или меньшей степени касается общих свойств файлов, а не конкретных документов.Я проверил версии 2 и 3 с помощью Google API Explorer и не смог получить какую-либо «опубликованную» информацию.

Демонстрационная ссылка Drive v2

Демонстрационная ссылка на Drive v3

К сожалению, API Сайтов Google (пока?) Не совместим с «новыми» Сайтами Google.С старыми сайтами вы можете получить доступ к этому опубликованному URL с помощью запроса сопоставления веб-адресов: https://developers.google.com/sites/docs/1.0/developers_guide_protocol#WebAddressMappings

Вы можете авторизовать API Сайтов Google, отредактировав файл манифеста скрипта Apps, включив в него область действия."https://sites.google.com/feeds"

Это пример сценария (который, опять же, будет работать только для "классических" Сайтов 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'> *1025* является опубликованным URL-адресом для этого конкретного сайта. Согласно связанному примеру, если вы используете псевдоним для пользовательского домена, который должен отображаться как его собственная запись в разделе <link rel='webAddressMapping' href='....">, из которых может быть несколько.

...