這個範例網頁應用程式會顯示您可以存取的網站清單,以及每個網站的 Sitemap (如有)。
需求條件
如要執行此程式,您需要:
- 可存取網際網路和網路瀏覽器,以便授權範例應用程式。
- 擁有 Google 帳戶,且該帳戶在 Google Search Console 中至少有一個網站已驗證。
- Python 3 和 flask 網頁應用程式架構。
操作說明
在本範例中,您將調整適用於網路伺服器應用程式的 OAuth 2.0 範例應用程式。這個 Python 範例應用程式使用 Flask 網頁應用程式架構,執行以管理 OAuth 金鑰及呼叫 Google Cloud API 的網頁式應用程式。您將調整連結的範例來呼叫 Search Console API,並列印網頁上的結果。
請按照上方連結的 OAuth 範例頁面中的設定說明操作,並複製程式碼範例,然後修改程式碼,如下所示。具體而言,請按照程式設計環境的設定操作說明、設定 (或重複使用) 在 Google Cloud 控制台中存取 Search Console API 的專案,以及產生網頁應用程式的憑證。
您將使用 Python 適用的完整程式碼範例做為本範例的原始碼。
請參閱下方「修改」一節,瞭解需要對連結操作說明進行哪些變更。
如果您需要從 Google App Engine 專案存取 Google API Python 用戶端,您必須使用服務帳戶管理權限。
修改
按照連結 Oauth2 範例頁面上的操作說明進行時,請進行下列變更:
- 啟用 Google Search Console API,而非 Drive API。
複製上方連結中的 OAUth 文件末端的範例應用程式,並替換此
SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly'] API_SERVICE_NAME = 'drive' API_VERSION = 'v2'
做法:SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly'] API_SERVICE_NAME = 'searchconsole' API_VERSION = 'v1'
將 Python 語言
test_api_request()
函式的主體替換為下列程式碼:@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
在測試中,我們需要在 Bash 環境中,將 OAUTHLIB_INSECURE_TRANSPORT 手動設定 1。
export OAUTHLIB_INSECURE_TRANSPORT=1
。如果執行範例應用程式所需的 HTTPS 錯誤,請嘗試設定該變數。