Guia de início rápido: executar um app do Search Console em Python

Esse app da Web de exemplo imprime a lista de sites que podem ser acessados e os sitemaps, se houver, de cada um deles.

Requisitos

Para executar este programa, você precisará de:

  • Acesso à Internet e a um navegador da Web para autorizar o app de exemplo.
  • Uma Conta do Google com pelo menos um site verificado no Google Search Console.
  • Python 3 e o framework de aplicativos da Web flask.

Instruções

Neste exemplo, você adaptará o aplicativo de exemplo OAuth 2.0 para aplicativos de servidor da Web. Este app Python de exemplo usa o framework de aplicativos da Web flask para executar um aplicativo baseado na Web que gerencia chaves OAuth e chama uma API do Google Cloud. Você vai adaptar a amostra vinculada para chamar a API Search Console e imprimir os resultados em uma página da Web.

Siga as instruções de configuração na página de amostra OAuth vinculada acima, copie o exemplo de código e modifique-o conforme mostrado abaixo. Siga as instruções específicas do seu ambiente de programação para definir (ou reutilizar) um projeto que possa acessar a API Search Console no console do Google Cloud e gerar credenciais para um aplicativo da Web.

Use o exemplo de código completo para Python como o código-fonte desta amostra.

Leia Modificações abaixo para ver quais mudanças você precisa fazer nas instruções vinculadas.

Se você precisar acessar o cliente Python da API do Google em um projeto do Google App Engine, precisará usar uma conta de serviço para gerenciar as permissões.

Modificações

Ao seguir as instruções na página de amostra do OAuth2 vinculada, faça as seguintes alterações:

  1. Ative a API Google Search Console em vez da API Drive.
  2. Copie o aplicativo de exemplo no final do documento OAUth vinculado acima e substitua o seguinte

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

  3. Substitua o corpo da função test_api_request() da linguagem Python pelo seguinte 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. Em nosso teste, foi preciso definir manualmente OAUTHLIB_INSECURE_TRANSPORT como 1 no ambiente Bash: export OAUTHLIB_INSECURE_TRANSPORT=1. Se você receber erros sobre o HTTPS necessário para executar o app de exemplo, tente definir essa variável.