Updated versions
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 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 @@
 
 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 <http://code.google.com/apis/accounts/docs/OAuth2.html#IA>
-# The client_id client_secret are copied from the API Access tab on
-# the Google APIs Console <http://code.google.com/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 <http://code.google.com/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 <https://code.google.com/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("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 @@
   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 @@
     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 @@
 </head>
 <body>
 <h1>Credit Card Offers for Publisher {{ publisher }}</h1>
-<table>
+{% if items %}
+<table cellspacing=5>
 {% for item in items %}
 <tr>
 <td colspan=3 class="cardName">
@@ -45,18 +51,22 @@
   {% if item.imageUrl %}
   <img src="{{ item.imageUrl }}" title="Image from GAN" />
   {% endif %}
-  {% if item.logoUrl %}
-  <img src="{{ item.logoUrl }}" title="Image from AdConnect" />
-  {% endif %}
-  {% if item.disclaimer %}
-  <div>{{ item.disclaimer }}</div>
-  {% endif %}
 <td>
+  {% if item.aprDisplay %}
   <div>APR: {{ item.aprDisplay }}</div>
+  {% endif %}
+  {% if item.annualFeeDisplay %}
   <div>Annual Fee: {{ item.annualFeeDisplay }}</div>
+  {% endif %}
+  {% if item.gracePeriodDisplay %}
   <div>Grace Period: {{ item.gracePeriodDisplay }}</div>
+  {% endif %}
+  {% if item.latePaymentFee %}
   <div>Late Payment Fee: {{ item.latePaymentFee }}</div>
+  {% endif %}
+  {% if item.creditRatingDisplay %}
   <div>Credit Rating: {{ item.creditRatingDisplay }}</div>
+  {% endif %}
 <td>
   {% if item.introAprDisplay %}
   <div>Intro APR: {{ item.introAprDisplay }}</div>
@@ -88,12 +98,20 @@
   </ul>
 -->
 </tr>
+<tr>
+  <td colspan=3>
+  {% if item.disclaimer %}
+  <div style="font-size:x-small">{{ item.disclaimer }}</div>
+  {% endif %}
+</tr>
 <tr><td colspan=3><pre id="pre{{forloop.counter}}" style="display:none">
 {{ item|pprint|linebreaks }}</pre>
-{% empty %}
 <tr><td>
-<h2>Whoops, {{ publisher }} has no associated credit card offers.</h2>
 {% endfor %}
 </table>
+{% else %}
+<h2>Whoops, {{ publisher }} has no associated credit card offers.</h2>
+{% endif %}
+
 </body>
 </html>
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 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 @@
 
 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 <http://code.google.com/apis/accounts/docs/OAuth2.html#IA>
-# The client_id client_secret are copied from the API Access tab on
-# the Google APIs Console <http://code.google.com/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 <http://code.google.com/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 <https://code.google.com/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("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 @@
       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 @@
 
     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)