Guía de inicio rápido: Ejecuta una app de Search Console en Python

Esta app web de ejemplo imprime la lista de sitios a los que puedes acceder y, si corresponde, los mapas del sitio de cada uno de esos sitios.

Requisitos

Para ejecutar este programa, necesitarás lo siguiente:

  • Acceso a Internet y a un navegador web para autorizar la app de ejemplo
  • Una Cuenta de Google con al menos un sitio web verificado en Google Search Console
  • Python 3 y el framework de aplicación web flask.

Instrucciones

Para esta muestra, deberás adaptar la aplicación de muestra de OAuth 2.0 para aplicaciones de servidor web. Esta app de ejemplo de Python usa el framework de aplicación web flask para ejecutar una aplicación basada en la Web que administra las claves de OAuth y llama a una API de Google Cloud. Deberás adaptar la muestra vinculada para llamar a la API de Search Console y, luego, imprimir los resultados en una página web.

Sigue las instrucciones de configuración que se indican en la página de muestra de OAuth vinculada anteriormente, copia el código de muestra y modifícalo como se indica a continuación. Específicamente, sigue las instrucciones de configuración para tu entorno de programación, configura (o reutiliza) un proyecto que pueda acceder a la API de Search Console en Google Cloud Console y genera credenciales para una aplicación web.

Usarás el Ejemplo de código completo para Python como código fuente para esta muestra.

Consulta la sección Modificaciones a continuación para saber qué cambios debes realizar en las instrucciones vinculadas.

Si necesitas acceder al cliente de Python de la API de Google desde un proyecto de Google App Engine, deberás usar una cuenta de servicio para administrar tus permisos.

Modificaciones

Cuando sigas las instrucciones en la página de muestra vinculada de Oauth2, realiza los siguientes cambios:

  1. Habilita la API de Google Search Console en lugar de la API de Drive.
  2. Copia la aplicación de ejemplo al final del documento de OAUth vinculado anteriormente y reemplaza lo siguiente

    SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly']
    API_SERVICE_NAME = 'drive'
    API_VERSION = 'v2'
    
    Por lo siguiente:
    SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
    API_SERVICE_NAME = 'searchconsole'
    API_VERSION = 'v1'
    

  3. Reemplaza el cuerpo de la función test_api_request() del lenguaje Python por el siguiente código:

    @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. En nuestras pruebas, tuvimos que configurar de forma manual OAUTHLIB_INSECURE_TRANSPORT en 1 en el entorno de Bash: export OAUTHLIB_INSECURE_TRANSPORT=1. Si se producen errores de HTTPS que se requieren para ejecutar la app de ejemplo, intenta configurar esa variable.