Этот пример веб-приложения печатает список сайтов, к которым вы можете получить доступ, и файлы Sitemap, если таковые имеются, для каждого из этих сайтов.
Требования
Для запуска этой программы вам понадобится:
- Доступ к Интернету и веб-браузеру для авторизации примера приложения.
- Аккаунт Google, по крайней мере один веб-сайт которого подтвержден в консоли поиска Google.
- Python 3 и платформа веб-приложений Flask .
Инструкции
В этом примере вы адаптируете пример приложения OAuth 2.0 для веб-серверных приложений . В этом примере приложения Python используется платформа веб-приложений flask для запуска веб-приложения, которое управляет ключами OAuth и вызывает API Google Cloud. Вы адаптируете связанный пример для вызова API консоли поиска и распечатки результатов на веб-странице.
Следуйте инструкциям по настройке на странице примера OAuth, указанной выше, и скопируйте пример кода, а затем измените код, как показано ниже. В частности, следуйте инструкциям по настройке для вашей среды программирования, настройте (или повторно используйте) проект, который может получить доступ к API консоли поиска в консоли Google Cloud, и сгенерируйте учетные данные для веб-приложения.
В качестве исходного кода для этого примера вы будете использовать пример полного кода для Python .
Прочтите «Модификации» ниже, чтобы узнать, какие изменения необходимо внести в связанные инструкции.
Если вам нужен доступ к клиенту Google API Python из проекта Google App Engine, вам потребуется использовать сервисный аккаунт для управления разрешениями.
Модификации
Следуя инструкциям на связанной странице примера Oauth2, внесите следующие изменения:
- Включите API консоли поиска Google, а не 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'
Замените тело функции
test_api_request()
языка Python следующим кодом:@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
В нашем тестировании нам нужно было вручную установить для OAUTHLIB_INSECURE_TRANSPORT значение 1 в среде Bash:
export OAUTHLIB_INSECURE_TRANSPORT=1
. Если вы получаете ошибки о HTTPS, необходимом для запуска примера приложения, попробуйте установить эту переменную.