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 los mapas del sitio, si los hay, para 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 Python de muestra 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. Adaptarás la muestra vinculada para llamar a la API de Search Console y, luego, imprimirás los resultados en una página web.

Sigue las instrucciones de configuración en la página de muestra de OAuth vinculada anteriormente, copia el código de muestra y, luego, modifícalo como se indica a continuación. En específico, 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 la consola de Google Cloud y genera credenciales para una aplicación web.

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

Consulta la sección Modificaciones que aparece a continuación para ver 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

Sigue 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 solicitud de ejemplo al final del documento OAUth vinculado anteriormente y reemplaza este

    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, necesitábamos configurar OAUTHLIB_INSECURE_TRANSPORT de forma manual en 1 en el entorno Bash: export OAUTHLIB_INSECURE_TRANSPORT=1. Si recibes errores sobre HTTPS que se requiere para ejecutar la app de ejemplo, intenta configurar esa variable.