Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- #
- # Copyright 2015 Google Inc. All Rights Reserved.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- """Example for using the Google Search Analytics API (part of Search Console API).
- A basic python command-line example that uses the searchAnalytics.query method
- of the Google Search Console API. This example demonstrates how to query Google
- search results data for your property. Learn more at
- https://developers.google.com/webmaster-tools/
- To use:
- 1) Install the Google Python client library, as shown at https://developers.google.com/webmaster-tools/v3/libraries.
- 2) Sign up for a new project in the Google APIs console at https://code.google.com/apis/console.
- 3) Register the project to use OAuth2.0 for installed applications.
- 4) Copy your client ID, client secret, and redirect URL into the client_secrets.json file included in this package.
- 5) Run the app in the command-line as shown below.
- Sample usage:
- $ python search_analytics_api_sample.py 'https://www.example.com/' '2015-05-01' '2015-05-30'
- """
- import argparse
- import sys
- import csv
- from googleapiclient import sample_tools
- # Declare command-line flags.
- argparser = argparse.ArgumentParser(add_help=False)
- argparser.add_argument('property_uri', type=str,
- help=('Site or app URI to query data for (including '
- 'trailing slash).'))
- argparser.add_argument('start_date', type=str,
- help=('Start date of the requested date range in '
- 'YYYY-MM-DD format.'))
- argparser.add_argument('end_date', type=str,
- help=('End date of the requested date range in '
- 'YYYY-MM-DD format.'))
- def main(argv):
- service, flags = sample_tools.init(
- argv, 'webmasters', 'v3', __doc__, __file__, parents=[argparser],
- scope='https://www.googleapis.com/auth/webmasters.readonly')
- # First run a query to learn which dates we have data for. You should always
- # check which days in a date range have data before running your main query.
- # This query shows data for the entire range, grouped and sorted by day,
- # descending; any days without data will be missing from the results.
- request = {
- 'startDate': flags.start_date,
- 'endDate': flags.end_date,
- 'dimensions': ['date']
- }
- response = execute_request(service, flags.property_uri, request)
- print_table(response, 'Available dates')
- # Get totals for the date range.
- request = {
- 'startDate': flags.start_date,
- 'endDate': flags.end_date
- }
- response = execute_request(service, flags.property_uri, request)
- print_table(response, 'Totals')
- # Get top 10 queries for the date range, sorted by click count, descending.
- request = {
- 'startDate': flags.start_date,
- 'endDate': flags.end_date,
- 'dimensions': ['query'],
- 'rowLimit': 10
- }
- response = execute_request(service, flags.property_uri, request)
- print_table(response, 'Top Queries')
- # Get top 11-20 mobile queries for the date range, sorted by click count, descending.
- request = {
- 'startDate': flags.start_date,
- 'endDate': flags.end_date,
- 'dimensions': ['query'],
- 'dimensionFilterGroups': [{
- 'filters': [{
- 'dimension': 'device',
- 'expression': 'mobile'
- }]
- }],
- 'rowLimit': 10,
- 'startRow': 10
- }
- response = execute_request(service, flags.property_uri, request)
- print_table(response, 'Top 11-20 Mobile Queries')
- # Get top 10 pages for the date range, sorted by click count, descending.
- request = {
- 'startDate': flags.start_date,
- 'endDate': flags.end_date,
- 'dimensions': ['page'],
- 'rowLimit': 10
- }
- response = execute_request(service, flags.property_uri, request)
- print_table(response, 'Top Pages')
- # Get the top 10 queries in India, sorted by click count, descending.
- request = {
- 'startDate': flags.start_date,
- 'endDate': flags.end_date,
- 'dimensions': ['query'],
- 'dimensionFilterGroups': [{
- 'filters': [{
- 'dimension': 'country',
- 'expression': 'ind'
- }]
- }],
- 'rowLimit': 10
- }
- response = execute_request(service, flags.property_uri, request)
- print_table(response, 'Top queries in India')
- # Group by both country and device.
- request = {
- 'startDate': flags.start_date,
- 'endDate': flags.end_date,
- 'dimensions': ['country', 'device'],
- 'rowLimit': 10
- }
- response = execute_request(service, flags.property_uri, request)
- print_table(response, 'Group by country and device')
- def execute_request(service, property_uri, request):
- """Executes a searchAnalytics.query request.
- Args:
- service: The webmasters service to use when executing the query.
- property_uri: The site or app URI to request data for.
- request: The request to be executed.
- Returns:
- An array of response rows.
- """
- return service.searchanalytics().query(
- siteUrl=property_uri, body=request).execute()
- def print_table(response, title):
- """Prints out a response table.
- Each row contains key(s), clicks, impressions, CTR, and average position.
- Args:
- response: The server response to be printed as a table.
- title: The title of the table.
- """
- print title + ':'
- if 'rows' not in response:
- print 'Empty response'
- return
- rows = response['rows']
- row_format = '{:<20}' + '{:>20}' * 4
- print row_format.format('Keys', 'Clicks', 'Impressions', 'CTR', 'Position')
- for row in rows:
- keys = ''
- # Keys are returned only if one or more dimensions are requested.
- if 'keys' in row:
- keys = u','.join(row['keys']).encode('utf-8')
- print row_format.format(
- keys, row['clicks'], row['impressions'], row['ctr'], row['position'])
- if __name__ == '__main__':
- main(sys.argv)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement