Kurzanleitung: Search Console-App in Python ausführen

Diese Beispiel-Web-App gibt die Liste der Websites aus, auf die Sie zugreifen können, sowie gegebenenfalls die Sitemaps für jede dieser Websites.

Voraussetzungen

Sie benötigen Folgendes, um dieses Programm auszuführen:

  • Zugriff auf das Internet und einen Webbrowser zum Autorisieren der Beispielanwendung.
  • Ein Google-Konto, bei dem mindestens eine Website in der Google Search Console bestätigt wurde.
  • Python 3 und das Framework für flask-Webanwendungen

Anleitung

Für dieses Beispiel passen Sie die Beispielanwendung „OAuth 2.0 für Webserveranwendungen“ an. Diese Python-Beispielanwendung verwendet das flask-Webanwendungs-Framework, um eine webbasierte Anwendung auszuführen, die OAuth-Schlüssel verwaltet und eine Google Cloud API aufruft. Sie passen das verlinkte Beispiel an, um die Search Console API aufzurufen und die Ergebnisse auf einer Webseite auszugeben.

Folgen Sie der Einrichtungsanleitung auf der oben verlinkten OAuth-Beispielseite. Kopieren Sie den Beispielcode und ändern Sie ihn dann wie unten gezeigt. Folgen Sie insbesondere der Anleitung für Ihre Programmierumgebung, richten Sie ein Projekt ein, das in der Google Cloud Console auf die Search Console API zugreifen kann, (oder verwenden Sie es) und generieren Sie Anmeldedaten für eine Webanwendung.

Als Quellcode für dieses Beispiel verwenden Sie das vollständige Codebeispiel für Python.

Im Abschnitt Änderungen unten erfahren Sie, welche Änderungen Sie an der verlinkten Anleitung vornehmen müssen.

Wenn Sie über ein Google App Engine-Projekt auf den Google API Python-Client zugreifen müssen, müssen Sie Ihre Berechtigungen mit einem Dienstkonto verwalten.

Abwandlung

Wenn Sie der Anleitung auf der verlinkten OAuth2-Beispielseite folgen, nehmen Sie die folgenden Änderungen vor:

  1. Aktivieren Sie die Google Search Console API anstelle der Drive API.
  2. Kopieren Sie die Beispielanwendung am Ende des oben verlinkten OAUth-Dokuments und ersetzen Sie Folgendes:

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

  3. Ersetzen Sie den Text der test_api_request()-Funktion der Python-Sprache durch folgenden Code:

    @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. Bei unseren Tests mussten wir OAUTHLIB_INSECURE_TRANSPORT manuell in der Bash-Umgebung auf 1 setzen: export OAUTHLIB_INSECURE_TRANSPORT=1. Wenn Sie Fehlermeldungen erhalten, dass HTTPS zum Ausführen der Beispielanwendung erforderlich ist, legen Sie diese Variable fest.