Guide Python

Important:Ce document a été rédigé avant 2012. Options d'authentification décrits dans ce document (OAuth 1.0, AuthSub et ClientLogin) ont été officiellement abandonné depuis le 20 avril 2012 et ne sont plus disponibles. Nous vous encourageons à migrer vers OAuth 2.0 dès que possible.

L'API Google Sites Data permet aux applications clientes d'accéder au contenu d'un site Google, de le publier et de le modifier. Votre application cliente peut également demander la liste des activités récentes, récupérer l'historique des révisions et télécharger des pièces jointes.

En plus de fournir des informations générales sur les fonctionnalités de l'API Sites Data, ce guide fournit des exemples d'interaction avec l'API. à l'aide de la bibliothèque cliente Python ; Si vous avez besoin d'aide pour configurer la bibliothèque cliente, consultez Premiers pas avec la bibliothèque cliente Python Google Data Si vous êtes intéressé par Pour en savoir plus sur le protocole sous-jacent utilisé par la bibliothèque cliente Python pour interagir avec l'API de la version classique de Google Sites, consultez la guide du protocole.

Audience

Ce document est destiné aux développeurs qui souhaitent développer des applications clientes qui interagissent avec Google Sites. à l'aide de la bibliothèque cliente Python Google Data.

Premiers pas

Pour utiliser la bibliothèque cliente Python, vous devez disposer de Python 2.2+ et des modules répertoriés sur la page wiki DependencyModules. Après avoir téléchargé la bibliothèque cliente, Consultez la page Premiers pas avec la bibliothèque Google Data Python pour obtenir de l'aide sur l'installation et l'utilisation du client.

Exécuter l'exemple

Un exemple fonctionnel complet se trouve dans le sous-répertoire samples/sites du dépôt Mercurial du projet. (/samples/sites/sites_example.py).

Exécutez l'exemple comme suit:

python sites_example.py
# or
python sites_example.py --site [sitename] --domain [domain or "site"] --debug [prints debug info if set]

Si les indicateurs requis ne sont pas fournis, l'application vous invitera à saisir ces valeurs. L'exemple permet à l'utilisateur d'effectuer un certain nombre d'opérations comment utiliser l'API Google Sites classique. Par conséquent, vous devrez vous authentifier pour effectuer certaines opérations (par exemple, pour modifier du contenu). Le programme vous invitent également à vous authentifier via AuthSub, OAuth ou ClientLogin.

Pour inclure les exemples de ce guide dans votre propre code, vous avez besoin des instructions import suivantes:

import atom.data
import gdata.sites.client
import gdata.sites.data

Vous devrez également configurer un objet SitesClient, qui représente une connexion client à l'API Google Sites classique. Transmettez le nom de votre application et le nom de l'espace Web du site (à partir de son URL):

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName')

Pour utiliser un site hébergé sur un domaine G Suite, définissez le domaine à l'aide du paramètre domain:

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName', domain='example.com')

Dans les extraits ci-dessus, l'argument source est facultatif, mais recommandé pour la journalisation. Il doit Utilisez le format suivant: company-applicationname-version

Remarque: Le reste du guide suppose que vous avez créé un objet SitesClient dans la variable client.

S'authentifier auprès de l'API Google Sites classique

La bibliothèque cliente Python peut être utilisée pour travailler avec des flux publics ou privés. L'API Sites Data permet d'accéder à des données privées et publiques flux, en fonction des autorisations accordées à un site et de l'opération que vous essayez d'effectuer. Par exemple, vous pouvez lire le flux de contenu un site public sans y apporter de mises à jour (ce qui nécessite un client authentifié). Pour ce faire, utilisez Authentification par nom d'utilisateur/mot de passe ClientLogin, AuthSub ou OAuth.

Pour en savoir plus sur AuthSub, OAuth et ClientLogin, consultez la présentation de l'authentification via les API Google Data.

AuthSub pour les applications Web

L'authentification AuthSub pour les applications Web doit être utilisée par les applications clientes qui doivent à authentifier leurs utilisateurs auprès d'un compte Google ou G Suite. L'opérateur n'a pas besoin d'accéder au nom d'utilisateur ni au mot de passe de l'utilisateur Google Sites. Il lui suffit Veuillez indiquer un jeton AuthSub.

Afficher les instructions pour intégrer AuthSub à votre application Web

Demander un jeton à usage unique

Lorsque l'utilisateur accède à votre application pour la première fois, il doit s'authentifier. En règle générale, les développeurs impriment du texte et un lien dirigeant l'utilisateur à la page d'approbation AuthSub pour authentifier l'utilisateur et lui demander l'accès à ses documents. La bibliothèque cliente Python Google Data fournit une fonction, generate_auth_sub_url() pour générer cette URL. Le code ci-dessous configure un lien vers la page AuthSubRequest.

import gdata.gauth

def GetAuthSubUrl():
  next = 'http://www.example.com/myapp.py'
  scopes = ['https://sites.google.com/feeds/']
  secure = True
  session = True
  return gdata.gauth.generate_auth_sub_url(next, scopes, secure=secure, session=session)

print '<a href="%s">Login to your Google account</a>' % GetAuthSubUrl()

Si vous souhaitez authentifier les utilisateurs sur un domaine hébergé par G Suite, transmettez le nom de domaine à generate_auth_sub_url():

def GetAuthSubUrl():
  domain = 'example.com'
  next = 'http://www.example.com/myapp.py'
  scopes = ['https://sites.google.com/feeds/']
  secure = True
  session = True
  return gdata.gauth.generate_auth_sub_url(next, scopes, secure=secure, session=session, domain=domain)

La méthode generate_auth_sub_url() utilise plusieurs paramètres (correspondant aux paramètres de requête utilisés par la AuthSubRequest):

  • L'URL suivante (URL vers laquelle Google redirigera les internautes) une fois que l’utilisateur s’est connecté à son compte et a accordé l’accès ; http://www.example.com/myapp.py dans l'exemple ci-dessus
  • Le champ d'application : https://sites.google.com/feeds/
  • secure : valeur booléenne indiquant si le jeton sera utilisé en mode sécurisé et enregistré ou non ; True dans l'exemple ci-dessus
  • session : deuxième valeur booléenne indiquant si le jeton à usage unique sera ultérieurement échangé contre un jeton de session ou non. True dans l'exemple ci-dessus

Passer à un jeton de session

Consultez la page Utiliser AuthSub avec les bibliothèques clientes de l'API Google Data.

Récupérer des informations sur un jeton de session

Consultez la page Utiliser AuthSub avec les bibliothèques clientes de l'API Google Data.

Révoquer un jeton de session

Consultez la page Utiliser AuthSub avec les bibliothèques clientes de l'API Google Data.

Conseil: Une fois que votre application a acquis un jeton de sessions de longue durée, stocker ce jeton dans votre base de données afin de le rappeler pour une utilisation ultérieure. Il n'est pas nécessaire de renvoyer l'utilisateur vers AuthSub à chaque exécution de votre application. Utilisez client.auth_token = gdata.gauth.AuthSubToken(TOKEN_STR) pour définir un jeton existant sur le client.

OAuth pour le Web ou les applications installées/mobiles

OAuth peut être utilisé à la place d'AuthSub et est destiné aux applications Web. OAuth revient à utiliser le mode enregistré et sécurisé d'AuthSub. car toutes les demandes de données doivent être signées numériquement et vous devez enregistrer votre domaine.

Afficher les instructions pour intégrer OAuth dans votre application installée

Récupérer un jeton de requête

Consultez la page Utiliser OAuth avec les bibliothèques clientes de l'API Google Data.

Autoriser un jeton de requête

Consultez la page Utiliser OAuth avec les bibliothèques clientes de l'API Google Data.

Passer à un jeton d'accès

Consultez la page Utiliser OAuth avec les bibliothèques clientes de l'API Google Data.

Conseil: Une fois que votre application a acquis un jeton d'accès OAuth, stocker ce jeton dans votre base de données afin de le rappeler pour une utilisation ultérieure. Il n'est pas nécessaire de renvoyer l'utilisateur via OAuth à chaque exécution de votre application. Utilisez client.auth_token = gdata.oauth.OAuthToken(TOKEN_STR, TOKEN_SECRET) pour définir un jeton existant sur le client.

ClientLogin pour les applications installées/mobiles

ClientLogin doit être utilisé par les applications installées ou mobiles qui doivent à authentifier leurs utilisateurs auprès de comptes Google. Lors de la première exécution, votre application invite l'utilisateur à saisir son nom d'utilisateur et son mot de passe. Dans les requêtes ultérieures, un jeton d'authentification est référencé.

Afficher les instructions pour intégrer ClientLogin à votre application installée

Pour utiliser ClientLogin, appelez la méthode ClientLogin() de l'objet SitesClient, héritée de GDClient Spécifiez l'adresse e-mail et le mot de passe de l'utilisateur au nom duquel votre client envoie les requêtes. Exemple :

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1')
client.ClientLogin('user@gmail.com', 'pa$$word', client.source);

Conseil: Une fois que votre application a authentifié l'utilisateur pour la première fois, stockez le jeton d'authentification dans votre base de données afin de le rappeler pour une utilisation ultérieure. Il n'est pas nécessaire de demander à l'utilisateur son mot de passe à chaque exécution de votre application. Pour en savoir plus, consultez la section Rappeler un jeton d'authentification.

Pour en savoir plus sur l'utilisation de ClientLogin dans vos applications Python, consultez la page Utiliser ClientLogin avec les bibliothèques clientes de l'API Google Data.

Haut de page

Flux d'actualisation

Le flux de sites peut être utilisé pour répertorier les sites Google Sites d'un utilisateur ou pour lesquels il dispose d'autorisations d'affichage. Elle peut également être utilisée pour modifier le nom d'un site existant. Enfin, pour les domaines G Suite, il permet également de créer et/ou copier un l'intégralité du site.

Répertorier les sites

Pour répertorier les sites auxquels un utilisateur a accès, utilisez la méthode GetSiteFeed() du client. La méthode accepte un attribut uri, que vous pouvez utiliser pour spécifier un URI de flux de site alternatif. Par défaut, le GetSiteFeed() utilise le nom de site et le domaine définis sur l'objet client. Consultez la section Premiers pas pour en savoir plus plus d'informations sur la définition de ces valeurs sur votre objet client.

Voici un exemple de récupération de la liste des sites de l'utilisateur authentifié:

feed = client.GetSiteFeed()

for entry in feed.entry:
  print '%s (%s)' % (entry.title.text, entry.site_name.text)
  if entry.summary.text:
    print 'description: ' + entry.summary.text
  if entry.FindSourceLink():
    print 'this site was copied from site: ' + entry.FindSourceLink()
  print 'acl feed: %s\n' % entry.FindAclLink()
  print 'theme: ' + entry.theme.text

L'extrait ci-dessus imprime le titre et le nom du site, à partir duquel il a été copié et l'URI du flux de la LCA correspondante.

Création de sites

Remarque: Cette fonctionnalité n'est disponible que pour les domaines G Suite.

Les nouveaux sites peuvent être provisionnés en appelant la méthode CreateSite() de la bibliothèque. Comme pour l'outil d'aide GetSiteFeed(), CreateSite() accepte également une l'argument facultatif uri, que vous pouvez utiliser pour spécifier un URI de flux de site alternatif (dans le cas de la création le site sous un domaine différent de celui défini dans votre objet SitesClient).

Voici un exemple de création d'un site dont le thème est "slate" et en fournissant une titre et description (facultative) :

client.domain = 'example2.com'  # demonstrates creating a site under a different domain.

entry = client.CreateSite('Title For My Site', description='Site to hold precious memories', theme='slate')
print 'Site created! View it at: ' + entry.GetAlternateLink().href

La demande ci-dessus crée un site sous le domaine G Suite example2.com. Ainsi, l'URL du site se présentera comme suit : https://sites.google.com/a/exemple2.com/titre-pour-mon-site.

Si le site a bien été créé, le serveur renvoie une réponse gdata.sites.data.SiteEntry contenant les éléments ajoutés par le serveur: un lien vers le site, un lien vers le flux des LCA du site, le nom du site, le titre, le résumé, etc.

Copie d'un site

Remarque: Cette fonctionnalité n'est disponible que pour les domaines G Suite.

CreateSite() permet également de copier un site existant. Pour ce faire, transmettez l'argument de mot clé source_site. Tous les sites copiés contiennent ce lien, qui est accessible via entry.FindSourceLink(). Voici un exemple de duplication du site créé dans la section Créer des sites:

copied_site = client.CreateSite('Copy of Title For My Site', description='My Copy', source_site=entry.FindSourceLink())
print 'Site copied! View it at: ' + copied_site.GetAlternateLink().href

Points importants:

  • Seuls les sites et les modèles de site appartenant à l'utilisateur authentifié peuvent être copiés.
  • Un modèle de site peut également être copié. Un site est utilisé comme modèle si la case "Publier ce site comme modèle" est coché sur la page des paramètres de Google Sites.
  • Vous pouvez copier un site d'un autre domaine, tant que vous n'êtes pas indiqué comme propriétaire du site source.

Mettre à jour les métadonnées d'un site

Pour mettre à jour le titre ou le résumé d'un site, vous avez besoin d'un SiteEntry contenant le site en question. Ce L'exemple utilise la méthode GetEntry() pour récupérer d'abord un élément SiteEntry, puis modifier son titre, sa description et son tag de catégorie:

uri = 'https://sites.google.com/feeds/site/example2.com/title-for-my-site'
site_entry = client.GetEntry(uri, desired_class=gdata.sites.data.SiteEntry)

site_entry.title.text = 'Better Title'
site_entry.summary.text = 'Better Description'
category_name = 'My Category'
category = atom.data.Category(
    scheme=gdata.sites.data.TAG_KIND_TERM,
    term=category_name)
site_entry.category.append(category)
updated_site_entry = client.Update(site_entry)

# To force the update, even if you do not have the latest changes to the entry:
# updated_site_entry = client.Update(site_entry, force=True)

Haut de page

Récupération du flux d'activité...

Remarque: Pour accéder à ce flux, vous devez être collaborateur ou propriétaire du site. Votre client doit s'authentifier à l'aide d'un jeton AuthSub, OAuth ou ClientLogin. Consultez la section S'authentifier auprès du service Sites.

Vous pouvez récupérer l'activité récente (modifications) d'un site en récupérant le flux d'activités. La méthode GetActivityFeed() de la bibliothèque permet d'accéder à ce flux:

print "Fetching activity feed of '%s'...\n" % client.site
feed = client.GetActivityFeed()

for entry in feed.entry:
  print '%s [%s on %s]' % (entry.title.text, entry.Kind(), entry.updated.text)

L'appel de GetActivityFeed() renvoie un objet gdata.sites.data.ActivityFeed contenant une liste de gdata.sites.data.ActivityEntry Chaque entrée d'activité contient des informations sur d'une modification apportée au Site.

Haut de page

Récupération de l'historique des révisions

Remarque: Pour accéder à ce flux, vous devez être collaborateur ou propriétaire du site. Votre client doit s'authentifier à l'aide d'un jeton AuthSub, OAuth ou ClientLogin. Consultez la section S'authentifier auprès du service Sites.

Le flux des révisions fournit des informations sur l'historique des révisions pour chaque entrée de contenu. GetRevisionFeed() peut être utilisée pour récupérer les révisions d'une entrée de contenu donnée. La méthode accepte un uri facultatif qui accepte un gdata.sites.data.ContentEntry, l'URI complet d'une entrée de contenu ou un ID d'entrée de contenu.

Cet exemple interroge le flux de contenu et extrait le flux de révision pour la première entrée de contenu:

print "Fetching content feed of '%s'...\n" % client.site
content_feed = client.GetContentFeed()
content_entry = content_feed.entry[0]

print "Fetching revision feed of '%s'...\n" % content_entry.title.text
revision_feed = client.GetRevisionFeed(content_entry)

for entry in revision_feed.entry:
  print entry.title.text
  print ' new version on:\t%s' % entry.updated.text
  print ' view changes:\t%s' % entry.GetAlternateLink().href
  print ' current version:\t%s...\n' % str(entry.content.html)[0:100]

L'appel de GetRevisionFeed() renvoie un objet gdata.sites.data.RevisionFeed contenant une liste de gdata.sites.data.RevisionEntry Chaque entrée de révision contient des informations telles que le contenu à cette révision, le numéro de version et la date de création de la nouvelle version.

Haut de page

Flux de contenu

Récupérer le flux de contenu

Remarque: Le flux de contenu peut nécessiter ou non une authentification. selon les autorisations de partage du site. Si le site n'est pas public, votre client doit s'authentifier à l'aide d'un jeton AuthSub, OAuth ou ClientLogin. Voir S'authentifier auprès du service Sites

Le flux de contenu renvoie le contenu le plus récent d'un site. Il est accessible en appelant la bibliothèque La méthode GetContentFeed(), qui accepte un paramètre de chaîne uri facultatif pour transmettre une requête personnalisée.

Voici un exemple d'extraction de l'intégralité du flux de contenu et d'impression d'éléments intéressants:

print "Fetching content feed of '%s'...\n" % client.site
feed = client.GetContentFeed()

for entry in feed.entry:
  print '%s [%s]' % (entry.title.text, entry.Kind())

  # Common properties of all entry kinds.
  print ' content entry id: ' + entry.GetNodeId()
  print ' revision:\t%s' % entry.revision.text
  print ' updated:\t%s' % entry.updated.text

  if entry.page_name:
    print ' page name:\t%s' % entry.page_name.text

  if entry.content:
    print ' content\t%s...' % str(entry.content.html)[0:100]

  # Subpages/items will have a parent link.
  parent_link = entry.FindParentLink()
  if parent_link:
    print ' parent link:\t%s' % parent_link

  # The alternate link is the URL pointing to Google Sites.
  if entry.GetAlternateLink():
    print ' view in Sites:\t%s' % entry.GetAlternateLink().href

  # If this entry is a filecabinet, announcementpage, etc., it will have a feed of children.
  if entry.feed_link:
    print ' feed of items:\t%s' % entry.feed_link.href

  print

Conseil: entry.Kind() peut être utilisé pour déterminer le type d'une entrée.

L'objet feed obtenu est un gdata.sites.data.ContentFeed contenant une liste. sur gdata.sites.data.ContentEntry. Chaque entrée représente une page ou un élément différent dans site de l'utilisateur et comporte des éléments spécifiques au type d'entrée. Consultez l'exemple d'application pour mieux comprendre de certaines des propriétés disponibles dans chaque genre d'entrée.

Haut de page

Exemples de requêtes de flux de contenu

Vous pouvez effectuer une recherche dans le flux de contenu à l'aide de certains paramètres de requête standards de l'API Google Data. et celles spécifiques à l'API Google Sites classique. Pour obtenir des informations plus détaillées et la liste complète des paramètres pris en charge, consultez la Guide de référence

Remarque: Les exemples de cette section utilisent la méthode d'assistance gdata.sites.client.MakeContentFeedUri(). pour créer l'URI de base du flux de contenu.

Récupérer des genres d'entrées spécifiques

Pour ne récupérer qu'un type d'entrée particulier, utilisez le paramètre kind. Par exemple, cet extrait ne renvoie que des entrées attachment:

kind = 'webpage'

print 'Fetching only %s entries' % kind
uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind)
feed = client.GetContentFeed(uri=uri)

Pour renvoyer plusieurs types, séparez chaque kind par une virgule. Par exemple, cet extrait renvoie filecabinet et listpage entrées:

kind = ','.join(['filecabinet', 'listpage'])

print 'Fetching only %s entries' % kind
uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind)
feed = client.GetContentFeed(uri=uri)

Récupérer une page par son chemin d'accès

Si vous connaissez le chemin relatif d'une page du site Google, vous pouvez utiliser le paramètre path pour explorer cette page en particulier. Cet exemple renverrait la page située à l'adresse http://sites.google.com/domainName/siteName/path/to/the/page:

path = '/path/to/the/page'

print 'Fetching page by its path: ' + path
uri = '%s?path=%s' % (client.MakeContentFeedUri(), path)
feed = client.GetContentFeed(uri=uri)

Récupérer toutes les entrées d'une page parente

Si vous connaissez l'ID d'entrée de contenu d'une page (par exemple, "1234567890" dans l'exemple ci-dessous), vous pouvez utiliser le paramètre parent. pour récupérer toutes ses entrées enfants (le cas échéant):

parent = '1234567890'

print 'Fetching all children of parent entry: ' + parent
uri = '%s?parent=%s' % (client.MakeContentFeedUri(), parent)
feed = client.GetContentFeed(uri=uri)

Pour en savoir plus sur les autres paramètres, consultez le guide de référence.

Haut de page



Création de contenu

Remarque:Avant de créer le contenu d'un site, assurez-vous de l'avoir configuré dans le client.
client.site = "siteName"

Vous pouvez créer du contenu (pages Web, pages de liste, classeurs, pages d'annonces, etc.) à l'aide de CreatePage(). Le premier argument de cette méthode doit être le type de page à créer, suivi du titre et de son contenu HTML.

Pour obtenir la liste des types de nœuds compatibles, consultez le paramètre kind dans le guide de référence.

Création de nouveaux éléments / pages

Cet exemple crée un élément webpage sous le niveau supérieur, inclut du code XHTML pour le corps de la page, et définit le titre de l'en-tête sur "Nouveau titre de la page Web" :

entry = client.CreatePage('webpage', 'New WebPage Title', html='<b>HTML content</b>')
print 'Created. View it at: %s' % entry.GetAlternateLink().href

Si la requête aboutit, entry contient une copie de l'entrée créée sur le serveur, sous la forme d'un gdata.sites.gdata.ContentEntry.

Pour créer un genre d'entrée plus complexe qui est renseigné lors de la création (par exemple, un listpage avec des en-têtes de colonne), vous devez créer gdata.sites.data.ContentEntry manuellement, renseignez les propriétés qui vous intéressent, puis appelez client.Post().

Créer des articles/pages sous des chemins d'URL personnalisées

Par défaut, l'exemple précédent est créé sous l'URL http://sites.google.com/domainName/siteName/new-webpage-title et avoir pour en-tête "Nouveau titre de la page Web". Autrement dit, le titre est normalisé en new-webpage-title pour l'URL. Pour personnaliser le chemin de l'URL d'une page, vous pouvez définir la propriété page_name sur l'entrée de contenu. L'outil d'aide CreatePage() l'indique en tant qu'argument de mot clé facultatif.

Cet exemple crée une page filecabinet avec l'en-tête "File Storage" (Stockage de fichiers), mais crée la page sous l'URL http://sites.google.com/domainName/siteName/files (au lieu de http://sites.google.com/domainName/siteName/file-storage) en spécifiant la propriété page_name.

entry = client.CreatePage('filecabinet', 'File Storage', html='<b>HTML content</b>', page_name='files')
print 'Created. View it at: ' + entry.GetAlternateLink().href

Le serveur utilise les règles de priorité suivantes pour nommer le chemin d'URL d'une page:

  1. page_name, le cas échéant. Doit respecter les a-z, A-Z, 0-9, -, _.
  2. title ne doit pas être nulle si le nom de la page n'est pas indiqué. La normalisation consiste à supprimer et réduire les espaces blancs sur "-" et supprimer les caractères qui ne correspondent pas à a-z, A-Z, 0-9, -, _.

Créer des sous-pages

Pour créer des sous-pages (enfants) sous une page parente, utilisez l'argument de mot clé parent de CreatePage(). Le parent peut être soit un gdata.sites.gdata.ContentEntry, soit une chaîne représentant le l'identifiant complet de l'entrée du contenu.

Cet exemple interroge le flux de contenu sur les announcementpage et crée un announcement sous le premier trouvé:

uri = '%s?kind=%s' % (client.MakeContentFeedUri(), 'announcementpage')
feed = client.GetContentFeed(uri=uri)

entry = client.CreatePage('announcement', 'Party!!', html='My place, this weekend', parent=feed.entry[0])
print 'Posted!'

Importer des fichiers

Tout comme dans Google Sites, l'API permet d'importer des pièces jointes dans un classeur ou une page parente. Vous devez importer les pièces jointes à une page parent. Vous devez donc définir un lien parent sur le ContentEntry que vous essayez d'importer. Pour en savoir plus, consultez la section Créer des sous-pages.

La méthode UploadAttachment() de la bibliothèque cliente fournit l'interface permettant d'importer des pièces jointes.

Transfert de pièces jointes

Cet exemple importe un fichier PDF dans le premier élément filecabinet trouvé dans le flux de contenu de l'utilisateur. La pièce jointe est créée avec le titre "New Employee Handbook" (Manuel du nouveau personnel). et une description (facultative) : "Paquet RH".

uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'filecabinet')
feed = client.GetContentFeed(uri=uri)

attachment = client.UploadAttachment('/path/to/file.pdf', feed.entry[0], content_type='application/pdf',
                                     title='New Employee Handbook', description='HR Packet')
print 'Uploaded. View it at: %s' % attachment.GetAlternateLink().href

Si l'importation réussit, attachment contient une copie de la pièce jointe créée sur le serveur.

Importation d'une pièce jointe dans un dossier

Les classements de Google Sites peuvent prendre en charge des dossiers. Le UploadAttachment() fournit un mot clé supplémentaire l'argument folder_name que vous pouvez utiliser pour importer une pièce jointe dans un dossier filecabinet. Indiquez simplement le nom de ce dossier:

import gdata.data

ms = gdata.data.MediaSource(file_path='/path/to/file.pdf', content_type='application/pdf')
attachment = client.UploadAttachment(ms, feed.entry[0], title='New Employee Handbook',
                                     description='HR Packet', folder_name='My Folder')

Notez que cet exemple transmet un objet gdata.data.MediaSource à UploadAttachment() à la place. d'un chemin de fichier. Il ne transmet pas non plus de type de contenu. Le type de contenu est spécifié dans l'objet MediaSource.

Pièces jointes Web

Les pièces jointes Web sont des types de pièces jointes particuliers. Ce sont des liens vers d'autres fichiers sur le Web que vous pouvez ajouter à vos fiches filecabinet. Cette fonctionnalité est semblable à l'option Ajouter un fichier à l'aide d'une URL. dans l'interface utilisateur de Google Sites.

Remarque: Les pièces jointes Web ne peuvent être créées qu'à partir d'un filecabinet. Vous ne pouvez pas les importer vers d'autres types de pages.

Dans cet exemple, une pièce jointe Web est créée sous le premier élément filecabinet trouvé dans le flux de contenu de l'utilisateur. Son titre et sa description (facultative) sont définis sur "GoogleLogo". et « jolies couleurs », respectivement.

uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'filecabinet')
feed = client.GetContentFeed(uri=uri)

parent_entry = feed.entry[0]
image_url = 'http://www.google.com/images/logo.gif'
web_attachment = client.CreateWebAttachment(image_url, 'image/gif', 'GoogleLogo',
                                            parent_entry, description='nice colors')

print 'Created!'

L'appel crée un lien pointant vers l'image sur "http://www.google.com/images/logo.gif" dans filecabinet.

Haut de page



Mise à jour du contenu

Mise à jour des métadonnées et/ou du contenu HTML d'une page

Les métadonnées (title, pageName, etc.) et le contenu de la page de tout type d'entrée peuvent être modifiés à l'aide de la méthode Update() du client.

Vous trouverez ci-dessous un exemple de mise à jour d'une listpage avec les modifications suivantes:

  • Le titre est remplacé par "Titre mis à jour".
  • Le contenu HTML de la page est remplacé par "Contenu HTML mis à jour"
  • L'en-tête de la première colonne de la liste est remplacé par "Propriétaire".
uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'listpage')
feed = client.GetContentFeed(uri=uri)

old_entry = feed.entry[0]

# Update the listpage's title, html content, and first column's name.
old_entry.title.text = 'Updated Title'
old_entry.content.html = 'Updated HTML Content'
old_entry.data.column[0].name = 'Owner'

# You can also change the page's webspace page name on an update.
# old_entry.page_name = 'new-page-path'

updated_entry = client.Update(old_entry)
print 'List page updated!'

Remplacer le contenu et les métadonnées d'une pièce jointe

Vous pouvez remplacer le contenu d'une pièce jointe en créant un objet MediaSource avec le contenu du nouveau fichier et en appelant la méthode Update() du client. La pièce jointe les métadonnées (comme le titre et la description) peuvent également être modifiées, ou simplement les métadonnées. Cet exemple illustre la mise à jour simultanée du contenu et des métadonnées d'un fichier:

import gdata.data

# Load the replacement content in a MediaSource. Also change the attachment's title and description.
ms = gdata.data.MediaSource(file_path='/path/to/replacementContent.doc', content_type='application/msword')
existing_attachment.title.text = 'Updated Document Title'
existing_attachment.summary.text = 'version 2.0'

updated_attachment = client.Update(existing_attachment, media_source=ms)
print "Attachment '%s' changed to '%s'" % (existing_attachment.title.text, updated_attachment.title.text)

Haut de page



Suppression de contenu

Pour supprimer une page ou un élément d'un site Google, commencez par récupérer l'entrée de contenu, puis appelez la méthode Delete() du client.

client.Delete(content_entry)

Vous pouvez également transmettre à la méthode Delete() le lien edit de l'entrée de contenu et/ou forcer la suppression:

# force=True sets the If-Match: * header instead of using the entry's ETag.
client.Delete(content_entry.GetEditLink().href, force=True)

Pour en savoir plus sur les ETags, consultez le guide de référence des API Google Data.

Haut de page



Téléchargement des pièces jointes

Chaque entrée attachment contient un lien de contenu src qui permet de télécharger le contenu du fichier. Le client Sites contient une méthode d'assistance pour accéder au fichier et le télécharger à partir du lien suivant: DownloadAttachment(). Elle accepte un URI gdata.sites.data.ContentEntry ou de téléchargement pour son premier argument, ainsi qu'un chemin d'accès pour enregistrer la pièce jointe. comme seconde.

Cet exemple extrait une entrée de pièce jointe particulière (en interrogeant son lien self) et télécharge le fichier au chemin spécifié:

uri = 'https://sites.google.com/feeds/content/site/siteName/1234567890'
attachment = client.GetEntry(uri, desired_class=gdata.sites.data.ContentEntry)

print "Downloading '%s', a %s file" % (attachment.title.text, attachment.content.type)
client.DownloadAttachment(attachment, '/path/to/save/test.pdf')

print 'Downloaded!'

Il appartient au développeur de l'application de spécifier une extension de fichier adaptée au type de contenu de la pièce jointe. Type de contenu se trouve dans entry.content.type.

Dans certains cas, vous ne pourrez peut-être pas télécharger le fichier sur le disque (si votre application s'exécute dans Google App Engine, par exemple). Dans ces situations, utilisez _GetFileContent() pour récupérer le contenu du fichier et le stocker en mémoire.

Cet exemple de téléchargement est une pièce jointe à la mémoire.

try:
  file_contents = client._GetFileContent(attachment.content.src)
  # TODO: Do something with the file contents
except gdata.client.RequestError, e:
  raise e

Haut de page

Flux LCA

Présentation des autorisations de partage (LCA)

Chaque entrée de LCA représente un rôle d'accès attribué à une entité spécifique : un utilisateur, un groupe d'utilisateurs, un domaine, ou l'accès par défaut (qui est un site public). Les entrées ne s'affichent que pour les entités disposant d'un accès explicite ; une seule entrée s'affiche. pour chaque adresse e-mail indiquée dans la section "Personnes ayant accès" dans l'écran de partage de l'interface utilisateur de Google Sites. Ainsi, les administrateurs de domaine ne seront pas affichés, même s'ils ont un accès implicite à un site.

Rôles

L'élément du rôle représente le niveau d'accès qu'une entité peut avoir. L'élément gAcl:role peut avoir quatre valeurs:

  • reader : lecteur (équivalent de l'accès en lecture seule).
  • writer : collaborateur (équivalent à l'accès en lecture/écriture).
  • propriétaire : généralement l'administrateur du site (qui équivaut à un accès en lecture/écriture).

Niveaux d'accès

L'élément du champ d'application représente l'entité disposant de ce niveau d'accès. Il existe quatre types d'éléments gAcl:scope possibles:

  • utilisateur : valeur d'adresse e-mail, par exemple "utilisateur@gmail.com".
  • groupe : adresse e-mail d'un groupe Google, par exemple "groupe@domaine.com".
  • domaine : nom de domaine G Suite, par exemple "domaine.com".
  • default : il n'existe qu'un seul champ d'application possible de type "default", qui n'a aucune valeur. (par exemple, <gAcl:scope type="default">). Ce champ d'application contrôle l'accès par défaut à tout utilisateur sur un site public.

Remarque: Les domaines ne peuvent pas avoir de valeur gAcl:role. défini sur "owner" (propriétaire) accès, ils ne peuvent être que lecteurs ou rédacteurs.

Récupérer le flux LCA

Le flux LCA peut être utilisé pour contrôler les autorisations de partage d'un site et peut être récupéré à l'aide de la méthode GetAclFeed().

L'exemple suivant récupère le flux LCA du site actuellement défini sur l'objet SitesClient, et affiche les entrées d'autorisation:

print "Fetching acl permissions of site '%s'...\n" % client.site

feed = client.GetAclFeed()
for entry in feed.entry:
  print '%s (%s) - %s' % (entry.scope.value, entry.scope.type, entry.role.value)

Après une requête réussie, feed sera un objet gdata.sites.data.AclFeed contenant une fiche gdata.sites.data.AclEntry.

Si vous travaillez avec des entrées dans le SiteFeed, chaque SiteEntry contient un lien vers son flux LCA. Par exemple, l'extrait de code suivant extrait le premier site du flux de site de l'utilisateur et interroge son flux LCA:

feed = client.GetSiteFeed()
site_entry = feed.entry[0]

print "Fetching acl permissions of site '%s'...\n" % site_entry.site_name.text
feed = client.GetAclFeed(uri=site_entry.FindAclLink())

Partager un site

Remarque: Certaines LCA de partage ne sont possibles que si le domaine est configuré. pour accorder ces autorisations (par exemple, si le partage en dehors du domaine est activé pour les domaines G Suite, etc.).

Pour partager un site Google à l'aide de l'API, créez un gdata.sites.gdata.AclEntry avec les identifiants de Valeurs gdata.acl.data.AclScope et gdata.acl.data.AclRole. Consultez le Section Présentation du flux LCA pour la AclScope possible et AclRoles.

L'exemple suivant accorde des autorisations de lecture sur le site à l'utilisateur "utilisateur@example.com" :

import gdata.acl.data

scope = gdata.acl.data.AclScope(value='user@example.com', type='user')
role = gdata.acl.data.AclRole(value='reader')
acl = gdata.sites.gdata.AclEntry(scope=scope, role=role)

acl_entry = client.Post(acl, client.MakeAclFeedUri())
print "%s %s added as a %s" % (acl_entry.scope.type, acl_entry.scope.value, acl_entry.role.value)

Partage au niveau du groupe et du domaine

De la même manière que pour partager un site avec un seul utilisateur, vous pouvez partager un site sur une groupe Google ou domaine G Suite. Les valeurs scope nécessaires sont listées ci-dessous.

Partage avec l'adresse e-mail d'un groupe:

scope = gdata.acl.data.AclScope(value='group_name@example.com', type='group')

Partage avec l'ensemble d'un domaine:

scope = gdata.acl.data.AclScope(value='example.com', type='domain')

Le partage au niveau du domaine n'est possible que pour les domaines G Suite, et uniquement pour le domaine sur lequel le site est hébergé. Par exemple, http://sites.google.com/a/domain1.com/siteA peut seulement partager l'intégralité du site avec domain1.com, et non domain2.com. Les sites qui qui ne sont pas hébergés sur un domaine G Suite (par exemple, http://sites.google.com/site/siteB) ne peuvent pas inviter de domaines.

Modification des autorisations de partage

Pour une autorisation de partage existante sur un site, récupérez d'abord l'AclEntry en question, puis modifiez l'autorisation puis appelez la méthode Update() du client pour modifier la LCA sur le serveur.

Cet exemple modifie le acl_entry précédent de la section Partager un site, en modifiant "utilisateur@example.com" pour être écrivain (collaborateur):

acl_entry.role.value = 'writer'
updated_acl = client.Update(acl_entry)

# To force the update, even if you do not have the latest changes to the entry:
# updated_acl = client.Update(acl_entrys, force=True)

Pour en savoir plus sur les ETags, consultez le guide de référence des API Google Data.

Suppression des autorisations de partage...

Pour supprimer une autorisation de partage, commencez par récupérer AclEntry, puis appelez la méthode Delete() du client.

client.Delete(acl_entry)

Vous pouvez également transmettre à la méthode Delete() le lien edit de l'entrée de la LCA et/ou forcer la suppression:

# force=True sets the If-Match: * header instead of using the entry's ETag.
client.Delete(acl_entry.GetEditLink().href, force=True)

Pour en savoir plus sur les ETags, consultez le guide de référence des API Google Data.

Haut de page

Sujets spéciaux

Récupérer un flux ou une entrée

Si vous souhaitez récupérer un flux ou une entrée déjà récupérés, vous pouvez gagner en efficacité en indiquant au serveur d'envoyer la liste ou l'entrée uniquement si elle a été modifiée depuis la dernière fois que vous l'avez récupérée.

Pour effectuer ce type de récupération conditionnelle, transmettez une valeur ETag à GetEntry(). Par exemple, si vous aviez un objet entry existant:

import gdata.client

try:
  entry = client.GetEntry(entry.GetSelfLink().href, desired_class=gdata.sites.data.ContentEntry, etag=entry.etag)
except gdata.client.NotModified, error:
  print 'You have the latest copy of this entry'
  print error

Si GetEntry() génère l'exception gdata.client.NotModified, la méthode L'ETag correspond à la version sur le serveur, ce qui signifie que vous disposez de la copie la plus récente. Toutefois, si un autre client/utilisateur a apporté des modifications, la nouvelle entrée est renvoyée dans entry. et aucune exception ne sera levée.

Pour en savoir plus sur les ETags, consultez le guide de référence des API Google Data.

Haut de page