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

Este exemplo de app da Web imprime a lista de sites que você pode acessar, além dos sitemaps, se houver, para cada um desses sites.

Requisitos

Para executar este programa, você vai 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

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

Siga as instruções de configuração na página de amostra do OAuth vinculada acima e copie o e modifique o código conforme mostrado abaixo. Especificamente, siga as instruções de configuração para seu ambiente de programação, configuração (ou reutilização) de um projeto com acesso à 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 para esta amostra.

Leia Modificações abaixo para saber quais mudanças você precisa fazer nos links instruções.

Se você precisar acessar o cliente Python da API do Google em uma instância do Google App Engine projeto, será preciso usar uma conta de serviço para gerenciar suas permissões.

Modificações

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

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

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

  3. Substituir o corpo da linguagem Python test_api_request() com o 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 nossos testes, foi necessário 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 configurar essa variável.