From bba4898b6632be79c123dcee2293f883e0bb0696 Mon Sep 17 00:00:00 2001 From: "leadpipe@wpgntav-ubiq70.hot.corp.google.com" Date: Wed, 2 Nov 2011 16:27:24 -0500 Subject: [PATCH] Updated versions --- samples/gan/ccoffers/offers.py | 58 +++++++++++++--------- samples/gan/ccoffers/offers_template.html | 36 ++++++++++---- samples/gan/events/events.py | 59 ++++++++++++++--------- 3 files changed, 98 insertions(+), 55 deletions(-) diff --git a/samples/gan/ccoffers/offers.py b/samples/gan/ccoffers/offers.py index 6e5168c..ddc967a 100644 --- a/samples/gan/ccoffers/offers.py +++ b/samples/gan/ccoffers/offers.py @@ -21,7 +21,8 @@ from django.template.loader import get_template from apiclient.discovery import build from oauth2client.file import Storage -from oauth2client.client import OAuth2WebServerFlow +from oauth2client.client import AccessTokenRefreshError +from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import run settings.configure(DEBUG=True, TEMPLATE_DEBUG=True, @@ -30,20 +31,30 @@ settings.configure(DEBUG=True, TEMPLATE_DEBUG=True, FLAGS = gflags.FLAGS -# Set up a Flow object to be used if we need to authenticate. This -# sample uses OAuth 2.0, and we set up the OAuth2WebServerFlow with -# the information it needs to authenticate. Note that it is called -# the Web Server Flow, but it can also handle the flow for native -# applications -# The client_id client_secret are copied from the API Access tab on -# the Google APIs Console . When -# creating credentials for this application be sure to choose an Application -# type of "Installed application". -FLOW = OAuth2WebServerFlow( - client_id='767567128246-ti2q06i1neqm5boe2m1pqdc2riivhk41.apps.googleusercontent.com', - client_secret='UtdXI8nKD2SEcQRLQDZPkGT9', +# CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this +# application, including client_id and client_secret, which are found +# on the API Access tab on the Google APIs +# Console +CLIENT_SECRETS = '../client_secrets.json' + +# Helpful message to display in the browser if the CLIENT_SECRETS file +# is missing. +MISSING_CLIENT_SECRETS_MESSAGE = """ +WARNING: Please configure OAuth 2.0 + +To make this sample run you will need to populate the client_secrets.json file +found at: + + %s + +with information from the APIs Console . + +""" % os.path.join(os.path.dirname(__file__), CLIENT_SECRETS) + +# Set up a Flow object to be used if we need to authenticate. +FLOW = flow_from_clientsecrets(CLIENT_SECRETS, scope='https://www.googleapis.com/auth/gan.readonly', - user_agent='gan-ccoffers-sample/1.0') + message=MISSING_CLIENT_SECRETS_MESSAGE) # The gflags module makes defining command-line options easy for # applications. Run this program with the '--help' argument to see @@ -55,10 +66,10 @@ gflags.DEFINE_enum('logging_level', 'DEBUG', gflags.DEFINE_enum("output_type", 'STDOUT', ['BOTH', 'HTML', 'STDOUT'], 'Set how to output the results received from the API') -gflags.DEFINE_string('credentials_filename', 'offers.dat', +gflags.DEFINE_string('credentials_filename', '../credentials.dat', 'File to store credentials in', short_name='cf') -gflags.DEFINE_multistring('advertiser', None, +gflags.DEFINE_multistring('advertiser', [], 'If given, advertiser we should run as') @@ -100,16 +111,15 @@ def main(argv): ccOffers = service.ccOffers() # Retrieve the relevant offers. - list_call = ccOffers.list(publisher=publisher, - # TODO(leadpipe): add back when advertiser is repeated - # advertiser=FLAGS.advertiser, - projection='full') - list = list_call.execute() - list['publisher'] = publisher + request = ccOffers.list(publisher=publisher, + advertiser=FLAGS.advertiser, + projection='full') + response = request.execute() + response['publisher'] = publisher if FLAGS.output_type in ["BOTH", "HTML"]: template = get_template('offers_template.html') - context = Context(list) + context = Context(response) fname = '%s.html' % publisher out = open(fname, 'w') @@ -120,7 +130,7 @@ def main(argv): print 'Wrote %s' % fname if FLAGS.output_type in ["BOTH", "STDOUT"]: - print json.dumps(list, sort_keys=True, indent=4) + print json.dumps(response, sort_keys=True, indent=4) if __name__ == '__main__': main(sys.argv) diff --git a/samples/gan/ccoffers/offers_template.html b/samples/gan/ccoffers/offers_template.html index 4d1744a..4e52c03 100644 --- a/samples/gan/ccoffers/offers_template.html +++ b/samples/gan/ccoffers/offers_template.html @@ -14,6 +14,11 @@ } tr.details td { padding: 0 3ex; + min-width: 15%; + max-width: 33%; + } + tr.details td img { + max-width: 200px; } td pre { margin: 3ex 3em; @@ -33,7 +38,8 @@

Credit Card Offers for Publisher {{ publisher }}

- +{% if items %} +
{% for item in items %} + +
@@ -45,18 +51,22 @@ {% if item.imageUrl %} {% endif %} - {% if item.logoUrl %} - - {% endif %} - {% if item.disclaimer %} -
{{ item.disclaimer }}
- {% endif %}
+ {% if item.aprDisplay %}
APR: {{ item.aprDisplay }}
+ {% endif %} + {% if item.annualFeeDisplay %}
Annual Fee: {{ item.annualFeeDisplay }}
+ {% endif %} + {% if item.gracePeriodDisplay %}
Grace Period: {{ item.gracePeriodDisplay }}
+ {% endif %} + {% if item.latePaymentFee %}
Late Payment Fee: {{ item.latePaymentFee }}
+ {% endif %} + {% if item.creditRatingDisplay %}
Credit Rating: {{ item.creditRatingDisplay }}
+ {% endif %}
{% if item.introAprDisplay %}
Intro APR: {{ item.introAprDisplay }}
@@ -88,12 +98,20 @@ -->
+ {% if item.disclaimer %} +
{{ item.disclaimer }}
+ {% endif %} +
-{% empty %}
-

Whoops, {{ publisher }} has no associated credit card offers.

{% endfor %}
+{% else %} +

Whoops, {{ publisher }} has no associated credit card offers.

+{% endif %} + diff --git a/samples/gan/events/events.py b/samples/gan/events/events.py index 05a42c0..bc45167 100644 --- a/samples/gan/events/events.py +++ b/samples/gan/events/events.py @@ -3,7 +3,7 @@ # # Copyright (C) 2011 Google Inc. -"""Sample for retrieving credit-card offers from GAN.""" +"""Sample for retrieving event information from GAN.""" __author__ = 'leadpipe@google.com (Luke Blanshard)' @@ -22,7 +22,8 @@ from django.template.loader import get_template from apiclient.discovery import build from oauth2client.file import Storage -from oauth2client.client import OAuth2WebServerFlow +from oauth2client.client import AccessTokenRefreshError +from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import run settings.configure(DEBUG=True, TEMPLATE_DEBUG=True, @@ -31,20 +32,30 @@ settings.configure(DEBUG=True, TEMPLATE_DEBUG=True, FLAGS = gflags.FLAGS -# Set up a Flow object to be used if we need to authenticate. This -# sample uses OAuth 2.0, and we set up the OAuth2WebServerFlow with -# the information it needs to authenticate. Note that it is called -# the Web Server Flow, but it can also handle the flow for native -# applications -# The client_id client_secret are copied from the API Access tab on -# the Google APIs Console . When -# creating credentials for this application be sure to choose an Application -# type of "Installed application". -FLOW = OAuth2WebServerFlow( - client_id='767567128246-ti2q06i1neqm5boe2m1pqdc2riivhk41.apps.googleusercontent.com', - client_secret='UtdXI8nKD2SEcQRLQDZPkGT9', +# CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this +# application, including client_id and client_secret, which are found +# on the API Access tab on the Google APIs +# Console +CLIENT_SECRETS = '../client_secrets.json' + +# Helpful message to display in the browser if the CLIENT_SECRETS file +# is missing. +MISSING_CLIENT_SECRETS_MESSAGE = """ +WARNING: Please configure OAuth 2.0 + +To make this sample run you will need to populate the client_secrets.json file +found at: + + %s + +with information from the APIs Console . + +""" % os.path.join(os.path.dirname(__file__), CLIENT_SECRETS) + +# Set up a Flow object to be used if we need to authenticate. +FLOW = flow_from_clientsecrets(CLIENT_SECRETS, scope='https://www.googleapis.com/auth/gan.readonly', - user_agent='gan-events-sample/1.0') + message=MISSING_CLIENT_SECRETS_MESSAGE) # The gflags module makes defining command-line options easy for # applications. Run this program with the '--help' argument to see @@ -56,7 +67,7 @@ gflags.DEFINE_enum('logging_level', 'DEBUG', gflags.DEFINE_enum("output_type", 'STDOUT', ['BOTH', 'HTML', 'STDOUT'], 'Set how to output the results received from the API') -gflags.DEFINE_string('credentials_filename', 'events.dat', +gflags.DEFINE_string('credentials_filename', '../credentials.dat', 'File to store credentials in', short_name='cf') API_FLAGS = {'eventDateMin':None, 'eventDateMax':None, 'advertiserId':None, @@ -146,15 +157,22 @@ def main(argv): params[key] = FLAGS[key].value # Retrieve the relevant events. + all_items = [] try: - list_call = events.list(**params) - list = list_call.execute() + request = events.list(**params) + while request: + response = request.execute() + if FLAGS.output_type in ["BOTH", "STDOUT"]: + print json.dumps(response, sort_keys=True, indent=4) + all_items.extend(response['items']) + request = events.list_next(request, response) + except apiclient.errors.HttpError, e: print json.dumps(e.__dict__, sort_keys=True, indent=4) if FLAGS.output_type in ["BOTH", "HTML"]: template = get_template('events_template.html') - context = Context(list) + context = Context({'items':items}) out = open("output.html", 'w') out.write(template.render(context).encode('UTF-8')) @@ -163,8 +181,5 @@ def main(argv): print 'Wrote output.html' - if FLAGS.output_type in ["BOTH", "STDOUT"]: - print json.dumps(list, sort_keys=True, indent=4) - if __name__ == '__main__': main(sys.argv)