Guide Python

Important:Ce document a été rédigé avant 2012. Les options d'authentification décrites dans ce document (OAuth 1.0, AuthSub et ClientLogin) ont été officiellement abandonnées 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. Pour obtenir de l'aide sur la configuration de la bibliothèque cliente, consultez la page Premiers pas avec la bibliothèque cliente Python Google Data. 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 Sites, consultez le guide du protocole.

Audience

Ce document est destiné aux développeurs qui souhaitent écrire des applications clientes interagissant 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 ou d'une version ultérieure, ainsi que des modules listés sur la page wiki DependencyModules. Après avoir téléchargé la bibliothèque cliente, consultez Premiers pas avec la bibliothèque Python Google Data pour obtenir de l'aide concernant l'installation et l'utilisation du client.

Exécuter l'exemple

Vous trouverez un exemple complet 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 invite à saisir ces valeurs. L'exemple permet à l'utilisateur d'effectuer un certain nombre d'opérations qui montrent comment utiliser l'API de la version classique de Sites. Par conséquent, vous devez vous authentifier pour effectuer certaines opérations (par exemple, modifier le contenu). Le programme vous invite é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 devez également configurer un objet SitesClient, qui représente une connexion client à l'API de la version classique de Sites. 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 travailler sur 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 respecter le format suivant: company-applicationname-version

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

Authentification dans 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 aux flux privés et publics, 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 d'un site public, mais ne pas le mettre à jour (ce qui nécessite un client authentifié). Pour ce faire, utilisez l'authentification par nom d'utilisateur/mot de passe ClientLogin, AuthSub ou OAuth.

Pour plus d'informations sur AuthSub, OAuth et ClientLogin, consultez la page 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 de comptes 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. Seul un jeton AuthSub est requis.

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 redirigeant l'utilisateur vers la page d'approbation AuthSub pour l'authentifier et demander l'accès à ses documents. La bibliothèque cliente Python Google Data fournit une fonction generate_auth_sub_url() permettant de générer cette URL. Le code ci-dessous établit 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 le gestionnaire AuthSubRequest):

  • L'URL next (suivante) : URL vers laquelle Google redirigera l'utilisateur 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, une valeur booléenne indiquant si le jeton sera utilisé ou non en mode sécurisé et enregistré ; True dans l'exemple ci-dessus
  • session, une seconde valeur booléenne indiquant si le jeton à usage unique sera ultérieurement échangé contre un jeton de session (True dans l'exemple ci-dessus)

Passer à un jeton de session

Consultez la page Utiliser AuthSub avec les bibliothèques clientes des API Google Data.

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

Consultez la page Utiliser AuthSub avec les bibliothèques clientes des API Google Data.

Révoquer un jeton de session

Consultez la page Utiliser AuthSub avec les bibliothèques clientes des API Google Data.

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

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

OAuth peut être utilisé à la place d'AuthSub et est destiné aux applications Web. OAuth s'apparente au mode sécurisé et enregistré d'AuthSub dans la mesure où toutes les requêtes 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

Extraire un jeton de requête

Consultez la page Utiliser OAuth avec les bibliothèques clientes des API Google Data.

Autoriser un jeton de requête

Consultez la page Utiliser OAuth avec les bibliothèques clientes des API Google Data.

Passer à un jeton d'accès

Consultez la page Utiliser OAuth avec les bibliothèques clientes des API Google Data.

Conseil: Une fois que votre application a obtenu un jeton d'accès OAuth, stockez-le dans votre base de données pour 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 des comptes Google. À la première exécution, votre application invite l'utilisateur à saisir son nom d'utilisateur/mot de passe. Dans les requêtes suivantes, 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é de GDClient. Spécifiez l'adresse e-mail et le mot de passe de l'utilisateur au nom duquel votre client effectue des 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 l'application a authentifié l'utilisateur pour la première fois, stockez le jeton d'authentification dans votre base de données pour 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 l'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 des API Google Data.

Haut de page

Flux d'actualisation

Ce flux permet de répertorier les sites Google appartenant à un utilisateur ou pour lesquels il dispose d'autorisations de consultation. 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 de copier l'intégralité d'un 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 utilise un argument facultatif, uri, que vous pouvez utiliser pour spécifier un autre URI de flux de site. Par défaut, GetSiteFeed() utilise le nom de site et le domaine définis sur l'objet client. Consultez la section Premiers pas pour en savoir plus sur la définition de ces valeurs sur votre objet client.

Voici un exemple de récupération de la liste de 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 du site, son nom, le site à partir duquel il a été copié, ainsi que l'URI de son flux LCA.

Créer des 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 un argument facultatif, uri, que vous pouvez utiliser pour spécifier un autre URI de flux de site (si vous créez le site dans un domaine différent de celui défini sur votre objet SitesClient).

Voici un exemple de création d'un site avec le thème "Slate" et en fournissant un titre et une 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 requête ci-dessus crée un site sous le domaine G Suite example2.com. L'URL du site est donc https://sites.google.com/a/example2.com/titre-pour-mon-site.

Si le site a bien été créé, le serveur renvoie un objet gdata.sites.data.SiteEntry contenant des éléments ajoutés par le serveur: un lien vers le site, un lien vers le flux 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() peut également être utilisé pour copier un site existant. Pour ce faire, transmettez l'argument de mot clé source_site. Tous les sites copiés disposeront de 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 modèles de site appartenant à l'utilisateur authentifié peuvent être copiés.
  • Un modèle de site peut également être copié. Un site est considéré comme un modèle si le paramètre "Publier ce site comme modèle" est coché sur la page des paramètres de Google Sites.
  • Vous pouvez copier un site à partir d'un autre domaine, tant que vous n'êtes pas listé en tant que propriétaire sur le site source.

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

Pour modifier le titre ou le résumé d'un site, vous avez besoin d'un SiteEntry contenant le site en question. Cet exemple utilise la méthode GetEntry() pour d'abord récupérer un élément SiteEntry, puis modifier son titre, sa description et sa balise 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és

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

Vous pouvez récupérer l'activité récente d'un site (modifications) en récupérant le flux d'activité. 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 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 un collaborateur ou un propriétaire du site. Votre client doit s'authentifier à l'aide d'un jeton AuthSub, OAuth ou ClientLogin. Consultez la section Authentification auprès du service Sites.

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

L'exemple suivant 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 de la révision, le numéro de version et la date de création de la version.

Haut de page

Flux de contenu

Récupérer le flux de contenu

Remarque: En fonction des autorisations de partage du Site, le flux de contenu peut nécessiter ou non une authentification. Si le Site n'est pas public, votre client doit s'authentifier à l'aide d'un jeton AuthSub, OAuth ou ClientLogin. Consultez la section S'authentifier sur le service Sites.

Le flux de contenu affiche le contenu le plus récent d'un site. Vous pouvez y accéder en appelant la méthode GetContentFeed() de la bibliothèque, qui accepte un paramètre de chaîne uri facultatif pour transmettre une requête personnalisée.

Voici un exemple de récupération de l'intégralité du flux de contenu et d'impression de quelques é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 de gdata.sites.data.ContentEntry. Chaque entrée représente une page ou un élément différent du site de l'utilisateur et comporte des éléments spécifiques au type d'entrée dont il s'agit. Consultez l'exemple d'application pour une meilleure idée des propriétés disponibles pour chaque type d'entrée.

Haut de page

Exemples de requêtes pour le 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 de ceux spécifiques à l'API de la version classique de Sites. Pour obtenir des informations plus détaillées et la liste complète des paramètres acceptés, consultez le 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 types d'entrées spécifiques

Pour récupérer uniquement 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 élément kind par une virgule. Par exemple, cet extrait renvoie les entrées filecabinet et listpage:

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 chemin d'accès

Si vous connaissez le chemin relatif d'une page dans le site Google, vous pouvez utiliser le paramètre path pour récupérer cette page particulière. L'exemple suivant renvoie la page située à l'emplacement 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 paramètres supplémentaires, consultez le Guide de référence.

Haut de page



Création de contenu

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

Vous pouvez créer du contenu (pages Web, listes, 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éer des éléments / pages

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

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 renseigné lors de la création (par exemple, un listpage avec des en-têtes de colonne), vous devez créer le gdata.sites.data.ContentEntry manuellement, renseigner les propriétés qui vous intéressent et appeler client.Post().

Créer des éléments/pages sous des chemins d'URL personnalisés

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

Cet exemple crée une page filecabinet avec l'en-tête "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 de l'URL d'une page:

  1. page_name, le cas échéant. Doit être conforme à a-z, A-Z, 0-9, -, _.
  2. title, ne doit pas être nul si le nom de la page n'est pas indiqué. La normalisation consiste à rogner et réduire les espaces blancs en "-" 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 un gdata.sites.gdata.ContentEntry ou une chaîne représentant l'ID personnel complet de l'entrée du contenu.

Cet exemple interroge le flux de contenu pour les éléments announcementpage et crée un élément 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!'

Importation des fichiers...

Tout comme dans Google Sites, l'API permet l'importation de pièces jointes vers un classeur ou une page parent. Les pièces jointes doivent être importées sur une page parente. 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 une interface permettant d'importer des pièces jointes.

Importation des pièces jointes…

Dans cet exemple, un fichier PDF est importé dans le premier filecabinet trouvé dans le flux de contenu de l'utilisateur. La pièce jointe est créée avec le titre "New Employee Handbook" (Manuel de l'employé) et la description (facultative) "HR package" (paquet de ressources humaines).

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.

Importer une pièce jointe dans un dossier

Les classeurs dans les dossiers de prise en charge de Google Sites UploadAttachment() fournit un argument de mot clé supplémentaire, 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() au lieu d'un chemin de fichier. Elle ne transmet pas non plus de type de contenu. Au lieu de cela, le type de contenu est spécifié dans l'objet MediaSource.

Pièces jointes Web

Les pièces jointes Web sont des types spéciaux de pièces jointes. Il s'agit essentiellement de liens vers d'autres fichiers sur le Web que vous pouvez ajouter à vos fiches filecabinet. Cette fonctionnalité est analogue à la méthode d 'importation Ajouter un fichier par URL dans l'interface utilisateur de Google Sites.

Remarque: Les pièces jointes Web ne peuvent être créées qu'avec un filecabinet. Elles ne peuvent pas être importées sur d'autres types de pages.

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

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!'

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

Haut de page



Mettre à jour le contenu

Mettre à jour les métadonnées et/ou le contenu HTML d'une page

Les métadonnées (titre, 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'un listpage avec les modifications suivantes:

  • Le titre est remplacé par "Titre mis à jour".
  • Le contenu HTML de la page a été remplacé par le "Contenu HTML mis à jour".
  • Le premier en-tête de 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!'

Remplacement du contenu et des 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 nouveau contenu du fichier et en appelant la méthode Update() du client. Les métadonnées de la pièce jointe (telles que le titre et la description) peuvent également être mises à jour, ou simplement les métadonnées. Cet exemple montre comment mettre à jour simultanément le contenu et les 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 du 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 le lien edit de l'entrée de contenu à la méthode Delete() 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 ETag, 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 src de contenu 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 de ce lien: DownloadAttachment(). Il accepte un URI de téléchargement ou gdata.sites.data.ContentEntry pour son premier argument, ainsi qu'un chemin de fichier dans lequel enregistrer la pièce jointe en tant que deuxième argument.

Cet exemple extrait une entrée de pièce jointe particulière (en interrogeant son lien self) et télécharge le fichier vers le chemin d'accès 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. Le type de contenu est indiqué dans entry.content.type.

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

Dans cet exemple, le téléchargement est une pièce jointe en 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 la LCA du flux LCA représente un rôle d'accès accordé à 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 est affichée pour chaque adresse e-mail dans le panneau "Personnes disposant d'un accès" sur 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 de rôle représente un niveau d'accès qu'une entité peut avoir. Quatre valeurs sont possibles pour l'élément gAcl:role:

  • lecteur : lecteur (équivalent à un accès en lecture seule)
  • writer : collaborateur (équivalent à un accès en lecture/écriture).
  • owner : en général l'administrateur du site (équivalent à un accès en lecture/écriture).

Niveaux d'accès

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

  • utilisateur : valeur d'adresse e-mail, par exemple "utilisateur@gmail.com".
  • group : 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 particulier contrôle l'accès de tout utilisateur par défaut sur un site public.

Remarque: Les domaines ne peuvent pas avoir de valeur gAcl:role définie sur l'accès "propriétaire". Ils ne peuvent être que des lecteurs ou des rédacteurs.

Récupérer le flux LCA

Le flux LCA permet de 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 extrait 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 est un objet gdata.sites.data.AclFeed contenant une liste de gdata.sites.data.AclEntry.

Si vous travaillez avec des entrées dans le flux SiteFeed, chaque SiteEntry contient un lien vers son flux LCA. Par exemple, l'extrait suivant extrait le premier site du flux "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 autoriser de telles autorisations (par exemple, si le partage en dehors du domaine pour les domaines G Suite est activé, etc.).

Pour partager un site Google à l'aide de l'API, créez un gdata.sites.gdata.AclEntry avec les valeurs gdata.acl.data.AclScope et gdata.acl.data.AclRole souhaitées. Consultez la section Présentation des flux LCA pour connaître les valeurs AclScope et AclRoles possibles.

Cet exemple 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

Comme pour le partage d'un site avec un seul utilisateur, vous pouvez partager un site au sein d'un groupe Google ou d'un domaine G Suite. Les valeurs scope nécessaires sont listées ci-dessous.

Partage avec une adresse e-mail de groupe:

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

Partage avec un domaine entier:

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/domaine1.com/siteA ne peut partager l'intégralité du site qu'avec domaine1.com, et non avec domaine2.com. Les sites 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.

Modifier les autorisations de partage

Pour une autorisation de partage existante sur un site, commencez par récupérer le AclEntry en question, modifiez l'autorisation comme vous le souhaitez, puis appelez la méthode Update() du client pour modifier la LCA sur le serveur.

Cet exemple modifie notre acl_entry précédent de la section Partager un site en remplaçant "utilisateur@example.com" par un rédacteur (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 ETag, 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 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 ETag, 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 que vous avez déjà récupéré, vous pouvez améliorer l'efficacité en indiquant au serveur de n'envoyer la liste ou l'entrée que 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, l'ETag de l'entrée 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 n'est générée.

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

Haut de page