Guide de démarrage rapide: exécuter une application Search Console en Python

Cet exemple d'application Web affiche la liste des sites auxquels vous pouvez accéder, ainsi que les sitemaps, le cas échéant, pour chacun de ces sites.

Conditions requises

Pour exécuter ce programme, vous avez besoin des éléments suivants:

  • Un accès à Internet et à un navigateur Web pour autoriser l'application exemple
  • Un compte Google avec au moins un site Web validé dans la Google Search Console.
  • Python 3 et le framework d'application Web flask

Instructions

Pour cet exemple, vous allez adapter l'application exemple OAuth 2.0 pour les applications de serveur Web. Cet exemple d'application Python utilise le framework d'application Web flask pour exécuter une application Web qui gère des clés OAuth et appelle une API Google Cloud. Vous allez adapter l'exemple lié pour appeler l'API Search Console et imprimer les résultats sur une page Web.

Suivez les instructions de configuration de la page d'exemple OAuth mentionnée ci-dessus, copiez l'exemple de code, puis modifiez-le comme indiqué ci-dessous. Plus précisément, suivez les instructions de configuration de votre environnement de codage, configurez (ou réutilisez) un projet pouvant accéder à l'API Search Console dans la console Google Cloud et générez des identifiants pour une application Web.

Vous utiliserez l'exemple de code complet pour Python comme code source pour cet exemple.

Consultez la section Modifications ci-dessous pour connaître les modifications que vous devez apporter aux instructions associées.

Si vous devez accéder au client Python des API Google à partir d'un projet Google App Engine, vous devez utiliser un compte de service pour gérer vos autorisations.

Modifications

Lorsque vous suivez les instructions de la page exemple Oauth2 associée, apportez les modifications suivantes:

  1. Activez l'API Google Search Console plutôt que l'API Drive.
  2. Copiez l'exemple d'application à la fin du document OAUth dont le lien figure ci-dessus, et remplacez ce texte

    SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly']
    API_SERVICE_NAME = 'drive'
    API_VERSION = 'v2'
    
    Par ce qui suit :
    SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
    API_SERVICE_NAME = 'searchconsole'
    API_VERSION = 'v1'
    

  3. Remplacez le corps de la fonction test_api_request() du langage Python par le code suivant :

    @app.route('/test')
    def test_api_request():
      if 'credentials' not in flask.session:
        return flask.redirect('authorize')
    
      # Load credentials from the session.
      credentials = google.oauth2.credentials.Credentials(
          **flask.session['credentials'])
    
      # Retrieve list of properties in account
      search_console_service = googleapiclient.discovery.build(
          API_SERVICE_NAME, API_VERSION, credentials=credentials)
      site_list = search_console_service.sites().list().execute()
    
      # Filter for verified URL-prefix websites.
      verified_sites_urls = [s['siteUrl'] for s in site_list['siteEntry']
                            if s['permissionLevel'] != 'siteUnverifiedUser'
                            and s['siteUrl'].startswith('http')]
    
      # Print the sitemaps for all websites that you can access.
      results = '<!DOCTYPE html><html><body><table><tr><th>Verified site</th><th>Sitemaps</th></tr>'
      for site_url in verified_sites_urls:
    
        # Retrieve list of sitemaps submitted
        sitemaps = search_console_service.sitemaps().list(siteUrl=site_url).execute()
        results += '<tr><td>%s</td>' % (site_url)
    
        # Add a row with the site and the list of sitemaps
        if 'sitemap' in sitemaps:
          sitemap_list = "<br />".join([s['path'] for s in sitemaps['sitemap']])
        else:
          sitemap_list = "<i>None</i>"
        results += '<td>%s</td></tr>' % (sitemap_list)
    
      results += '</table></body></html>'
    
      # Save credentials back to session in case access token was refreshed.
      # ACTION ITEM: In a production app, you likely want to save these
      #              credentials in a persistent database instead.
      flask.session['credentials'] = credentials_to_dict(credentials)
    
      return results
    
    

  4. Lors de nos tests, nous avons dû définir manuellement OAUTHLIB_INSECURE_TRANSPORT sur 1 dans l'environnement Bash: export OAUTHLIB_INSECURE_TRANSPORT=1. Si vous rencontrez des erreurs concernant le protocole HTTPS requis pour exécuter l'application exemple, essayez de définir cette variable.