빠른 시작: Python에서 Search Console 앱 실행
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
이 샘플 웹 앱은 액세스할 수 있는 사이트 목록과
해당되는 경우 노출수에 변동이 생길 수 있습니다.
요구사항
이 프로그램을 실행하려면 다음이 필요합니다.
- 샘플 앱을 승인하기 위한 인터넷 및 웹브라우저 액세스 권한
- Google Search Console에서 확인된 웹사이트가 하나 이상 있는 Google 계정
- Python 3 및 flask 웹 애플리케이션 프레임워크
안내
이 샘플의 경우 웹 서버 애플리케이션용 OAuth 2.0 샘플
애플리케이션입니다.
이 샘플 Python 앱은 flask 웹 애플리케이션 프레임워크를 사용하여
OAuth 키를 관리하고 Google Cloud API를 호출하는 웹 기반 애플리케이션입니다. 나
Search Console API를 호출하도록 링크된 샘플을 조정하고
웹페이지일 수도 있습니다.
위에 링크된 OAuth 샘플 페이지의 설정 안내를 따른 다음
그런 다음 아래와 같이 코드를 수정하세요. 특히
코딩 환경을 위한 설정 안내, 프로젝트 설정 (또는 재사용)
사용자 인증 정보를 생성하여
웹 애플리케이션을 위한 것입니다
이 코드에서는 전체 코드 예시를 사용해
Python을 이 샘플의 소스 코드로 사용합니다.
아래 수정을 읽고 연결된
참조하세요.
Google App Engine에서 Google API Python 클라이언트에 액세스해야 하는 경우
서비스 계정을
권한을 관리할 수 있습니다
수정사항
연결된 Oauth2 샘플 페이지의 안내를 따를 때
다음과 같은 변경사항을 적용할 수 있습니다.
- Drive API 대신 Google Search Console 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
테스트에서 OAUTHLIB_INSECURE_TRANSPORT를 수동으로
Bash 환경에서는 1로 변경됨: export OAUTHLIB_INSECURE_TRANSPORT=1
샘플 앱을 실행하는 데 필요한 HTTPS에 대한 오류가 발생하면
변수의 값을 지정합니다.
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-08-29(UTC)
[null,null,["최종 업데이트: 2025-08-29(UTC)"],[[["\u003cp\u003eThis web application displays a list of your verified websites in Google Search Console and their corresponding sitemaps.\u003c/p\u003e\n"],["\u003cp\u003eTo run the application, you need internet access, a Google account with a verified website in Search Console, and Python 3 with the Flask framework installed.\u003c/p\u003e\n"],["\u003cp\u003eThe application utilizes the OAuth 2.0 protocol for authorization and the Google Search Console API to retrieve website and sitemap data.\u003c/p\u003e\n"],["\u003cp\u003eYou will need to modify a provided OAuth 2.0 sample application by enabling the Search Console API and adjusting scopes, service name, and API version.\u003c/p\u003e\n"],["\u003cp\u003eThe application code is modified to retrieve and display verified site URLs and associated sitemap information in a tabular format within a web page.\u003c/p\u003e\n"]]],["This Python web app uses Flask and the Google Search Console API to display a list of verified websites associated with a Google account. It requires internet access, a verified website in Google Search Console, and specific Python libraries. The app utilizes OAuth 2.0 for authorization, and the core action is adapting the linked OAuth sample code to call the Search Console API. The modified code retrieves and displays verified site URLs and their associated sitemaps in a web page table, by listing site and then the sitemaps list.\n"],null,["# Quickstart: Run a Search Console App in Python\n\nThis sample web app prints the list of sites that you can access, and the sitemaps,\nif any, for each of those sites.\n\nRequirements\n------------\n\nTo run this program, you'll need:\n\n- Access to the internet and a web browser, in order to authorize the sample app.\n- A Google account with at least one website [verified](https://support.google.com/webmasters/answer/9008080) in Google Search Console.\n- Python 3 and the [flask](https://github.com/pallets/flask) web application framework.\n\nInstructions\n------------\n\nFor this sample, you'll adapt the [OAuth 2.0 for Web Server Applications sample\napplication](https://developers.google.com/identity/protocols/oauth2/web-server#python).\nThis sample python app uses the flask web application framework to run a\nweb-based application that manages OAuth keys and calls a Google Cloud API. You\nwill adapt the linked sample to call the Search Console API and print out the\nresults in a web page.\n\nFollow the setup instructions on the OAuth sample page linked above, and copy the\nsample code, then modify the code as shown below. Specifically, follow the\nsetup instructions for your coding environment, setting up (or reusing) a project\nthat can access the Search Console API in the Google Cloud console, and generating credentials\nfor a web application.\n\nYou will use the [Complete code example](https://developers.google.com/identity/protocols/oauth2/web-server#example) **for\nPython** as the source code for this sample.\n\nRead *Modifications* below to see what changes you need to make to the linked\ninstructions.\n\nIf you need to access the Google API Python Client from a Google App Engine\nproject, you'll need to use a [service account](https://developers.google.com/identity/protocols/oauth2/service-account)\nto manage your permissions.\n\nModifications\n-------------\n\nWhen following the instructions on the linked Oauth2 sample page, make the\nfollowing changes:\n\n1. Enable the Google Search Console API rather than the Drive API.\n2. Copy the sample application at the end of the OAUth document linked above,\n and replace this\n\n ```\n SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly']\n API_SERVICE_NAME = 'drive'\n API_VERSION = 'v2'\n ```\n With this: \n\n ```\n SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']\n API_SERVICE_NAME = 'searchconsole'\n API_VERSION = 'v1'\n ```\n\n \u003cbr /\u003e\n\n3. Replace the body of the Python language\n [`test_api_request()`](https://developers.google.com/identity/protocols/oauth2/web-server#example)\n function with the following code:\n\n ```python\n @app.route('/test')\n def test_api_request():\n if 'credentials' not in flask.session:\n return flask.redirect('authorize')\n\n # Load credentials from the session.\n credentials = google.oauth2.credentials.Credentials(\n **flask.session['credentials'])\n\n # Retrieve list of properties in account\n search_console_service = googleapiclient.discovery.build(\n API_SERVICE_NAME, API_VERSION, credentials=credentials)\n site_list = search_console_service.sites().list().execute()\n\n # Filter for verified URL-prefix websites.\n verified_sites_urls = [s['siteUrl'] for s in site_list['siteEntry']\n if s['permissionLevel'] != 'siteUnverifiedUser'\n and s['siteUrl'].startswith('http')]\n\n # Print the sitemaps for all websites that you can access.\n results = '\u003c!DOCTYPE html\u003e\u003chtml\u003e\u003cbody\u003e\u003ctable\u003e\u003ctr\u003e\u003cth\u003eVerified site\u003c/th\u003e\u003cth\u003eSitemaps\u003c/th\u003e\u003c/tr\u003e'\n for site_url in verified_sites_urls:\n\n # Retrieve list of sitemaps submitted\n sitemaps = search_console_service.sitemaps().list(siteUrl=site_url).execute()\n results += '\u003ctr\u003e\u003ctd\u003e%s\u003c/td\u003e' % (site_url)\n\n # Add a row with the site and the list of sitemaps\n if 'sitemap' in sitemaps:\n sitemap_list = \"\u003cbr /\u003e\".join([s['path'] for s in sitemaps['sitemap']])\n else:\n sitemap_list = \"\u003ci\u003eNone\u003c/i\u003e\"\n results += '\u003ctd\u003e%s\u003c/td\u003e\u003c/tr\u003e' % (sitemap_list)\n\n results += '\u003c/table\u003e\u003c/body\u003e\u003c/html\u003e'\n\n # Save credentials back to session in case access token was refreshed.\n # ACTION ITEM: In a production app, you likely want to save these\n # credentials in a persistent database instead.\n flask.session['credentials'] = credentials_to_dict(credentials)\n\n return results\n ```\n\n \u003cbr /\u003e\n\n4. In our testing, we needed to manually set OAUTHLIB_INSECURE_TRANSPORT\n to 1 in the Bash environment: `export OAUTHLIB_INSECURE_TRANSPORT=1`.\n If you get errors about HTTPS required to run the sample app, try setting that\n variable."]]