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 e os sitemaps, se houver, de cada um deles.

Requisitos

Para executar este programa, você vai precisar do seguinte:

  • 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 aplicativo de exemplo OAuth 2.0 para aplicativos de servidor da Web. Este app em Python de amostra usa o framework do aplicativo da Web flask para executar 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 os resultados em uma página da Web.

Siga as instruções de configuração na página de amostra do OAuth vinculada acima, copie o exemplo de código e modifique-o conforme mostrado abaixo. Especificamente, siga as instruções de configuração do seu ambiente de programação, configurando ou reutilizando um projeto que pode acessar a API Search Console no console do Google Cloud e gerando credenciais para um aplicativo da Web.

Você usará 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 nas instruções vinculadas.

Se precisar acessar o cliente Python da API do Google em um projeto do Google App Engine, use 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 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 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 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 definir essa variável.