Guida rapida: esegui un'app Search Console in Python

Questa applicazione web di esempio stampa l'elenco dei siti a cui puoi accedere e le eventuali Sitemap di ciascuno di questi siti.

Requisiti

Per eseguire questo programma, avrai bisogno di:

  • L'accesso a internet e a un browser web per autorizzare l'app di esempio.
  • Un Account Google con almeno un sito web verificato in Google Search Console.
  • Python 3 e il framework dell'applicazione web flask.

Istruzioni

Per questo esempio devi adattare l'applicazione di esempio OAuth 2.0 per applicazioni server web. Questa app Python di esempio utilizza il framework dell'applicazione web Flask per eseguire un'applicazione basata sul web che gestisce le chiavi OAuth e chiama un'API Google Cloud. Dovrai adattare l'esempio collegato in modo da chiamare l'API Search Console e stampare i risultati in una pagina web.

Segui le istruzioni di configurazione nella pagina di esempio OAuth indicata sopra e copia il codice campione, quindi modifica il codice come mostrato di seguito. In particolare, segui le istruzioni per la configurazione dell'ambiente di programmazione, configurando (o riutilizzando) un progetto in grado di accedere all'API Search Console nella console Google Cloud e generando le credenziali per un'applicazione web.

Utilizzerai l'esempio di codice completo per Python come codice sorgente per questo esempio.

Leggi la sezione Modifiche di seguito per conoscere le modifiche da apportare alle istruzioni collegate.

Se devi accedere al client Python dell'API di Google da un progetto Google App Engine, devi utilizzare un account di servizio per gestire le autorizzazioni.

Modifiche

Quando segui le istruzioni nella pagina di esempio Oauth2 collegata, apporta le seguenti modifiche:

  1. Attivare l'API Google Search Console anziché l'API Drive.
  2. Copia l'applicazione di esempio alla fine del documento OAUth collegato in alto e sostituisci questo codice

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

  3. Sostituisci il corpo della funzione del linguaggio Python test_api_request() con il seguente codice:

    @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. Nei nostri test abbiamo dovuto impostare manualmente OAUTHLIB_INSECURE_TRANSPORT su 1 nell'ambiente Bash: export OAUTHLIB_INSECURE_TRANSPORT=1. Se si verificano errori relativi al protocollo HTTPS necessario per eseguire l'app di esempio, prova a impostare la variabile in questione.