Added AdSense Host API v4.1 samples.
Reviewed in https://codereview.appspot.com/7749046/.
Index: samples/adsensehost/README
===================================================================
new file mode 100644
diff --git a/samples/adsensehost/README b/samples/adsensehost/README
new file mode 100644
index 0000000..d282c85
--- /dev/null
+++ b/samples/adsensehost/README
@@ -0,0 +1,4 @@
+A collection of command-line samples for the AdSense Host API.
+
+api: adsensehost
+keywords: cmdline
diff --git a/samples/adsensehost/add_ad_unit_to_publisher.py b/samples/adsensehost/add_ad_unit_to_publisher.py
new file mode 100644
index 0000000..e569866
--- /dev/null
+++ b/samples/adsensehost/add_ad_unit_to_publisher.py
@@ -0,0 +1,92 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example adds a new ad unit to a publisher ad client.
+
+To get ad clients, run get_all_ad_clients_for_publisher.py.
+
+Tags: accounts.adunits.insert
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+from sample_utils import GetUniqueName
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'account_id',
+ help='The ID of the pub account on which to create the ad unit')
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ID of the ad client on which to create the ad unit')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ account_id = flags.account_id
+ ad_client_id = flags.ad_client_id
+
+ try:
+ ad_unit = {
+ 'name': 'Ad Unit #%s' % GetUniqueName(),
+ 'contentAdsSettings': {
+ 'backupOption': {
+ 'type': 'COLOR',
+ 'color': 'ffffff'
+ },
+ 'size': 'SIZE_200_200',
+ 'type': 'TEXT'
+ },
+ 'customStyle': {
+ 'colors': {
+ 'background': 'ffffff',
+ 'border': '000000',
+ 'text': '000000',
+ 'title': '000000',
+ 'url': '0000ff'
+ },
+ 'corners': 'SQUARE',
+ 'font': {
+ 'family': 'ACCOUNT_DEFAULT_FAMILY',
+ 'size': 'ACCOUNT_DEFAULT_SIZE'
+ }
+ }
+ }
+
+ # Create ad unit.
+ request = service.accounts().adunits().insert(adClientId=ad_client_id,
+ accountId=account_id,
+ body=ad_unit)
+
+ result = request.execute()
+ print ('Ad unit of type "%s", name "%s" and status "%s" was created.' %
+ (result['contentAdsSettings']['type'], result['name'],
+ result['status']))
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/add_custom_channel_to_host.py b/samples/adsensehost/add_custom_channel_to_host.py
new file mode 100644
index 0000000..d992b22
--- /dev/null
+++ b/samples/adsensehost/add_custom_channel_to_host.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example adds a custom channel to a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+
+Tags: customchannels.insert
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+from sample_utils import GetUniqueName
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ID of the ad client on which to create the custom channel')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+
+ try:
+ custom_channel = {
+ 'name': 'Sample Channel #%s' % GetUniqueName()
+ }
+
+ # Add custom channel.
+ request = service.customchannels().insert(adClientId=ad_client_id,
+ body=custom_channel)
+
+ result = request.execute()
+ print ('Custom channel with id "%s", code "%s" and name "%s" was created.'
+ % (result['id'], result['code'], result['name']))
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/add_url_channel_to_host.py b/samples/adsensehost/add_url_channel_to_host.py
new file mode 100644
index 0000000..012ba75
--- /dev/null
+++ b/samples/adsensehost/add_url_channel_to_host.py
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example adds a URL channel to a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+
+Tags: urlchannels.insert
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ID of the ad client on which to create the URL channel')
+argparser.add_argument(
+ 'url_pattern',
+ help='The URL pattern for the new custom channel')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+ url_pattern = flags.url_pattern
+
+ try:
+ custom_channel = {
+ 'urlPattern': url_pattern
+ }
+
+ # Add URL channel.
+ request = service.urlchannels().insert(adClientId=ad_client_id,
+ body=custom_channel)
+
+ result = request.execute()
+ print ('URL channel with id "%s" and URL pattern "%s" was created.' %
+ (result['id'], result['urlPattern']))
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/client_secrets.json b/samples/adsensehost/client_secrets.json
new file mode 100644
index 0000000..323ffd0
--- /dev/null
+++ b/samples/adsensehost/client_secrets.json
@@ -0,0 +1,9 @@
+{
+ "installed": {
+ "client_id": "[[INSERT CLIENT ID HERE]]",
+ "client_secret": "[[INSERT CLIENT SECRET HERE]]",
+ "redirect_uris": [],
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+ "token_uri": "https://accounts.google.com/o/oauth2/token"
+ }
+}
diff --git a/samples/adsensehost/delete_ad_unit_on_publisher.py b/samples/adsensehost/delete_ad_unit_on_publisher.py
new file mode 100644
index 0000000..d471bcd
--- /dev/null
+++ b/samples/adsensehost/delete_ad_unit_on_publisher.py
@@ -0,0 +1,68 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example deletes an ad unit on a publisher ad client.
+
+To get ad clients, run get_all_ad_clients_for_publisher.py.
+To get ad units, run get_all_ad_units_for_publisher.py.
+
+Tags: accounts.adunits.delete
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'account_id',
+ help='The ID of the pub account on which the ad unit exists')
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ID of the ad client on which the ad unit exists')
+argparser.add_argument(
+ 'ad_unit_id',
+ help='The ID of the ad unit to be deleted')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ account_id = flags.account_id
+ ad_client_id = flags.ad_client_id
+ ad_unit_id = flags.ad_unit_id
+
+ try:
+ # Delete ad unit.
+ request = service.accounts().adunits().delete(accountId=account_id,
+ adClientId=ad_client_id,
+ adUnitId=ad_unit_id)
+
+ result = request.execute()
+ print 'Ad unit with ID "%s" was deleted.' % result['id']
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/delete_custom_channel_on_host.py b/samples/adsensehost/delete_custom_channel_on_host.py
new file mode 100644
index 0000000..c2b59d7
--- /dev/null
+++ b/samples/adsensehost/delete_custom_channel_on_host.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example deletes a custom channel on a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+To get custom channels, run get_all_custom_channels_for_host.py.
+
+Tags: customchannels.delete
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ad client ID that contains the custom channel')
+argparser.add_argument(
+ 'custom_channel_id',
+ help='The ID of the custom channel to be deleted')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+ custom_channel_id = flags.custom_channel_id
+
+ try:
+ # Delete custom channel.
+ request = service.customchannels().delete(
+ adClientId=ad_client_id, customChannelId=custom_channel_id)
+
+ result = request.execute()
+ print 'Custom channel with ID "%s" was deleted.' % result['id']
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/delete_url_channel_on_host.py b/samples/adsensehost/delete_url_channel_on_host.py
new file mode 100644
index 0000000..e1e84cb
--- /dev/null
+++ b/samples/adsensehost/delete_url_channel_on_host.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example deletes a URL channel on a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+To get URL channels, run get_all_url_channels_for_host.py.
+
+Tags: urlchannels.delete
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ad client ID that contains the URL channel')
+argparser.add_argument(
+ 'url_channel_id',
+ help='The ID of the URL channel to be deleted')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+ url_channel_id = flags.url_channel_id
+
+ try:
+ # Delete URL channel.
+ request = service.urlchannels().delete(adClientId=ad_client_id,
+ urlChannelId=url_channel_id)
+
+ result = request.execute()
+ print 'URL channel with ID "%s" was deleted.' % result['id']
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/generate_report_for_host.py b/samples/adsensehost/generate_report_for_host.py
new file mode 100644
index 0000000..ccbfa68
--- /dev/null
+++ b/samples/adsensehost/generate_report_for_host.py
@@ -0,0 +1,75 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example retrieves a report for the specified host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+
+Tags: reports.generate
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ID of the ad client for which to generate a report')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+
+ try:
+ # Retrieve report.
+ result = service.reports().generate(
+ startDate='2011-01-01',
+ endDate='2011-08-31',
+ filter=['AD_CLIENT_ID==' + ad_client_id],
+ metric=['PAGE_VIEWS', 'AD_REQUESTS', 'AD_REQUESTS_COVERAGE',
+ 'CLICKS', 'AD_REQUESTS_CTR', 'COST_PER_CLICK',
+ 'AD_REQUESTS_RPM', 'EARNINGS'],
+ dimension=['DATE'],
+ sort=['+DATE']).execute()
+
+ if 'rows' in result:
+ # Display headers.
+ for header in result['headers']:
+ print '%25s' % header['name'],
+ print
+ # Display results.
+ for row in result['rows']:
+ for column in row:
+ print '%25s' % column,
+ print
+ else:
+ print 'No rows returned.'
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/generate_report_for_publisher.py b/samples/adsensehost/generate_report_for_publisher.py
new file mode 100644
index 0000000..75f8575
--- /dev/null
+++ b/samples/adsensehost/generate_report_for_publisher.py
@@ -0,0 +1,83 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example retrieves a report for the specified publisher ad client.
+
+Note that the statistics returned in these reports only include data from ad
+units created with the AdSense Host API v4.x.
+To create ad units, run add_ad_unit_to_publisher.py.
+To get ad clients, run get_all_ad_clients_for_publisher.py.
+
+Tags: accounts.reports.generate
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'account_id',
+ help='The ID of the publisher account for which to generate a report')
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ID of the ad client for which to generate a report')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+ account_id = flags.account_id
+
+ try:
+ # Retrieve report.
+ result = service.accounts().reports().generate(
+ accountId=account_id,
+ startDate='2011-01-01',
+ endDate='2011-08-31',
+ filter=['AD_CLIENT_ID==' + ad_client_id],
+ metric=['PAGE_VIEWS', 'AD_REQUESTS', 'AD_REQUESTS_COVERAGE',
+ 'CLICKS', 'AD_REQUESTS_CTR', 'COST_PER_CLICK',
+ 'AD_REQUESTS_RPM', 'EARNINGS'],
+ dimension=['DATE'],
+ sort=['+DATE']).execute()
+
+ if 'rows' in result:
+ # Display headers.
+ for header in result['headers']:
+ print '%25s' % header['name'],
+ print
+ # Display results.
+ for row in result['rows']:
+ for column in row:
+ print '%25s' % column,
+ print
+ else:
+ print 'No rows returned.'
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/get_account_data_for_existing_publisher.py b/samples/adsensehost/get_account_data_for_existing_publisher.py
new file mode 100644
index 0000000..fe74952
--- /dev/null
+++ b/samples/adsensehost/get_account_data_for_existing_publisher.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example gets the account data for a publisher from their ad client ID.
+
+Tags: accounts.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'ad_client_id',
+ help='The publisher ad client ID for which to get the data')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+
+ try:
+ # Retrieve account list in pages and display data as we receive it.
+ request = service.accounts().list(filterAdClientId=ad_client_id)
+
+ result = request.execute()
+ if 'items' in result:
+ accounts = result['items']
+ for account in accounts:
+ print ('Account with ID "%s", name "%s" and status "%s" was found. ' %
+ (account['id'], account['name'], account['status']))
+ else:
+ print 'No accounts were found.'
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/get_all_ad_clients_for_host.py b/samples/adsensehost/get_all_ad_clients_for_host.py
new file mode 100644
index 0000000..5065c30
--- /dev/null
+++ b/samples/adsensehost/get_all_ad_clients_for_host.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example gets all the ad clients in the host account.
+
+Tags: adclients.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, _ = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+
+ try:
+ # Retrieve ad client list in pages and display data as we receive it.
+ request = service.adclients().list(maxResults=MAX_PAGE_SIZE)
+
+ while request is not None:
+ result = request.execute()
+ if 'items' in result:
+ ad_clients = result['items']
+ for ad_client in ad_clients:
+ print ('Ad client for product "%s" with ID "%s" was found.' %
+ (ad_client['productCode'], ad_client['id']))
+
+ print ('\tSupports reporting: %s' %
+ 'Yes' if ad_client['supportsReporting'] else 'No')
+
+ request = service.adclients().list_next(request, result)
+ else:
+ print 'No ad clients were found.'
+ break
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/get_all_ad_clients_for_publisher.py b/samples/adsensehost/get_all_ad_clients_for_publisher.py
new file mode 100644
index 0000000..d55398f
--- /dev/null
+++ b/samples/adsensehost/get_all_ad_clients_for_publisher.py
@@ -0,0 +1,71 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example gets all ad clients for a publisher account.
+
+Tags: accounts.adclients.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'account_id',
+ help='The ID of the publisher account for which to get ad clients')
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ account_id = flags.account_id
+
+ try:
+ # Retrieve ad client list in pages and display data as we receive it.
+ request = service.accounts().adclients().list(accountId=account_id,
+ maxResults=MAX_PAGE_SIZE)
+
+ while request is not None:
+ result = request.execute()
+ if 'items' in result:
+ ad_clients = result['items']
+ for ad_client in ad_clients:
+ print ('Ad client for product "%s" with ID "%s" was found. '
+ % (ad_client['productCode'], ad_client['id']))
+
+ print ('\tSupports reporting: %s' %
+ 'Yes' if ad_client['supportsReporting'] else 'No')
+
+ request = service.adclients().list_next(request, result)
+ else:
+ print 'No ad clients were found.'
+ break
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/get_all_ad_units_for_publisher.py b/samples/adsensehost/get_all_ad_units_for_publisher.py
new file mode 100644
index 0000000..34ffb04
--- /dev/null
+++ b/samples/adsensehost/get_all_ad_units_for_publisher.py
@@ -0,0 +1,77 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example gets all ad units in a publisher ad client.
+
+To get ad clients, run get_all_ad_clients_for_publisher.py.
+
+Tags: accounts.adunits.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'account_id',
+ help='The ID of the pub account on which the ad unit exists')
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ID of the ad client on which the ad unit exists')
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+ account_id = flags.account_id
+
+ try:
+ # Retrieve ad unit list in pages and display data as we receive it.
+ request = service.accounts().adunits().list(adClientId=ad_client_id,
+ accountId=account_id,
+ maxResults=MAX_PAGE_SIZE)
+
+ while request is not None:
+ result = request.execute()
+ if 'items' in result:
+ ad_units = result['items']
+ for ad_unit in ad_units:
+ print ('Ad unit with ID "%s", code "%s", name "%s" and status "%s" '
+ 'was found.' %
+ (ad_unit['id'], ad_unit['code'], ad_unit['name'],
+ ad_unit['status']))
+
+ request = service.accounts().adunits().list_next(request, result)
+ else:
+ print 'No ad units were found.'
+ break
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/get_all_custom_channels_for_host.py b/samples/adsensehost/get_all_custom_channels_for_host.py
new file mode 100644
index 0000000..ec695fa
--- /dev/null
+++ b/samples/adsensehost/get_all_custom_channels_for_host.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example gets all custom channels in a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+
+Tags: customchannels.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ad client ID for which to get custom channels')
+
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+
+ try:
+ # Retrieve custom channel list in pages and display data as we receive it.
+ request = service.customchannels().list(adClientId=ad_client_id,
+ maxResults=MAX_PAGE_SIZE)
+
+ while request is not None:
+ result = request.execute()
+ if 'items' in result:
+ custom_channels = result['items']
+ for custom_channel in custom_channels:
+ print ('Custom channel with ID "%s", code "%s" and name "%s" found.'
+ % (custom_channel['id'], custom_channel['code'],
+ custom_channel['name']))
+
+ request = service.customchannels().list_next(request, result)
+ else:
+ print 'No custom channels were found.'
+ break
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/get_all_url_channels_for_host.py b/samples/adsensehost/get_all_url_channels_for_host.py
new file mode 100644
index 0000000..38add84
--- /dev/null
+++ b/samples/adsensehost/get_all_url_channels_for_host.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example gets all URL channels in a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+
+Tags: urlchannels.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ad client ID for which to get URL channels')
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+
+ try:
+ # Retrieve URL channel list in pages and display data as we receive it.
+ request = service.urlchannels().list(adClientId=ad_client_id,
+ maxResults=MAX_PAGE_SIZE)
+
+ while request is not None:
+ result = request.execute()
+ if 'items' in result:
+ url_channels = result['items']
+ for url_channel in url_channels:
+ print ('URL channel with ID "%s" and URL pattern "%s" was found.'
+ % (url_channel['id'], url_channel['urlPattern']))
+
+ request = service.customchannels().list_next(request, result)
+ else:
+ print 'No URL channels were found.'
+ break
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/sample_utils.py b/samples/adsensehost/sample_utils.py
new file mode 100644
index 0000000..e69982b
--- /dev/null
+++ b/samples/adsensehost/sample_utils.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""Auxiliary file for AdSense Host API code samples."""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import datetime
+
+
+def GetUniqueName(max_len=None):
+ """Returns a unique value to append to various properties in the samples.
+
+ Shamelessly stolen from http://code.google.com/p/google-api-ads-python.
+
+ Args:
+ max_len: int Maximum length for the unique name.
+
+ Returns:
+ str Unique name.
+ """
+ dt = datetime.datetime.now()
+ name = '%s%s%s%s%s%s%s' % (dt.microsecond, dt.second, dt.minute, dt.hour,
+ dt.day, dt.month, dt.year)
+ if max_len > len(name):
+ max_len = len(name)
+ return name[:max_len]
diff --git a/samples/adsensehost/start_association_session.py b/samples/adsensehost/start_association_session.py
new file mode 100644
index 0000000..b8d120e
--- /dev/null
+++ b/samples/adsensehost/start_association_session.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example starts an association session.
+
+Tags: associationsessions.start
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+from sample_utils import GetUniqueName
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, _ = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+
+ try:
+ # Request a new association session.
+ request = service.associationsessions().start(
+ productCode='AFC',
+ websiteUrl='www.example.com/blog%s' % GetUniqueName())
+
+ result = request.execute()
+ print ('Association with ID "%s" and redirect URL "%s" was started.' %
+ (result['id'], result['redirectUrl']))
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/update_ad_unit_on_publisher.py b/samples/adsensehost/update_ad_unit_on_publisher.py
new file mode 100644
index 0000000..67617e2
--- /dev/null
+++ b/samples/adsensehost/update_ad_unit_on_publisher.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example updates an ad unit on a publisher ad client.
+
+To get ad clients, run get_all_ad_clients_for_publisher.py.
+To get ad units, run get_all_ad_units_for_publisher.py.
+
+Tags: accounts.adunits.patch
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'account_id',
+ help='The ID of the publisher account on which the ad unit exists')
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ID of the ad client on which the ad unit exists')
+argparser.add_argument(
+ 'ad_unit_id',
+ help='The ID of the ad unit to be updated')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ account_id = flags.account_id
+ ad_client_id = flags.ad_client_id
+ ad_unit_id = flags.ad_unit_id
+
+ try:
+ ad_unit = {'customStyle': {'colors': {'text': 'ff0000'}}}
+
+ # Update ad unit text color.
+ request = service.accounts().adunits().patch(accountId=account_id,
+ adClientId=ad_client_id,
+ adUnitId=ad_unit_id,
+ body=ad_unit)
+
+ result = request.execute()
+ print ('Ad unit with ID "%s" was updated with text color "%s".'
+ % (result['id'], result['customStyle']['colors']['text']))
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/update_custom_channel_on_host.py b/samples/adsensehost/update_custom_channel_on_host.py
new file mode 100644
index 0000000..3b3d4e6
--- /dev/null
+++ b/samples/adsensehost/update_custom_channel_on_host.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example updates a custom channel on a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+To get custom channels, run get_all_custom_channels_for_host.py.
+
+Tags: customchannels.patch
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+from sample_utils import GetUniqueName
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'ad_client_id',
+ help='The ad client ID that contains the custom channel')
+argparser.add_argument(
+ 'custom_channel_id',
+ help='The ID of the custom channel to be updated')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ ad_client_id = flags.ad_client_id
+ custom_channel_id = flags.custom_channel_id
+
+ try:
+ custom_channel = {
+ 'name': 'Updated Sample Channel #%s' % GetUniqueName()
+ }
+
+ # Update custom channel.
+ request = service.customchannels().patch(adClientId=ad_client_id,
+ customChannelId=custom_channel_id,
+ body=custom_channel)
+
+ result = request.execute()
+ print ('Custom channel with ID "%s" was updated with name "%s".'
+ % (result['id'], result['name']))
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/samples/adsensehost/verify_association_session.py b/samples/adsensehost/verify_association_session.py
new file mode 100644
index 0000000..64c777d
--- /dev/null
+++ b/samples/adsensehost/verify_association_session.py
@@ -0,0 +1,56 @@
+#!/usr/bin/python
+#
+# Copyright 2012 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.
+
+"""This example verifies an association session callback token.
+
+Tags: associationsessions.verify
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+ 'token',
+ help='The token returned in the association callback')
+
+
+def main(argv):
+ # Authenticate and construct service.
+ service, flags = sample_tools.init(
+ argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+ token = flags.token
+
+ try:
+ # Verify the association session token.
+ request = service.associationsessions().verify(token=token)
+
+ result = request.execute()
+ print ('Association for account "%s" has status "%s" and ID "%s".' %
+ (result['accountId'], result['status'], result['id']))
+
+ except client.AccessTokenRefreshError:
+ print ('The credentials have been revoked or expired, please re-run the '
+ 'application to re-authorize')
+
+if __name__ == '__main__':
+ main(sys.argv)