<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0cERXs8eCp7ImA9WhRUF0w.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332</id><updated>2012-01-27T16:36:44.570-08:00</updated><category term="mobile" /><category term="adwords_v201109" /><category term="xml" /><category term="i18n" /><category term="adsense_api" /><category term="certificates" /><category term="reports" /><category term="docs" /><category term="adwhirl_v3.1.1" /><category term="suggested_ad_units" /><category term="admob_v5.0.5" /><category term="php" /><category term="dfp_appengine" /><category term="mobile_targeting" /><category term="client_libraries" /><category term="app_engine" /><category term="impression_share" /><category term="dfp_v201111" /><category term="creatives" /><category term="dfp_api" /><category term="adwhirl" /><category term="analytics" /><category term="geotargeting" /><category term="dfa_v1.17" /><category term="dfa_api" /><category term="google_apps_script" /><category term="hangout" /><category term="admob_sdk" /><category term="interview" /><category term="android" /><category term="chart_tools" /><category term="adsense_management_api_v1.1" /><category term="adsense_management_api_v1" /><category term="animation" /><category term="common_questions" /><category term="ssl" /><category term="adsense_host_api_v3" /><category term="adwords_CreateAccountService" /><category term="oauth" /><category term="android_layout" /><category term="admob_v4.3.1" /><category term="iOS" /><category term="adwords_api" /><category term="dfa_v1.18" /><category term="adsense_management_api" /><category term="dfa_ad_service" /><category term="dfa_v1.16" /><category term="reporting" /><title>Google Ads Developer Blog</title><subtitle type="html">The official blog for information about the AdWords, AdSense, DoubleClick and AdMob APIs and SDKs.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://googleadsdeveloper.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://googleadsdeveloper.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Rachel Durfee</name><uri>http://www.blogger.com/profile/16428609225474396121</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/GoogleAdsDeveloperBlog" /><feedburner:info uri="googleadsdeveloperblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>GoogleAdsDeveloperBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;C0cERXg5eCp7ImA9WhRUF0w.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-2479021491273786424</id><published>2012-01-27T16:36:00.000-08:00</published><updated>2012-01-27T16:36:44.620-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T16:36:44.620-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="admob_sdk" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><title>Announcing AdCatalog v1 for iOS</title><content type="html">&lt;p&gt;We’re very pleased to announce the release of &lt;a href="http://code.google.com/p/google-mobile-dev/"&gt;AdCatalog&lt;/a&gt; v1 for the iOS platform.  AdCatalog is a sample project that demonstrates how to incorporate banner and interstitial ad units into your application.  In particular, AdCatalog showcases implementations for two standard banner ad sizes&amp;mdash;320x50 and 300x250&amp;mdash;and several use cases for interstitial ad units: basic, app launch splash screen, in-between game levels, and before playing a stored video.&lt;/p&gt;

&lt;p&gt;AdCatalog can be downloaded as a zip from our &lt;a href="http://code.google.com/p/google-mobile-dev/downloads/list"&gt;google-mobile-dev&lt;/a&gt; project.  Additionally, feel free to clone the repository or examine the source from the &lt;a href="http://code.google.com/p/google-mobile-dev/source/checkout?repo=adcatalog-ios"&gt;checkout page&lt;/a&gt;.  In version 2, we’ll be looking to add even more advanced layout options to our banner scenario, so be sure to stay tuned.  As usual, if you have any questions, comments, concerns, or feature requests, we appreciate hearing the feedback on our &lt;a href="http://groups.google.com/group/google-admob-ads-sdk"&gt;developer forum&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/u/0/100951976559465900344" rel="author"&gt;&lt;img width="20" height="20" src="https://lh4.googleusercontent.com/-JJsLfLVCckY/AAAAAAAAAAI/AAAAAAABVog/oL3K4YTTcJA/photo.jpg?sz=20" style="vertical-align:middle; border:none;"&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/u/0/100951976559465900344" rel="author"&gt;Wes Goodman&lt;/a&gt;, AdMob Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-2479021491273786424?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/jRwS3ZhuE0Y" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/2479021491273786424?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/2479021491273786424?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/jRwS3ZhuE0Y/announcing-adcatalog-v1-for-ios.html" title="Announcing AdCatalog v1 for iOS" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/-JJsLfLVCckY/AAAAAAAAAAI/AAAAAAABVog/oL3K4YTTcJA/s72-c/photo.jpg?sz=20" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/announcing-adcatalog-v1-for-ios.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEBSHk9cSp7ImA9WhRUFkU.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-5001515692051637725</id><published>2012-01-27T09:49:00.000-08:00</published><updated>2012-01-27T10:07:39.769-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T10:07:39.769-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><category scheme="http://www.blogger.com/atom/ns#" term="adwords_v201109" /><title>Prepare for the sunset with the AdWords API v201109 migration checklist</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
As announced in October, we will sunsetting all versions of the AdWords API prior to v201109 on February 29, 2012. To help you prepare to migrate to v201109, we've created a checklist that covers all of the required changes:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Required Changes:&lt;/b&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Migrate all API calls to use v201109 services&lt;/li&gt;
&lt;li&gt;Migrate all API calls to use clientCustomerId (instead of clientEmail) to identify an account as the target of an operation (&lt;a href="http://adwordsapi.blogspot.com/2011/11/discover-v201109-changes-to-accounts.html"&gt;Blog post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Migrate campaign geo target creation and identification to use the new location criterion object (available through the &lt;a href="http://code.google.com/apis/adwords/docs/reference/latest/CampaignCriterionService.html"&gt;CampaignCriterionService&lt;/a&gt; and the &lt;a href="http://code.google.com/apis/adwords/docs/reference/latest/LocationCriterionService.html"&gt;LocationCriterionService&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Migrate all other campaign targets (except ad scheduling) from the CampaignTargetService to &lt;a href="http://code.google.com/apis/adwords/docs/reference/latest/CampaignCriterionService.html"&gt;CampaignCriterionService&lt;/a&gt; using the appropriate criterion objects defined within that service*&lt;/li&gt;
&lt;li&gt;Migrate cross client reporting to v201109 AdHoc (single account) reports (&lt;a href="http://adwordsapi.blogspot.com/2011/11/discover-v201109-adhoc-reports.html"&gt;Blog post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Provide developerToken as HTTP header in AdHoc report requests &lt;/li&gt;
&lt;li&gt;The last few API releases have seen various services migrate to generic selectors, as you update to v201109 you’ll need to migrate from service specific selectors to generic selectors as required. See the &lt;a href="http://code.google.com/apis/adwords/docs/selectorguide.html"&gt;Selector Migration Reference&lt;/a&gt; for details&lt;/li&gt;
&lt;li&gt;Update to the very latest version of the &lt;a href="http://code.google.com/apis/adwords/docs/clientlibraries.html"&gt;AdWords API client library&lt;/a&gt; specific to the programming language(s) that you use for API tool/platform development**&lt;/li&gt;
&lt;li&gt;If you generate your own client side stubs from the API Service WSDLs, make sure that your requests strictly adhere to the WSDL definition as we have implemented stricter validation for the SOAP header and envelope (&lt;a href="http://googleadsdeveloper.blogspot.com/2012/01/adwords-soap-header-validation-is-being.html"&gt;Blog post&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Optional Changes:&lt;/b&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;You can now use the v201109 &lt;a href="http://code.google.com/apis/adwords/docs/reference/latest/CreateAccountService.html"&gt;CreateAccountService&lt;/a&gt; to create AdWords optional-login accounts
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Note: &lt;/b&gt;If you do not make the required changes, calls made using versions of the AdWords API prior to v201109 will return errors after February 29th 2012&lt;br /&gt;
&lt;br /&gt;
Additional Notes:&lt;br /&gt;
*In v201109, most targets become criteria, with each having it’s own ‘type’ of criterion object (see this &lt;a href="http://adwordsapi.blogspot.com/2011/11/discovering-v201109-how-to-target.html"&gt;Blog post&lt;/a&gt; for more details)&lt;br /&gt;
**This is an important requirement, so do make sure to check the version of the library or libraries that you are using against those available &lt;a href="http://code.google.com/apis/adwords/docs/clientlibraries.html"&gt;here&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/u/0/105936431317651182231/posts"&gt;&lt;img height="20" src="https://lh4.googleusercontent.com/-fdgv1YNMZlU/AAAAAAAAAAI/AAAAAAAAAQI/UdMK6R1o2ZY/s200-c-k/photo.jpg?sz=20" style="border: none; vertical-align: middle;" width="20" /&gt;&lt;/a&gt; - &lt;a href="https://plus.google.com/u/0/105936431317651182231/posts" rel="author"&gt;Mandy Waite&lt;/a&gt;, AdWords API Team&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-5001515692051637725?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/3xGml61qWA0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/5001515692051637725?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/5001515692051637725?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/3xGml61qWA0/prepare-for-sunset-with-adwords-api.html" title="Prepare for the sunset with the AdWords API v201109 migration checklist" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/prepare-for-sunset-with-adwords-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMHQXgyeip7ImA9WhRUFk0.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-643332180493763528</id><published>2012-01-26T11:00:00.000-08:00</published><updated>2012-01-26T11:33:50.692-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T11:33:50.692-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dfp_api" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Getting Started With the PHP Client Library</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Recently, we released our first &lt;a href="http://code.google.com/apis/dfp/docs/videos.html"&gt;client library walkthrough video&lt;/a&gt; for the DoubleClick for Publishers API. This five-minute video guide shows you how to get up and running with the &lt;a href="http://code.google.com/p/google-api-dfp-php/"&gt;PHP client library&lt;/a&gt; from downloading the code to running one of the examples. All you need to get started is a &lt;a href="http://code.google.com/apis/dfp/docs/prod_signup.html"&gt;DFP account&lt;/a&gt; (production or sandbox) and a machine with PHP 5.2.x and the &lt;a href="http://us3.php.net/manual/en/book.soap.php"&gt;SoapClient&lt;/a&gt;, &lt;a href="http://php.net/manual/en/book.openssl.php"&gt;OpenSSL&lt;/a&gt;, and &lt;a href="http://php.net/manual/en/book.curl.php"&gt;cURL&lt;/a&gt; extensions. For new users to the API, it’s a great way to get acquainted with the documentation pages, project site, and client library features.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="360" src="http://www.youtube.com/embed/eNwxMyHVmwY" width="480"&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;br /&gt;
The video takes you through an explanation of how the &lt;a href="http://code.google.com/p/google-api-dfp-php/source/browse/trunk/examples/v201111/CreativeService/GetCreativesByStatementExample.php"&gt;getCreativesByStatement&lt;/a&gt; example makes an API call and highlights common usage patterns and best practices for the client library.  We also show you what happens when a call returns an error and how you can configure logging to get more information and troubleshoot an issue. &lt;br /&gt;
&lt;br /&gt;
Please let us know about any topics you would like us to cover in a video guide or blog by leaving a comment on our &lt;a href="http://code.google.com/apis/dfp/forum/discussions.html"&gt;forum&lt;/a&gt;.  You can also chat with us live at one of our &lt;a href="http://googleadsdeveloper.blogspot.com/search/label/dfp_api"&gt;DFP API Office Hours Hangouts&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="c2"&gt;
&lt;/div&gt;
&lt;div class="c2"&gt;
&lt;/div&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/u/0/115474229489284556707"&gt;&lt;img height="20" src="https://lh3.googleusercontent.com/-pDdv2kTjyNw/AAAAAAAAAAI/AAAAAAAAAnE/q_kK4BYy-mM/photo.jpg?sz=20" style="border: none; vertical-align: middle;" width="20" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/u/0/115474229489284556707" rel="author"&gt;Jeffrey Sham&lt;/a&gt;, DFP API Team&lt;/span&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-643332180493763528?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/EFkAdAg6xK4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/643332180493763528?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/643332180493763528?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/EFkAdAg6xK4/getting-started-with-php-client-library.html" title="Getting Started With the PHP Client Library" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/eNwxMyHVmwY/default.jpg" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/getting-started-with-php-client-library.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08HRX48eSp7ImA9WhRUFUw.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-3827324289758060642</id><published>2012-01-25T11:30:00.000-08:00</published><updated>2012-01-25T11:30:34.071-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-25T11:30:34.071-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><title>AdWords SOAP Header validation is being enabled</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Starting with v201109, we &lt;a href="http://googleadsdeveloper.blogspot.com/2011/12/discover-adwords-api-v201109-xml.html"&gt;enabled stricter validation&lt;/a&gt; of the SOAP Body, meaning that XML that did not closely follow the XML Schema defined in the WSDL would be rejected with a SOAP fault.  This stricter validation enables developers to detect flaws in their applications, such as sending an unsupported field, at development time rather than later discovering that field was ignored.&lt;br /&gt;
&lt;br /&gt;
In the coming weeks, we will also be enabling stricter validation of the SOAP Headers.  Currently, SOAP Headers that don’t validate against the XML Schema are ignored.  This includes headers such as clientEmail/applicationToken (both of which do not apply to v201109) or partialFailure, which is case sensitive (will not accept “TRUE” or “True”, only “true”).  When clientEmail is ignored, the request will target the authenticating account (often an MCC), which will, for example, return an error message if you attempt to add a Campaign or no results if you make a GET request.&lt;br /&gt;
&lt;br /&gt;
The stricter validation will trigger a SOAP fault for any SOAP Headers that do not match the XML Schema defined in the WSDL.  This may cause your application to see more errors such as those referenced in our &lt;a href="http://googleadsdeveloper.blogspot.com/2011/12/discover-adwords-api-v201109-xml.html"&gt;previous blog post&lt;/a&gt;.  This validation will enable developers to better detect bugs in their application that were previously silently ignored.&lt;br /&gt;
&lt;br /&gt;
If you have any questions, please post on&amp;nbsp;&lt;a href="https://groups.google.com/forum/#!forum/adwords-api"&gt;the forum&lt;/a&gt; or attend one of the&amp;nbsp;&lt;a href="https://www.google.com/calendar/b/0/embed?src=7brqg62i0mbinu226iblpcnmoo@group.calendar.google.com&amp;amp;ctz=America/New_York"&gt;AdWords API Office Hours&lt;/a&gt; Hangouts.&lt;/div&gt;
&lt;br /&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts"&gt;&lt;img height="20" src="https://lh6.googleusercontent.com/-Bm_0uFwE20M/AAAAAAAAAAI/AAAAAAAAALY/hflk83UJtt4/s200-c-k/photo.jpg?sz=20" style="border: none; vertical-align: middle;" width="20" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts" rel="author"&gt;Kevin Winter&lt;/a&gt;, AdWords API Team&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-3827324289758060642?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/Df6sUY7eyLA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3827324289758060642?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3827324289758060642?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/Df6sUY7eyLA/adwords-soap-header-validation-is-being.html" title="AdWords SOAP Header validation is being enabled" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/adwords-soap-header-validation-is-being.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMCR349fyp7ImA9WhRUFE0.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-1010548136944707198</id><published>2012-01-24T02:19:00.000-08:00</published><updated>2012-01-24T02:21:06.067-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-24T02:21:06.067-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="impression_share" /><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><category scheme="http://www.blogger.com/atom/ns#" term="reporting" /><title>Upcoming changes to AdWords Impression Share metrics</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;p&gt;We recently &lt;a href='http://adwords.blogspot.com/2012/01/coming-soon-ad-group-impression-share.html'&gt;announced&lt;/a&gt; upcoming changes to AdWords &lt;a href='http://support.google.com/adwords/bin/answer.py?hl=en&amp;answer=52760'&gt;Impression Share&lt;/a&gt; metrics. If you are using the &lt;a href='http://code.google.com/apis/adwords/'&gt;AdWords API&lt;/a&gt; to download &lt;code&gt;BudgetLostImpressionShare&lt;/code&gt;, &lt;code&gt;ImpressionShare&lt;/code&gt;, &lt;code&gt;QualityLostImpressionShare&lt;/code&gt; and &lt;code&gt;ExactMatchImpressionShare&lt;/code&gt; metrics in &lt;a href='http://code.google.com/apis/adwords/docs/appendix/reports.html#account'&gt;account&lt;/a&gt; and &lt;a href='http://code.google.com/apis/adwords/docs/appendix/reports.html#campaign'&gt;campaign&lt;/a&gt; performance reports, then the upcoming change will affect you in the following ways:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;We will revise campaign-level Impression Share metrics from May 1, 2011 to present. You may notice some adjustments in past campaign-level Impression Share data once this change goes live.&lt;/li&gt;
  &lt;li&gt;We will remove campaign-level Impression Share metrics prior to May 1, 2011. If you depend on historic impression share data prior to May 1, 2011, then you need to download them before January 30th.&lt;/li&gt;
  &lt;li&gt;All Impression Share metrics will only be updated once every day, by afternoon PST. In addition, the data will no longer be available for segmentation by hour. If you have a saved report definition that requests hourly aggregation of IS data, then those definitions will stop working once the new changes go live.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you wish to backup old Impression Share data or make changes to the way you use Impression Share to control your AdWords campaigns, please do so before January 30th. If you have any questions about the AdWords API, check out our &lt;a href='http://code.google.com/apis/adwords/community/'&gt;developer forum&lt;/a&gt;.&lt;/p&gt;
&lt;br /&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/103205605030324928671/posts"&gt;&lt;img height="40" src="https://lh3.googleusercontent.com/-ZweA5XhpT2A/AAAAAAAAAAI/AAAAAAAAABw/FhsD7vgWw_o/s40-c-k/photo.jpg" style="border: none; vertical-align: middle;" width="40" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/103205605030324928671/posts" rel="author"&gt;Anash P. Oommen&lt;/a&gt;, AdWords API Team.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-1010548136944707198?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/QoIcZyXi1BY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/1010548136944707198?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/1010548136944707198?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/QoIcZyXi1BY/upcoming-changes-to-adwords-impression.html" title="Upcoming changes to AdWords Impression Share metrics" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/upcoming-changes-to-adwords-impression.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8GR3o_eSp7ImA9WhRUEEQ.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-2231729852876896451</id><published>2012-01-20T13:27:00.000-08:00</published><updated>2012-01-20T13:27:06.441-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-20T13:27:06.441-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><category scheme="http://www.blogger.com/atom/ns#" term="reporting" /><title>DeveloperToken in reports rollback</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Based on recent AdWords API forum posts, many of you are unaware that on January 17th we began requiring a developer token in all post v13 report downloads.  As a result, we are temporarily rolling back this change to give you additional time to update your applications and upgrade to the latest version of the client libraries.  If you have already made this change, no action is required on your part.  We do plan to enforce this requirement and will update this blog post to reflect that.&lt;br /&gt;
&lt;br /&gt;
Minimum client library versions with support for providing the developerToken header in reports are as follows:&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;DotNet - &lt;a href="http://code.google.com/p/google-api-adwords-dotnet/downloads/list"&gt;13.1.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Java - &lt;a href="http://code.google.com/p/google-api-adwords-java/downloads/list"&gt;8.4.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Perl - &lt;a href="http://code.google.com/p/google-api-adwords-perl/downloads/list"&gt;2.5.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PHP - &lt;a href="http://code.google.com/p/google-api-adwords-php/downloads/list"&gt;2.7.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python - &lt;a href="http://code.google.com/p/google-api-ads-python/downloads/list"&gt;15.0.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ruby - &lt;a href="http://code.google.com/p/google-api-ads-ruby/downloads/list"&gt;revision 7ef32092a4d2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
As always, we encourage you to &lt;a href="http://feeds.feedburner.com/blogspot/lQlzL"&gt;subscribe&lt;/a&gt; to the AdWords API blog posts and &lt;a href="http://twitter.com/adwordsapi"&gt;Twitter account&lt;/a&gt; and to follow us on &lt;a href="https://groups.google.com/forum/#!forum/adwords-api"&gt;the forum&lt;/a&gt; to ensure that you are aware of all critical updates and requirements.&lt;br /&gt;
&lt;br /&gt;
If you have any questions, please post on&amp;nbsp;&lt;a href="https://groups.google.com/forum/#!forum/adwords-api"&gt;the forum&lt;/a&gt; or attend one of the&amp;nbsp;&lt;a href="https://www.google.com/calendar/b/0/embed?src=7brqg62i0mbinu226iblpcnmoo@group.calendar.google.com&amp;amp;ctz=America/New_York"&gt;AdWords API Office Hours&lt;/a&gt; Hangouts.&lt;/div&gt;
&lt;br /&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts"&gt;&lt;img height="20" src="https://lh6.googleusercontent.com/-Bm_0uFwE20M/AAAAAAAAAAI/AAAAAAAAALY/hflk83UJtt4/s200-c-k/photo.jpg?sz=20" style="border: none; vertical-align: middle;" width="20" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts" rel="author"&gt;Kevin Winter&lt;/a&gt;, AdWords API Team&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-2231729852876896451?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/eKirSPNbVFY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/2231729852876896451?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/2231729852876896451?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/eKirSPNbVFY/developertoken-in-reports-rollback.html" title="DeveloperToken in reports rollback" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/developertoken-in-reports-rollback.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EFR3gyfyp7ImA9WhRUEE0.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-6193463830903150007</id><published>2012-01-19T11:33:00.000-08:00</published><updated>2012-01-19T11:33:36.697-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-19T11:33:36.697-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><category scheme="http://www.blogger.com/atom/ns#" term="reporting" /><title>ReportDefinition XML Schema Definition is now available</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Unlike reports in previous AdWords API versions, v201109 &lt;a href="http://code.google.com/apis/adwords/docs/guides/reporting.html#adhoc"&gt;AdHoc reports&lt;/a&gt; are downloaded by POSTing XML to a URL rather than defining them using a SOAP service; therefore they have no WSDL document to describe the XML payload.  To ensure that your ReportDefinition XML is valid when sending it to the API,  we are now publishing an XML Schema Definition (XSD).&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
This XSD is tied to the versioned Report Download endpoint, allowing us to make incremental changes to reporting as needed.  Here’s an example URL used to obtain the XSD for v201109 ReportDefinitions:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://adwords.google.com/api/adwords/reportdownload/v201109/reportDefinition.xsd"&gt;https://adwords.google.com/api/adwords/reportdownload/v201109/reportDefinition.xsd&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;

How to use this XSD&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
There are &lt;a href="http://stackoverflow.com/questions/15732/whats-the-best-way-to-validate-an-xml-file-against-an-xsd-file"&gt;many tools&lt;/a&gt; to use to validate XML against an XSD.  Here we will show how to use the common command-line tool &lt;a href="http://xmlsoft.org/xmllint.html"&gt;xmllint&lt;/a&gt; to validate against the XSD.  First, download the &lt;a href="https://adwords.google.com/api/adwords/reportdownload/v201109/reportDefinition.xsd"&gt;reportDefinition.xsd&lt;/a&gt; to a working directory.  Next, save some ReportDefinition XML to a file, such as reportDefinition.xml:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;lt;reportDefinition xmlns="https://adwords.google.com/api/adwords/cm/v201109"&amp;gt;
 &amp;lt;selector&amp;gt;
   &amp;lt;fields&amp;gt;CampaignId&amp;lt;/fields&amp;gt;
   &amp;lt;fields&amp;gt;Id&amp;lt;/fields&amp;gt;
   &amp;lt;fields&amp;gt;Impressions&amp;lt;/fields&amp;gt;
   &amp;lt;fields&amp;gt;Clicks&amp;lt;/fields&amp;gt;
   &amp;lt;fields&amp;gt;Cost&amp;lt;/fields&amp;gt;
   &amp;lt;predicates&amp;gt;
     &amp;lt;field&amp;gt;Status&amp;lt;/field&amp;gt;
     &amp;lt;operator&amp;gt;IN&amp;lt;/operator&amp;gt;
     &amp;lt;values&amp;gt;ENABLED&amp;lt;/values&amp;gt;
     &amp;lt;values&amp;gt;PAUSED&amp;lt;/values&amp;gt;
   &amp;lt;/predicates&amp;gt;
 &amp;lt;/selector&amp;gt;
 &amp;lt;reportName&amp;gt;Custom Adgroup Performance Report&amp;lt;/reportName&amp;gt;
 &amp;lt;reportType&amp;gt;ADGROUP_PERFORMANCE_REPORT&amp;lt;/reportType&amp;gt;
 &amp;lt;dateRangeType&amp;gt;LAST_7_DAYS&amp;lt;/dateRangeType&amp;gt;
 &amp;lt;downloadFormat&amp;gt;CSV&amp;lt;/downloadFormat&amp;gt;
&amp;lt;/reportDefinition&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Now run the following command from the directory you placed these two files in:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;$ xmllint --schema reportDefinition.xsd reportDefinition.xml
[xml omitted]
reportDefinition.xml validates
&lt;/pre&gt;
&lt;br /&gt;
This step verifies that your ReportDefinition XML is well-formed for use with the AdWords API report downloads.&lt;br /&gt;
&lt;br /&gt;
If you have any questions, please post on&amp;nbsp;&lt;a href="https://groups.google.com/forum/#!forum/adwords-api"&gt;the forum&lt;/a&gt; or attend one of the&amp;nbsp;&lt;a href="https://www.google.com/calendar/b/0/embed?src=7brqg62i0mbinu226iblpcnmoo@group.calendar.google.com&amp;amp;ctz=America/New_York"&gt;AdWords API Office Hours&lt;/a&gt; Hangouts.&lt;br /&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts"&gt;&lt;img height="20" src="https://lh6.googleusercontent.com/-Bm_0uFwE20M/AAAAAAAAAAI/AAAAAAAAALY/hflk83UJtt4/s200-c-k/photo.jpg?sz=20" style="border: none; vertical-align: middle;" width="20" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts" rel="author"&gt;Kevin Winter&lt;/a&gt;, AdWords API Team&lt;/span&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-6193463830903150007?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/jy1otqlIL4M" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/6193463830903150007?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/6193463830903150007?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/jy1otqlIL4M/reportdefinition-xml-schema-definition.html" title="ReportDefinition XML Schema Definition is now available" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/reportdefinition-xml-schema-definition.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AGRHs-eSp7ImA9WhRVGU0.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-9202514686994262847</id><published>2012-01-18T07:48:00.000-08:00</published><updated>2012-01-18T07:48:45.551-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-18T07:48:45.551-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dfa_v1.18" /><category scheme="http://www.blogger.com/atom/ns#" term="dfa_api" /><category scheme="http://www.blogger.com/atom/ns#" term="dfa_v1.17" /><title>Upcoming Changes to the DFA API</title><content type="html">&lt;p&gt;As we continue to improve the DFA API, two upcoming security enhancements are particularly noteworthy. We want you to be aware of adjustments to HTTP support and token lifespan and to take them into consideration when planning the development and upkeep of your applications.&lt;/p&gt;

&lt;h2&gt;Moving Towards Secure Connections&lt;/h2&gt;

&lt;p&gt;Last year Google began an effort to &lt;a href="http://googlecode.blogspot.com/2011/03/improving-security-of-google-apis-with.html"&gt;improve the security of our APIs&lt;/a&gt; with SSL encryption. Most of Google’s Ads APIs already require requests to be made over HTTPS connections. The DFA API will be following suit this year. We’ll consider the use of HTTP connections deprecated with the release of v1.17 in mid-February, 2012. Support for making requests over HTTP will be completely retired in v1.18, expected to launch in May, 2012. Our &lt;a href="http://code.google.com/apis/dfa/docs/clients.html"&gt;client libraries&lt;/a&gt; will transition to using HTTPS connections during the launch of v1.17.&lt;/p&gt;

&lt;h2&gt;On the Horizon: Expiring Tokens&lt;/h2&gt;

&lt;p&gt;Currently, tokens generated from the &lt;a href="http://code.google.com/apis/dfa/docs/reference/current/login/service.html#authenticate"&gt;login service’s authenticate operation&lt;/a&gt; do not expire unless the user profile’s password is changed. In the not-too-distant future, API tokens will have a timed lifespan. We will be adding a new error code to represent a failure due to an expired token so that your applications will be able to catch and handle this situation.&lt;/p&gt;

&lt;p&gt;We do not have a concrete release date for token expirations yet. It will not be part of the v1.17 release. Please keep an eye on our blog for further updates about this topic. Questions and comments are always welcome on our &lt;a href="https://groups.google.com/group/google-doubleclick-for-advertisers-api"&gt;forum&lt;/a&gt;.&lt;/p&gt;

&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/113204894998269100367/"&gt;&lt;img height="20" src="https://lh5.googleusercontent.com/-jfMpzPefhpA/AAAAAAAAAAI/AAAAAAAAAC4/RiK3R7FaK-8/photo.jpg?sz=20" style="border: none; vertical-align: middle;" width="20" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/113204894998269100367/" rel="author"&gt;Joseph DiLallo&lt;/a&gt;, DFA API Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-9202514686994262847?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/YrGxVIHrDVw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/9202514686994262847?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/9202514686994262847?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/YrGxVIHrDVw/upcoming-changes-to-dfa-api.html" title="Upcoming Changes to the DFA API" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-jfMpzPefhpA/AAAAAAAAAAI/AAAAAAAAAC4/RiK3R7FaK-8/s72-c/photo.jpg?sz=20" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/upcoming-changes-to-dfa-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYESHo5fSp7ImA9WhRVFE0.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-3729825364658373779</id><published>2012-01-12T12:28:00.000-08:00</published><updated>2012-01-12T12:28:29.425-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-12T12:28:29.425-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="i18n" /><category scheme="http://www.blogger.com/atom/ns#" term="docs" /><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><title>Latest AdWords API developer docs available in 9 languages</title><content type="html">We are happy to announce availability of the AdWords API documentation for &lt;a href="http://code.google.com/apis/adwords/docs/reference/"&gt;v201109&lt;/a&gt; release in 9 languages in addition to English. In time for your upcoming migration with &lt;a href="http://googleadsdeveloper.blogspot.com/2012/01/55-days-until-adwords-api-deprecation.html"&gt;deadline on February 29, 2012&lt;/a&gt;, we have released the latest documentation in Chinese, French, Japanese, German, Korean, Portuguese, Russian, and Spanish. The drop-down menu at the top right corner of the documentation can be used to change the language.&lt;br /&gt;&lt;br /&gt;

If you have any questions, suggestions or requests for improving docs please post on the &lt;a href="https://groups.google.com/forum/#!forum/adwords-api"&gt;forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;

&lt;span class='post-author'&gt;&lt;a href="https://plus.google.com/u/0/103334611312899628087"&gt;&lt;img height="20" width="20" src="https://lh6.googleusercontent.com/-d0Rf14Uia3c/AAAAAAAAAAI/AAAAAAAABiw/TV_B-hVQOj8/photo.jpg?sz=20" style="vertical-align: middle; border:none;"/&gt;&lt;/a&gt; - &lt;a rel="author" href="https://plus.google.com/u/0/103334611312899628087/"&gt;Stan Grinberg&lt;/a&gt;, AdWords API Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-3729825364658373779?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/m39ky1nAuCw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3729825364658373779?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3729825364658373779?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/m39ky1nAuCw/latest-adwords-api-developer-docs.html" title="Latest AdWords API developer docs available in 9 languages" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-d0Rf14Uia3c/AAAAAAAAAAI/AAAAAAAABiw/TV_B-hVQOj8/s72-c/photo.jpg?sz=20" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/latest-adwords-api-developer-docs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAFSHo9eip7ImA9WhRVE0Q.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-3599141476902750789</id><published>2012-01-12T10:41:00.000-08:00</published><updated>2012-01-12T10:41:59.462-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-12T10:41:59.462-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="client_libraries" /><category scheme="http://www.blogger.com/atom/ns#" term="dfa_api" /><category scheme="http://www.blogger.com/atom/ns#" term="dfp_api" /><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><title>AdWords, DFA and DFP Client Library Updates</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
We’re constantly making improvements to our AdWords, DoubleClick for Advertisers (DFA) and DoubleClick for Publishers (DFP) client libraries across all supported languages.  Recently, we added the following features.  Read the ChangeLogs and READMEs for details on these changes:&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;GZIP compression used when sending and receiving API calls and reports. (Perl and Java do not have this for AdWords API Report Downloads).&lt;/li&gt;
&lt;li&gt;SSL certificate verification.&lt;/li&gt;
&lt;li&gt;AdWords only - Examples and support for the new &lt;a href="http://code.google.com/apis/adwords/docs/reference/latest/CreateAccountService.html"&gt;CreateAccountService&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
Please see below for a summary of other changes for each library.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;DotNet&lt;/b&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;No other updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Java&lt;/b&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;A &lt;a href="http://code.google.com/p/google-api-ads-java/"&gt;preview version&lt;/a&gt; of the rewritten Java client library is now available for AdWords, DFA and DFP APIs.  Please consider this alpha-quality code; please file any bugs or feature requests on the &lt;a href="http://code.google.com/p/google-api-ads-java/issues/list"&gt;issue tracker&lt;/a&gt;.  The new library currently supports Maven2, SLF4J, OAuth and we have plans to support other environments and platforms.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;b&gt;
Ruby&lt;/b&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Improved parameters validation and error reporting on missing / mistyped fields.&lt;/li&gt;
&lt;li&gt;HTTP headers are now logged on DEBUG level.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Perl&lt;/b&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Fixes to OAuth logic to better handle misconfigurations.&lt;/li&gt;
&lt;li&gt;Several bug fixes.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;PHP&lt;/b&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;AdWords only - Added example to get the clientCustomerId for a clientEmail.&lt;/li&gt;
&lt;li&gt;AdWords only - Fixed issue with GetAccountHeirarchy example when used in the sandbox.&lt;/li&gt;
&lt;li&gt;Fixed issue with lingering "id" attribute after reference replacement. Added tests for SoapXmlFixer.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Python&lt;/b&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Validation and error handling has been improved to make it easier to use OAuth and Google AppEngine.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
You can download updated versions of our client libraries from their respective sites, or see a list of all client libraries: &lt;a href="http://code.google.com/apis/adwords/docs/clientlibraries.html"&gt;AdWords&lt;/a&gt;, &lt;a href="http://code.google.com/apis/dfa/docs/clients.html"&gt;DFA&lt;/a&gt; and &lt;a href="http://code.google.com/apis/dfp/docs/clients.html"&gt;DFP&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or would like to discuss these changes, please post on our forums: &lt;a href="https://groups.google.com/forum/#!forum/adwords-api"&gt;AdWords&lt;/a&gt;, &lt;a href="https://groups.google.com/forum/#!forum/google-doubleclick-for-advertisers-api"&gt;DFA&lt;/a&gt;, &lt;a href="https://groups.google.com/forum/#!forum/google-doubleclick-for-publishers-api"&gt;DFP&lt;/a&gt;.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts"&gt;&lt;img height="20" src="https://lh6.googleusercontent.com/-Bm_0uFwE20M/AAAAAAAAAAI/AAAAAAAAALY/hflk83UJtt4/s200-c-k/photo.jpg?sz=20" style="border: none; vertical-align: middle;" width="20" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts" rel="author"&gt;Kevin Winter&lt;/a&gt;, AdWords API Team&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-3599141476902750789?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/IhJcJ9cvY3c" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3599141476902750789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3599141476902750789?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/IhJcJ9cvY3c/adwords-dfa-and-dfp-client-library.html" title="AdWords, DFA and DFP Client Library Updates" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/adwords-dfa-and-dfp-client-library.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIMQ345fSp7ImA9WhRVE0s.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-7054615471246453937</id><published>2012-01-12T03:26:00.000-08:00</published><updated>2012-01-12T03:26:22.025-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-12T03:26:22.025-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adsense_api" /><category scheme="http://www.blogger.com/atom/ns#" term="chart_tools" /><category scheme="http://www.blogger.com/atom/ns#" term="adsense_management_api" /><title>AdSense Management API and Chart Tools week: Thursday</title><content type="html">&lt;p&gt;Thanks for joining us for &lt;a href="http://googleadsdeveloper.blogspot.com/2012/01/adsense-management-api-and-chart-tools_11.html"&gt;Chart Tools week&lt;/a&gt; on the blog, where we're sharing ways to use &lt;a href="http://code.google.com/apis/chart/index.html"&gt;Google Chart Tools&lt;/a&gt;. In the fourth and last part of this series, we’ll examine how to organize and manage multiple charts that share the same underlying data using dashboards and controls.&lt;/p&gt;
&lt;h2&gt;Interaction with data&lt;/h2&gt;

&lt;p&gt;The last request of the CEO is to be able to interact with the data: he wants to filter the line chart and the column chart by expressing a range of page views.&lt;/p&gt;

&lt;p&gt;What we need to do now is compose the 2 charts into a &lt;a href="http://code.google.com/apis/chart/interactive/docs/gallery/controls.html#dashboardobject"&gt;Dashboard&lt;/a&gt; object, following these steps:
&lt;ul&gt;
&lt;li&gt;combine the data retrieved from the AdSense Management API into one single table&lt;/li&gt;
&lt;li&gt;create the charts&lt;/li&gt;
&lt;li&gt;add 1 &lt;a href="http://code.google.com/apis/chart/interactive/docs/gallery/controls.html#controlwrapperobject"&gt;control&lt;/a&gt;, a &lt;a href="http://code.google.com/apis/chart/interactive/docs/gallery/controls.html#numberrangefilter"&gt;Number Range Filter&lt;/a&gt; for ad requests&lt;/li&gt;
&lt;li&gt;create a view on top of the data table&lt;/li&gt;
&lt;li&gt;create a &lt;code&gt;Dashboard&lt;/code&gt; object and feed it with the view&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;h2&gt;Create the DataTable&lt;/h2&gt;

&lt;p&gt;To create a &lt;code&gt;Dashboard&lt;/code&gt;, we need the charts to share the same underlying data. For this reason, we will combine the requests for the line and the column chart into a single request:
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;start date:&lt;/td&gt;&lt;td&gt;2011-01-01&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;end date:&lt;/td&gt;&lt;td&gt;2011-12-31&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;dimensions:&lt;/td&gt;&lt;td&gt;MONTH&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;metrics:&lt;/td&gt;&lt;td&gt;PAGE_VIEWS, AD_REQUESTS, MATCHED_AD_REQUESTS, INDIVIDUAL_AD_IMPRESSIONS&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;filters:&lt;/td&gt;&lt;td&gt;(none)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/p&gt;

&lt;p&gt;The result will be similar to:
&lt;pre class="prettyprint"&gt;
result = {
  "kind": "adsense#report",
  "totalMatchedRows": "9",
  "headers": [ {...} ],
  "rows": [
    ["2011-01", "28", "46", "41", "165"],
    ...
    ["2011-11", "2", "3", "3", "3"]
  ],
  "totals": ["", "241", "278", "264", "825"],
  "averages": ["", "26", "30", "29", "91"]
}
&lt;/pre&gt;

&lt;p&gt;Now we can create our &lt;code&gt;DataTable&lt;/code&gt;, adding columns for all the metrics:
&lt;pre class="prettyprint"&gt;
var data = new google.visualization.arrayToDataTable(
    [['Month', 'PAGE_VIEWS', 'AD_REQUESTS', 'MATCHED_AD_REQUESTS',
        'INDIVIDUAL_AD_IMPRESSIONS']].concat(resp.rows));
&lt;/pre&gt;&lt;/p&gt;
&lt;h2&gt;Create the charts&lt;/h2&gt;

&lt;p&gt;The next step is to create  the wrappers:
&lt;pre class="prettyprint"&gt;
var lineChartWrapper = new google.visualization.ChartWrapper({
  chartType: 'LineChart',
  options: {'title': 'Ad requests trend - Year 2011'},
  containerId: 'line_chart_div',
  view: {'columns': [0, 2]}
});

var columnChartWrapper = new google.visualization.ChartWrapper({
  chartType: 'ColumnChart',
  options: {'title': 'Performances per month - Year 2011'},
  containerId: 'column_chart_div',
  view: {'columns': [0, 1, 3, 4]}
});
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;There are two important differences between creating wrappers for a dashboard and wrappers for standalone charts:
&lt;ul&gt;
&lt;li&gt;For each chart in a dashboard, we use the view option to select which columns are relevant for the chart (remember, all the data for the two charts is in the same table now)&lt;/li&gt;
&lt;li&gt;We don’t draw the charts now, we’ll draw the entire dashboard later&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;Time to create the control!&lt;/p&gt;
&lt;h2&gt;Create the control&lt;/h2&gt;

&lt;p&gt;Let’s create the control wrapper for our number range filter for the ad requests:
&lt;pre class="prettyprint"&gt;
var adRequestsSlider = new google.visualization.ControlWrapper({
  'controlType': 'NumberRangeFilter',
  'containerId': 'ad_requests_filter_div',
  'options': {
    'filterColumnLabel': 'Ad requests',
  }
});
&lt;/pre&gt;

&lt;p&gt;The option &lt;code&gt;container_id&lt;/code&gt; specifies the element of the page where the filter will be drawn into, while &lt;code&gt;filterColumnLabel&lt;/code&gt; tells the filter which column to target.
&lt;h2&gt;Create the DataView&lt;/h2&gt;

&lt;p&gt;Remember that we need a &lt;code&gt;DataView&lt;/code&gt; to convert our string field to numeric fields:
&lt;pre class="prettyprint"&gt;
var view = new google.visualization.DataView(data);
view.setColumns([
  0,
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 1))}, type:'number', label:'Page views'},
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 2))}, type:'number', label:'Ad requests'},
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 3))}, type:'number', label:'Matched ad requests'},
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 4))}, type:'number', label:'Individual ad impressions'},
]);
&lt;/pre&gt;
&lt;h2&gt;Create the dashboard&lt;/h2&gt;

&lt;p&gt;Creating the &lt;code&gt;Dashboard&lt;/code&gt;, binding the control to the charts and drawing the dashboard is as easy as the following:
&lt;pre class="prettyprinting"&gt;
var dashboard = new google.visualization.Dashboard(
    document.getElementById('dashboard_div'))
    .bind(adRequestsSlider, [lineChartWrapper, columnChartWrapper])
    .draw(view);
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;dashboard_div&lt;/code&gt; is the element of the page that acts as container for the Dashboard:
&lt;pre class="prettyprint"&gt;
&amp;lt;div id="dashboard_div"&amp;gt;
  &amp;lt;!--Divs that will hold each control--&amp;gt;
  &amp;lt;div id="ad_requests_filter_div"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;!--Divs that will hold each chart--&amp;gt;
  &amp;lt;div id="line_chart_div"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div id="column_chart_div"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;And it’s done! Our Dashboard is ready. Check the &lt;a href="http://savedbythegoog.appspot.com/?id=a113303d175c72557e25c0dd2c027f6b8d9680fb"&gt;live example&lt;/a&gt; and the &lt;a href="http://code.google.com/p/adsense-apis-showcase/source/browse/#git%2FChartToolsWeek%2FThursday"&gt;source code for today&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;Mission Accomplished!&lt;/h2&gt;

&lt;p&gt;Well done -- our dashboard is ready and the CEO is happy with his new tool! Now you can relax and play foosball!&lt;/p&gt;

&lt;p&gt;If you want to know more about our APIs, check the documentation pages:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/apis/adsense/management/overview.html"&gt;AdSense Management API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/apis/chart/interactive/docs/"&gt;Google Chart Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;And if you have any additional questions, don’t hesitate to engage with us in our forums:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://groups.google.com/group/adsense-api"&gt;AdSense API forum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/forum/#!forum/google-visualization-api"&gt;Google Visualization API forum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;

&lt;p&gt;You can also join us in one of our AdSense API Office Hours on Google+ Hangouts. Check the schedule for the upcoming Office Hours in our &lt;a href="http://googleadsdeveloper.blogspot.com/"&gt;Google Ads Developer Blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Lastly, a public service announcement: thanks Riccardo for your help!&lt;/p&gt;

&lt;p&gt;&lt;span class="post-author"&gt; &lt;a href="https://plus.google.com/118276561380249048216/about"&gt;&lt;img src="https://lh5.googleusercontent.com/-RMp-hn38AZI/AAAAAAAAAAI/AAAAAAAAADE/59YQber32iU/photo.jpg?sz=20" style="vertical-align: middle; border: none;" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/118276561380249048216/about" rel="author"&gt;Silvano Luciani&lt;/a&gt;, AdSense API Team&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-7054615471246453937?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/saiPyeRZHkM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/7054615471246453937?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/7054615471246453937?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/saiPyeRZHkM/adsense-management-api-and-chart-tools_12.html" title="AdSense Management API and Chart Tools week: Thursday" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-RMp-hn38AZI/AAAAAAAAAAI/AAAAAAAAADE/59YQber32iU/s72-c/photo.jpg?sz=20" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/adsense-management-api-and-chart-tools_12.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04EQXw5eyp7ImA9WhRVE0w.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-2281589571084775261</id><published>2012-01-11T14:11:00.000-08:00</published><updated>2012-01-11T14:11:40.223-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T14:11:40.223-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="admob_sdk" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Get Started with Ad Catalog for Android</title><content type="html">&lt;p&gt;Last quarter we &lt;a href="https://groups.google.com/forum/#!searchin/google-admob-ads-sdk/Ad$20catalog/google-admob-ads-sdk/tbnVEP6LoLU/fMXyzHzvFXIJ"&gt;announced&lt;/a&gt; the release of &lt;a href="http://code.google.com/p/google-mobile-dev/"&gt;Ad Catalog&lt;/a&gt; for Android, a sample project that demonstrates how to incorporate ads into your application using the &lt;a href="http://code.google.com/mobile/ads/"&gt;Google AdMob SDK&lt;/a&gt;.  Today, we are excited to announce the release of a &lt;a href="http://www.youtube.com/watch?v=-2x3uzpj9b8"&gt;walkthrough video&lt;/a&gt; to help you get started with Ad Catalog in five minutes!  This video will guide you through the entire setup process, from downloading the source code to running it on an emulator.  The only preconditions are that you have Eclipse installed as well as an Android SDK version 3.2 or higher.&lt;/p&gt;

&lt;br/&gt;
&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/-2x3uzpj9b8" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;br/&gt;

&lt;p&gt;Ad Catalog shows you two implementations for standard banner ads.  You can select the size of the ad that is displayed on the Banners screen by selecting either the 320x50 standard banner ad or the 300x250 medium rectangle ad.&lt;/p&gt;

&lt;p&gt;In addition to display ads, Ad Catalog demonstrates various use cases for interstitial ads.  Ad Catalog provides examples on how to include interstitial ads in between game levels, before loading a YouTube video, and in between a screen swipe.  There is also an option to receive a splash screen interstitial ad.  If enabled, the app will load and display an interstitial ad the next time it starts up.&lt;/p&gt;

&lt;p&gt;The first version of the Android Ad Catalog source code can be downloaded from the &lt;a href="http://code.google.com/p/google-mobile-dev/downloads/list"&gt;google-mobile-dev&lt;/a&gt; project.  In the next version, we plan to add examples of banner ads in various advanced layouts.  The iOS implementation of Ad Catalog is almost complete, so stay tuned for another release announcement.  We appreciate your feedback, so please post any questions or feature requests you may have to our &lt;a href="https://groups.google.com/forum/#!forum/google-admob-ads-sdk"&gt;forum&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/112870803958713211515/"&gt;&lt;img width="20" height="20" src="https://lh4.googleusercontent.com/-VjOdMVF5_qc/AAAAAAAAAAI/AAAAAAAAAB8/aYikCy7pZmw/photo.jpg?sz=20" style="vertical-align:middle; border:none;"&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/112870803958713211515/" rel="author"&gt;Eric Leichtenschlag&lt;/a&gt;, AdMob Team&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-2281589571084775261?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/JFtTil5SuGs" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/2281589571084775261?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/2281589571084775261?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/JFtTil5SuGs/get-started-with-ad-catalog-for-android.html" title="Get Started with Ad Catalog for Android" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/-2x3uzpj9b8/default.jpg" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/get-started-with-ad-catalog-for-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UFQXw4fSp7ImA9WhRVEkU.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-7973023777959428641</id><published>2012-01-11T03:24:00.000-08:00</published><updated>2012-01-11T03:26:50.235-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-11T03:26:50.235-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adsense_api" /><category scheme="http://www.blogger.com/atom/ns#" term="chart_tools" /><category scheme="http://www.blogger.com/atom/ns#" term="adsense_management_api" /><title>AdSense Management API and Chart Tools week: Wednesday</title><content type="html">&lt;p&gt;Welcome back to &lt;a href="http://googleadsdeveloper.blogspot.com/2012/01/adsense-management-api-and-chart-tools_10.html"&gt;Chart Tools week&lt;/a&gt; here on the blog, where we're continuing our overview of generating charts for your AdSense reporting with &lt;a href="http://code.google.com/apis/chart/index.html"&gt;Google Chart Tools&lt;/a&gt;. Today we’ll examine how to generate two other types of charts: a table chart and a geo chart.&lt;/p&gt;
&lt;h2&gt;Table chart&lt;/h2&gt;

&lt;p&gt;The third chart requested by our CEO is a &lt;a href="http://code.google.com/apis/chart/interactive/docs/gallery/table.html"&gt;table chart&lt;/a&gt;. The table chart will contain the number of ad requests, the number of matched ad requests, and the number of individual ad impressions broken down by ad client ID.&lt;/p&gt;

&lt;p&gt;Our request will have these parameters:
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;start date:&lt;/td&gt;&lt;td&gt;2011-01-01&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;end date:&lt;/td&gt;&lt;td&gt;2011-12-31&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;dimensions:&lt;/td&gt;&lt;td&gt;AD_CLIENT_ID&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;metrics:&lt;/td&gt;&lt;td&gt;AD_REQUESTS, MATCHED_AD_REQUESTS, INDIVIDUAL_AD_IMPRESSIONS&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;filters:&lt;/td&gt;&lt;td&gt;(none)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/p&gt;

&lt;p&gt;And the result will be similar to:
&lt;pre class="prettyprint"&gt;
result = {
  "kind": "adsense#report",
  "totalMatchedRows": "4",
  "headers": [ {...} ],
  "rows": [
    ["ca-afdo-pub-1234567890123456", "59", "55", "232"],
    ...
    ["partner-mb-pub-1234567890123456", "1", "0", "0"]
  ],
  "totals": ["", "278", "264", "825"],
  "averages": ["", "69", "66", "206"]
}&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;As usual, let’s create a &lt;code&gt;DataTable&lt;/code&gt; and a &lt;code&gt;DataView&lt;/code&gt; to perform transformations on columns:
&lt;pre class="prettyprint"&gt;
var data = new google.visualization.arrayToDataTable([['Ad client id',
    'AD_REQUESTS', 'MATCHED_AD_REQUESTS', 'INDIVIDUAL_AD_IMPRESSIONS']]
    .concat(resp.rows));
var view = new google.visualization.DataView(data);
view.setColumns([
  0,
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 1))}, type:'number', label:'Ad requests'},
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 2))}, type:'number', label:'Matched ad requests'},
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 3))}, type:'number', label:'Individual ad impressions'}
]);&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Finally, let’s draw the table chart. Note that there is no title for a table chart: if you need one, you’ll have to add it in a different element.
&lt;pre class="prettyprint"&gt;
var tableWrapper = new google.visualization.ChartWrapper({
  chartType: 'Table',
  dataTable: view,
  containerId: 'vis_div'
});
tableWrapper.draw();&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;The table chart for our CEO is ready, and it can be sorted and paged.&lt;/p&gt;

&lt;p&gt;Check the &lt;a href="http://savedbythegoog.appspot.com/?id=ff6c93814fc9ef438d69937be1206c5a43c88693"&gt;live example&lt;/a&gt; and the &lt;a href="http://code.google.com/p/adsense-apis-showcase/source/browse/#git%2FChartToolsWeek%2FWednesday"&gt;source code for today&lt;/a&gt;!&lt;/p&gt;
&lt;h2&gt;Geo chart&lt;/h2&gt;

&lt;p&gt;Finally, the last chart requested from our CEO: a &lt;a href="http://code.google.com/apis/chart/interactive/docs/gallery/geochart.html"&gt;geo chart&lt;/a&gt;. The geo chart will show the number of page views for the year broken down by country name.&lt;/p&gt;

&lt;p&gt;Our request will have these parameters:
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;start date:&lt;/td&gt;&lt;td&gt;2011-01-01&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;end date:&lt;/td&gt;&lt;td&gt;2011-12-31&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;dimensions:&lt;/td&gt;&lt;td&gt;COUNTRY_NAME&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;metrics:&lt;/td&gt;&lt;td&gt;PAGE_VIEWS&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;filters:&lt;/td&gt;&lt;td&gt;(none)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/p&gt;

&lt;p&gt;And the result will be similar to:
&lt;pre class="prettyprint"&gt;
result = {
  "kind": "adsense#report",
  "totalMatchedRows": "9",
  "headers": [ {...} ],
  "rows": [
    ["Canada", "1"],
    ...
    ["United States", "52"]
  ],
  "totals": ["", "241"],
  "averages": ["", "26"],
}&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;DataTable&lt;/code&gt; and &lt;code&gt;DataView&lt;/code&gt; creation step:
&lt;pre class="prettyprint"&gt;
var data = new google.visualization.arrayToDataTable(
          [['Country', 'Page Views']].concat(resp.rows));

var view = new google.visualization.DataView(data);
view.setColumns([
  0,
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 1))}, type:'number', label:'Page views'}
]);&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Now we can draw the geo chart. For the geo chart there is no title:
&lt;pre class="prettyprint"&gt;
var geoChartWrapper = new google.visualization.ChartWrapper({
  chartType: 'GeoChart',
  dataTable: view,
  containerId: 'vis_div'
});
geoChartWrapper.draw();&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Et voilà! We have a map of the world with colors and values assigned to specific countries representing the page views from the countries for the current year.&lt;/p&gt;

&lt;p&gt;Check the &lt;a href="http://savedbythegoog.appspot.com/?id=6505172a4112b08f8e7010965d707f51a008b74c"&gt;live example&lt;/a&gt; and the &lt;a href="http://code.google.com/p/adsense-apis-showcase/source/browse/#git%2FChartToolsWeek%2FWednesday"&gt;source code for today&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Time to play!&lt;/h2&gt;

&lt;p&gt;Eager to try to see what you can do combining these two powerful Google APIs?&lt;/p&gt;
&lt;p&gt;You can start immediately using our &lt;a href="https://code.google.com/apis/explorer/#_s=adsense&amp;_v=v1.1"&gt;Google API Explorer&lt;/a&gt; and our &lt;a href="http://code.google.com/apis/ajax/playground/?type=visualization"&gt;Google Visualization PlayGround&lt;/a&gt;. You can use the Explorer to query our AdSense Management API, and then use the results inside the code on the Visualization PlayGround to generate a chart.&lt;/p&gt;

&lt;p&gt;In the next and final part of this series, we will see how to assemble multiple charts into dashboards and enrich them with interactive controls to manipulate the data they display.&lt;/p&gt;

&lt;p&gt;Meanwhile, feel free to post any questions related to Google Chart Tools in &lt;a href="https://groups.google.com/forum/#!forum/google-visualization-api"&gt;Google Visualization API forum&lt;/a&gt;, or visit our &lt;a href="https://groups.google.com/group/adsense-api"&gt;AdSense Management API forum&lt;/a&gt; to ask general questions.&lt;/p&gt;

&lt;p&gt;&lt;span class="post-author"&gt; &lt;a href="https://plus.google.com/118276561380249048216/about"&gt;&lt;img src="https://lh5.googleusercontent.com/-RMp-hn38AZI/AAAAAAAAAAI/AAAAAAAAADE/59YQber32iU/photo.jpg?sz=20" style="vertical-align: middle; border: none;" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/118276561380249048216/about" rel="author"&gt;Silvano Luciani&lt;/a&gt;, AdSense API Team&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-7973023777959428641?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/XNXDRaqeKRA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/7973023777959428641?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/7973023777959428641?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/XNXDRaqeKRA/adsense-management-api-and-chart-tools_11.html" title="AdSense Management API and Chart Tools week: Wednesday" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-RMp-hn38AZI/AAAAAAAAAAI/AAAAAAAAADE/59YQber32iU/s72-c/photo.jpg?sz=20" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/adsense-management-api-and-chart-tools_11.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8CRHgyfyp7ImA9WhRVEk8.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-8446074812552424565</id><published>2012-01-10T10:41:00.000-08:00</published><updated>2012-01-10T10:41:05.697-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-10T10:41:05.697-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><category scheme="http://www.blogger.com/atom/ns#" term="reporting" /><title>Developer token required in reports starting January 17th</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
As &lt;a href="http://adwordsapi.blogspot.com/2011/11/update2-developer-token-required-in.html"&gt;previously mentioned&lt;/a&gt;, the production environment will start requiring developer tokens with report downloads starting on &lt;b&gt;Tuesday, January 17th&lt;/b&gt;.  Please see the &lt;a href="http://adwordsapi.blogspot.com/2011/11/action-required-developer-token.html"&gt;original blog post&lt;/a&gt; for details regarding how to provide the token and what errors you will see when it is not provided.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://code.google.com/apis/adwords/docs/sandbox.html"&gt;sandbox environment&lt;/a&gt; has required the developer token as an HTTP header since November 16th.  We strongly encourage you to test your production report download code against the sandbox environment to confirm that you will not experience any disruptions in report downloads.  The AdWords API &lt;a href="http://code.google.com/apis/adwords/docs/clientlibraries.html"&gt;client libraries&lt;/a&gt; have also been updated to reflect this change; upgrade to the newest version of your client library to ensure continued reporting.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or would like to discuss these changes, please post on &lt;a href="https://groups.google.com/forum/#!forum/adwords-api"&gt;the forum&lt;/a&gt; or attend one of the &lt;a href="https://www.google.com/calendar/b/0/embed?src=7brqg62i0mbinu226iblpcnmoo@group.calendar.google.com&amp;amp;ctz=America/New_York"&gt;AdWords API Office Hours&lt;/a&gt; Hangouts.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts"&gt;&lt;img height="20" src="https://lh6.googleusercontent.com/-Bm_0uFwE20M/AAAAAAAAAAI/AAAAAAAAALY/hflk83UJtt4/s200-c-k/photo.jpg?sz=20" style="border: none; vertical-align: middle;" width="20" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts" rel="author"&gt;Kevin Winter&lt;/a&gt;, AdWords API Team&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-8446074812552424565?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/-C0j2g5esKg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/8446074812552424565?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/8446074812552424565?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/-C0j2g5esKg/developer-token-required-in-reports.html" title="Developer token required in reports starting January 17th" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/developer-token-required-in-reports.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cNRXs9eCp7ImA9WhRVEUQ.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-3128086293301876165</id><published>2012-01-10T03:31:00.000-08:00</published><updated>2012-01-10T03:31:34.560-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-10T03:31:34.560-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adsense_api" /><category scheme="http://www.blogger.com/atom/ns#" term="chart_tools" /><category scheme="http://www.blogger.com/atom/ns#" term="adsense_management_api" /><title>AdSense Management API and Chart Tools week: Tuesday</title><content type="html">&lt;p&gt;It's &lt;a href="http://googleadsdeveloper.blogspot.com/2012/01/adsense-management-api-and-chart-tools.html"&gt;Chart Tools week&lt;/a&gt; here on the blog, and so we'll be showing you in a 4-part series how to easily generate charts for your AdSense reporting using &lt;a href="http://code.google.com/apis/chart/index.html"&gt;Google Chart Tools&lt;/a&gt;. In today’s second post we’ll examine how to generate another type of chart: a column chart.&lt;/p&gt;
&lt;h2&gt;Column chart&lt;/h2&gt;
&lt;p&gt;The second item required by our CEO is a &lt;a href="http://code.google.com/apis/chart/interactive/docs/gallery/columnchart.html"&gt;column chart&lt;/a&gt;. The column chart will show the number of page views, ad requests, matched ad requests and individual ad impressions for each month of the current year.&lt;/p&gt;

&lt;p&gt;Our request becomes:
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;start date:&lt;/td&gt;&lt;td&gt;2011-01-01&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;end date:&lt;/td&gt;&lt;td&gt;2011-12-31&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;dimensions:&lt;/td&gt;&lt;td&gt;MONTH&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;metrics:&lt;/td&gt;&lt;td&gt;PAGE_VIEWS, AD_REQUESTS, MATCHED_AD_REQUESTS, INDIVIDUAL_AD_IMPRESSIONS&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;filters:&lt;/td&gt;&lt;td&gt;(none)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;p/&gt;

&lt;p&gt;Now the result will be similar to:
&lt;pre class="prettyprint"&gt;
result = {
 "kind": "adsense#report",
 "totalMatchedRows": "9",
 "headers": [ {...{ ],
 "rows": [
   ["2011-01", "28", "46", "41", "165"],
   ...
   ["2011-11", "2", "3", "3", "3"]
 ],
 "totals": ["", "241", "278", "264", "825"],
 "averages": ["", "26", "30", "29", "91"]
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;We create the &lt;code&gt;DataTable&lt;/code&gt; object, adding the columns for our dimensions:
&lt;pre class="prettyprint"&gt;
// Create the data table.
var data = new google.visualization.arrayToDataTable(
    [['Month', 'PAGE_VIEWS', 'AD_REQUESTS', 'MATCHED_AD_REQUESTS',
    'INDIVIDUAL_AD_IMPRESSIONS']].concat(result.rows));
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Once again we use a &lt;code&gt;DataView&lt;/code&gt; to convert the string values to numbers:
&lt;pre class="prettyprint"&gt;
var view = new google.visualization.DataView(data);
view.setColumns([
  0,
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 1))}, type:'number', label:'Page views'},
  ...
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 4))}, type:'number', label:'Individual ad impressions'}
]);&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;And finally, let’s create a wrapper for the column chart and draw it:
&lt;pre class="prettyprint"&gt;
var columnChartWrapper = new google.visualization.ChartWrapper({
  chartType: 'ColumnChart',
  dataTable: view,
  options: {'title': 'Performances - Year 2011'},
  containerId: 'vis_div'
});
columnChartWrapper.draw();&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Another piece is done: a column chart of our performances that is also displaying tips when hovering over bars. Check the &lt;a href="http://savedbythegoog.appspot.com/?id=81f62413dac726f0777ddba1fbe12ceab96528db"&gt;live example&lt;/a&gt; and the &lt;a href="http://code.google.com/p/adsense-apis-showcase/source/browse/#git%2FChartToolsWeek%2FTuesday"&gt;source code for today&lt;/a&gt;!&lt;/p&gt;
&lt;h2&gt;Time to play!&lt;/h2&gt;

&lt;p&gt;Eager to try to see what you can do combining these two powerful Google APIs?&lt;/p&gt;

&lt;p&gt;You can start immediately by using our &lt;a href="https://code.google.com/apis/explorer/#_s=adsense&amp;_v=v1.1"&gt;Google API Explorer&lt;/a&gt; and our &lt;a href="http://code.google.com/apis/ajax/playground/?type=visualization"&gt;Google Visualization PlayGround&lt;/a&gt;. You can use the Explorer to query our Management API, and then use the results inside the code on the Visualization PlayGround to generate a chart.&lt;/p&gt;

&lt;p&gt;Stay tuned for our next post this week, where we’ll show you how to generate other two charts, a table chart and a geo chart.&lt;/p&gt;

&lt;p&gt;If you have any questions related to the AdSense Management API, come to &lt;a href="https://groups.google.com/group/adsense-api"&gt;our forum&lt;/a&gt;; alternatively, visit the &lt;a href="https://groups.google.com/forum/#!forum/google-visualization-api"&gt;Google Visualization API forum&lt;/a&gt; if you're looking for support on Chart Tools.&lt;/p&gt;&lt;br /&gt;

&lt;span class="post-author"&gt; &lt;a href="https://plus.google.com/118276561380249048216/about"&gt;&lt;img src="https://lh5.googleusercontent.com/-RMp-hn38AZI/AAAAAAAAAAI/AAAAAAAAADE/59YQber32iU/photo.jpg?sz=20" style="border: none; vertical-align: middle;" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/118276561380249048216/about" rel="author"&gt;Silvano Luciani&lt;/a&gt;, AdSense API Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-3128086293301876165?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/MH_1xRLDsL8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3128086293301876165?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3128086293301876165?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/MH_1xRLDsL8/adsense-management-api-and-chart-tools_10.html" title="AdSense Management API and Chart Tools week: Tuesday" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-RMp-hn38AZI/AAAAAAAAAAI/AAAAAAAAADE/59YQber32iU/s72-c/photo.jpg?sz=20" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/adsense-management-api-and-chart-tools_10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4GRnw5cSp7ImA9WhRVEU0.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-6202773655918468646</id><published>2012-01-09T02:51:00.000-08:00</published><updated>2012-01-09T03:35:27.229-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-09T03:35:27.229-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adsense_api" /><category scheme="http://www.blogger.com/atom/ns#" term="chart_tools" /><category scheme="http://www.blogger.com/atom/ns#" term="adsense_management_api" /><title>AdSense Management API and Chart Tools week: Monday</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
It’s Monday morning, and you’re sitting in front of your computer, ready for a relaxed start of the week. But wait!&lt;br /&gt;
&lt;br /&gt;
You’ve received an email from your CEO. He wants you to add &lt;a href="http://www.google.com/adsense"&gt;AdSense&lt;/a&gt; reporting to his dashboard, and he wants to see the following:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;a line chart showing the number of ad requests for the current year, broken down by month&lt;/li&gt;
&lt;li&gt;a column chart showing the number of page views, ad requests, matched ad requests and individual ad impressions for the current year, broken down by month&lt;/li&gt;
&lt;li&gt;a table showing the number of ad requests, matched ad requests and individual ad impressions for the current year, broken down by ad client id&lt;/li&gt;
&lt;li&gt;a geo chart showing the number of page views for the current year broken down by country&lt;/li&gt;
&lt;/ul&gt;
He also requires the ability to interact with data: he wants to refine the visualization of the line and column charts filtering by lowest and highest number of ad requests shown in the charts.&lt;br /&gt;
&lt;br /&gt;
It might look like a week of hard work is coming, but don’t worry! It’s Chart Tools week here on the AdSense Management API blog, and we’re going to show you how to easily and rapidly create the dashboard using the &lt;a href="http://code.google.com/apis/adsense/management/"&gt;Google AdSense Management API&lt;/a&gt; and the &lt;a href="http://code.google.com/apis/chart/index.html"&gt;Google Chart Tools&lt;/a&gt;. In the first part of this series, we’ll examine how to generate a line chart.
&lt;br /&gt;
&lt;h2&gt;



Background&lt;/h2&gt;
&lt;br /&gt;
You can access the AdSense Management API from different programming languages using the appropriate &lt;a href="http://code.google.com/apis/discovery/libraries.html"&gt;Google APIs Client&lt;/a&gt;. &lt;a href="http://code.google.com/apis/adsense/management/complete_guide.html"&gt;Check our documentation&lt;/a&gt; for AdSense Management API specific information.&lt;br /&gt;
&lt;br /&gt;
The Google Chart Tools API are accessible using Javascript, check this &lt;a href="http://code.google.com/apis/chart/interactive/docs/quick_start.html"&gt;‘Hello Charts’ example&lt;/a&gt; for a quick start lesson on the API.
&lt;br /&gt;
&lt;h2&gt;



Line chart&lt;/h2&gt;
&lt;br /&gt;
The CEO wants a &lt;a href="http://code.google.com/apis/chart/interactive/docs/gallery/linechart.html"&gt;line chart&lt;/a&gt; showing the number of ad requests for the current year, broken down by month.&lt;br /&gt;
&lt;br /&gt;
We will send a request to the AdSense Management API with the following parameters:
&lt;code&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;start date:&lt;/td&gt;&lt;td&gt;2011-01-01&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;end date:&lt;/td&gt;&lt;td&gt;2011-12-31&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;dimensions:&lt;/td&gt;&lt;td&gt;MONTH&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;metrics:&lt;/td&gt;&lt;td&gt;AD_REQUESTS&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;code&gt;&lt;br /&gt;
&lt;/code&gt;

And the result will be a json array similar to the following:
&lt;pre class="prettyprint"&gt;result = {
  "kind": "adsense#report",
  "totalMatchedRows": "9",
  "headers": [ {...} ],
  "rows": [
    ["2011-01", "46"],
    ...
    ["2011-11", "3"]
  ],
  "totals": ["", "278"],
  "averages": ["", "30"]
}
&lt;/pre&gt;
To use the Chart API we first need to create a &lt;code&gt;DataTable&lt;/code&gt; object representing the result of our request:
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;// Create the data table.
var data = new google.visualization.arrayToDataTable(
    [['Month', 'AD_REQUESTS']].concat(result.rows));
&lt;/pre&gt;
The AdSense Management API is returning the value for &lt;code&gt;AD_REQUESTS&lt;/code&gt; as a string, but we need a numeric value for our charts. To achieve this, we are going to build a &lt;a href="http://code.google.com/apis/chart/interactive/docs/reference.html#DataView"&gt;Data View&lt;/a&gt; on top of our &lt;a href="http://code.google.com/apis/chart/interactive/docs/reference.html#DataTable"&gt;Data Table&lt;/a&gt; and convert the string column to a number column:
&lt;pre class="prettyprint"&gt;var view = new google.visualization.DataView(data);
view.setColumns([
  0,
  {calc:function(dataTable, rowNum) {return parseInt(dataTable.getValue(
      rowNum, 1))}, type:'number', label:'Ad requests'}
]);
&lt;/pre&gt;
Our &lt;code&gt;DataView&lt;/code&gt; will use the first column of the &lt;code&gt;DataTable&lt;/code&gt; as it is, but will generate on the fly a second column composed of numeric values by calling a function of our choice that implements the conversion.&lt;br /&gt;
&lt;br /&gt;
Finally we can draw the chart using a &lt;a href="http://code.google.com/apis/chart/interactive/docs/reference.html#chartwrapperobject"&gt;chart wrapper&lt;/a&gt; and passing our &lt;code&gt;DataView&lt;/code&gt; to the wrapper.
Make sure to define an element with id equal to the &lt;code&gt;containerId&lt;/code&gt; parameter, as this is where the chart will be drawn.
&lt;pre class="prettyprint"&gt;var lineChartWrapper = new google.visualization.ChartWrapper({
  chartType: 'LineChart',
  dataTable: view,
  options: {'title': 'Ad requests trend - Year 2011'},
  containerId: 'vis_div'
});
lineChartWrapper.draw();
&lt;/pre&gt;
The line chart for the CEO is ready, and it’s also displaying tips when hovering over points. Check the &lt;a href="http://savedbythegoog.appspot.com/?id=564c16e5bd49096cfd11ccc3b3e7f2cc16560125"&gt;live example&lt;/a&gt; and the &lt;a href="http://code.google.com/p/adsense-apis-showcase/source/browse/#git%2FChartToolsWeek%2FMonday"&gt;source code for today&lt;/a&gt;!
&lt;br /&gt;
&lt;h2&gt;


Time to play!&lt;/h2&gt;
Eager to try to see what you can do combining these two powerful Google APIs?&lt;br /&gt;
&lt;br /&gt;
You can start immediately by using our &lt;a href="https://code.google.com/apis/explorer/#_s=adsense&amp;amp;_v=v1.1"&gt;Google API Explorer&lt;/a&gt; and our &lt;a href="http://code.google.com/apis/ajax/playground/?type=visualization"&gt;Google Visualization PlayGround&lt;/a&gt;. You can use the Explorer to query our Management API, and then use the results inside the code on the Visualization PlayGround to generate a chart.&lt;br /&gt;
&lt;br /&gt;
In the next post of this series, we’ll look at how to generate a column chart.&lt;br /&gt;
&lt;br /&gt;
Have questions in the meantime?
&lt;ul&gt;
&lt;li&gt;If they’re related to the AdSense Management API, come to &lt;a href="https://groups.google.com/group/adsense-api"&gt;our forum&lt;/a&gt; and ask!&lt;/li&gt;&lt;li&gt;If they’re related to the Google Chart Tools, visit the &lt;a href="https://groups.google.com/forum/#!forum/google-visualization-api"&gt;Google Visualization API forum&lt;/a&gt; and ask!&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/118276561380249048216/about"&gt;&lt;img src="https://lh5.googleusercontent.com/-RMp-hn38AZI/AAAAAAAAAAI/AAAAAAAAADE/59YQber32iU/photo.jpg?sz=20" style="border: none; vertical-align: middle;" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/118276561380249048216/about" rel="author"&gt;Silvano Luciani&lt;/a&gt;, AdSense API Team&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-6202773655918468646?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/LRdpwJtlU4g" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/6202773655918468646?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/6202773655918468646?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/LRdpwJtlU4g/adsense-management-api-and-chart-tools.html" title="AdSense Management API and Chart Tools week: Monday" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-RMp-hn38AZI/AAAAAAAAAAI/AAAAAAAAADE/59YQber32iU/s72-c/photo.jpg?sz=20" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/adsense-management-api-and-chart-tools.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIDQn0yeCp7ImA9WhRWGE0.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-3751508782468606847</id><published>2012-01-05T13:56:00.000-08:00</published><updated>2012-01-05T13:56:13.390-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-05T13:56:13.390-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><category scheme="http://www.blogger.com/atom/ns#" term="adwords_v201109" /><title>55 days until AdWords API deprecation deadline</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;b id="internal-source-marker_0.4074767807032913" style="font-weight: normal;"&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;As &lt;/span&gt;&lt;a href="http://adwordsapi.blogspot.com/2011/10/adwords-api-v201109-launch-providing.html"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;announced&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; in October 2011, with the release of AdWords API v201109, we will be deprecating the following versions and services:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;ul&gt;
&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;AdWords API versions v13, v200909, v201003, v201008, v201101&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;AdWords API version v13 AccountService will only be available on a whitelist basis.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We will be sunsetting these versions and services in 55 days on February 29, 2012. If you have not started migrating to AdWords API v201109, we strongly encourage you to do so, as calls made using previous versions will return errors after February 29th. In particular, we anticipate that migrating from v13 to AdHoc reporting may take some time. Resources to help with this migration are available &lt;/span&gt;&lt;a href="http://code.google.com/apis/adwords/docs/reportguide.html"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. AdHoc documentation is available &lt;/span&gt;&lt;a href="http://code.google.com/apis/adwords/docs/guides/reporting.html#adhoc"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and best practices have been outlined &lt;/span&gt;&lt;a href="http://adwordsapi.blogspot.com/2011/11/discover-v201109-adhoc-reports.html"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;on the blog&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We’ve been running the “Discover v201109” blog series to introduce new services, as well as make the migration process easier for you. Posts include:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;ul&gt;
&lt;li style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;An overview of the &lt;/span&gt;&lt;a href="http://adwordsapi.blogspot.com/2011/11/discovering-v201109-constantdataservice.html"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;new ConstantDataService&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, which can be used with CampaignCriterion &lt;/span&gt;&lt;span style="background-color: white; color: #444444; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;to get more fine-grained control of the targeting of your campaigns&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Information on &lt;/span&gt;&lt;a href="http://adwordsapi.blogspot.com/2011/11/discover-v201109-changes-to-accounts.html"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;changes to account identification criteria&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; (it’s now only client customer ID)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Details on how to target campaigns with &lt;/span&gt;&lt;a href="http://adwordsapi.blogspot.com/2011/11/discovering-v201109-how-to-target.html"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;CampaignCriterionService&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The &lt;/span&gt;&lt;a href="http://googleadsdeveloper.blogspot.com/2011/12/discover-adwords-api-v201109-xml.html"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;introduction of XML validation&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; so you can be alerted to structural issues with your requests&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The &lt;/span&gt;&lt;a href="http://googleadsdeveloper.blogspot.com/2011/11/discover-adwords-v201109.html"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;introduction of CreateAccountService&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; which creates AdWords accounts without login emails &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;To keep up to date with future “Discover v201109” posts, click on the &lt;/span&gt;&lt;a href="http://googleadsdeveloper.blogspot.com/search/label/adwords_v201109"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;adwords_v201109&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; label on the &lt;a href="http://googleadsdeveloper.blogspot.com/"&gt;Google Ads Developer Blog&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;As with every new version of the AdWords API, we encourage you to review the resources in the &lt;/span&gt;&lt;a href="http://code.google.com/apis/adwords/docs/clientlibraries.html"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;AdWords API client libraries&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. If you have any questions please post them on the &lt;/span&gt;&lt;a href="https://groups.google.com/forum/#%21forum/adwords-api"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;AdWords API forum.&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; We will also continue to host &lt;/span&gt;&lt;a href="https://www.google.com/calendar/b/0/embed?src=7brqg62i0mbinu226iblpcnmoo@group.calendar.google.com&amp;amp;ctz=America/New_York"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Google+ Hangouts&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; with members of the AdWords API Developer Relations Team.&lt;/span&gt;&lt;br /&gt;&lt;a href="https://groups.google.com/group/adwords-api"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Finally, we may send out periodic service announcements via email on the deprecation timeline and resources to migrate to v201109. Please be sure that your contact information is up to date in your &lt;/span&gt;&lt;a href="http://www.google.com/intl/en/adwords/myclientcenter/"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;My Client Center account&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Review this &lt;/span&gt;&lt;a href="http://adwordsapi.blogspot.com/2011/03/reminder-about-company-info.html"&gt;&lt;span style="background-color: white; color: #000099; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;blog post&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; for more details.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;b id="internal-source-marker_0.4074767807032913" style="font-weight: normal;"&gt;&lt;span style="background-color: white; color: #333333; font-family: Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span class="post-author"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span class="post-author"&gt;Katie Miller, AdWords API Team&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-3751508782468606847?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/rN9aF7dACxU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3751508782468606847?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3751508782468606847?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/rN9aF7dACxU/55-days-until-adwords-api-deprecation.html" title="55 days until AdWords API deprecation deadline" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/55-days-until-adwords-api-deprecation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8GQ3k6eSp7ImA9WhRUEEw.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-4164295492119141470</id><published>2012-01-05T11:56:00.000-08:00</published><updated>2012-01-19T14:40:22.711-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-19T14:40:22.711-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adsense_api" /><category scheme="http://www.blogger.com/atom/ns#" term="admob_sdk" /><category scheme="http://www.blogger.com/atom/ns#" term="dfp_api" /><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><category scheme="http://www.blogger.com/atom/ns#" term="hangout" /><title>More Office Hours in 2012</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Last year we hosted our first office hours for the Google Ads Developer products using Google+ hangouts, and the feedback was overwhelmingly positive. We plan to host more of them in 2012, and sessions for January and February have already been scheduled.  Our upcoming hangouts are listed on the &lt;a href="https://developers.google.com/events/"&gt;Google Developers events page&lt;/a&gt;, and we encourage you to click the "I'll be there" button if you plan on attending.  You can also follow our schedule by subscribing to the &lt;a href="https://www.google.com/calendar/b/0/embed?showNav=0&amp;amp;showDate=0&amp;amp;showPrint=0&amp;amp;showTabs=0&amp;amp;showCalendars=0&amp;amp;mode=AGENDA&amp;amp;height=300&amp;amp;wkst=1&amp;amp;bgcolor=%23FFFFFF&amp;amp;src=7brqg62i0mbinu226iblpcnmoo%40group.calendar.google.com&amp;amp;color=%232F6309&amp;amp;ctz=Etc%2FGMT"&gt;Google Ads Developer Office Hours calendar&lt;/a&gt; or by glancing at the sidebar to the right of this blog entry.&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-UTyRffWHVT8/TwX_iNxfpFI/AAAAAAAAAGE/o7FJnnjKS4c/s1600/hangout.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://3.bp.blogspot.com/-UTyRffWHVT8/TwX_iNxfpFI/AAAAAAAAAGE/o7FJnnjKS4c/s320/hangout.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
In case you haven’t joined us before, you will need 3 things to join the hangout:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;A Google+ account (&lt;a href="https://plus.google.com/"&gt;sign up here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://www.google.com/tools/dlpage/res/talkvideo/hangouts/"&gt;Google voice and video plugin&lt;/a&gt; installed on your computer&lt;/li&gt;
&lt;li&gt;A quiet place to hangout so we can hear you&lt;/li&gt;
&lt;/ul&gt;
These hangouts are informal and conversational, which make them a great place to ask questions or give us feedback.  If you have questions about our office hours program, reach out to us on the forums.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt;&amp;nbsp;DFP January Office hours have been moved to January 31st.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/u/0/103231502413952116096"&gt;&lt;img height="20" src="https://lh4.googleusercontent.com/-qbaZRXjidts/AAAAAAAAAAI/AAAAAAAAABo/HfCK2T4S-14/s200-c-k/photo.jpg?sz=20" style="border: none; vertical-align: middle;" width="20" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/u/0/103231502413952116096" rel="author"&gt;Eric Koleda&lt;/a&gt;, Google Ads Developer Team&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-4164295492119141470?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/hLn4hG21itk" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/4164295492119141470?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/4164295492119141470?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/hLn4hG21itk/more-office-hours-in-2012.html" title="More Office Hours in 2012" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-UTyRffWHVT8/TwX_iNxfpFI/AAAAAAAAAGE/o7FJnnjKS4c/s72-c/hangout.png" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/more-office-hours-in-2012.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEADQ384cSp7ImA9WhRWF0Q.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-5679557935366665625</id><published>2012-01-05T11:46:00.000-08:00</published><updated>2012-01-05T11:46:12.139-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-05T11:46:12.139-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="app_engine" /><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><category scheme="http://www.blogger.com/atom/ns#" term="reporting" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><title>Updates to AdWords API on Python Google App Engine</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
The AdWords API Python Google App Engine demo has been updated to use &lt;a href="http://code.google.com/apis/adwords/docs/reference/#v201109"&gt;v201109&lt;/a&gt; (and &lt;a href="http://code.google.com/apis/adwords/docs/headers.html#clientCustomerId"&gt;clientCustomerId&lt;/a&gt;) and now has its source control hosted at the new &lt;a href="http://code.google.com/p/google-api-ads-python/source/browse/#svn%2Fapps%2Fadwords%2Freporting_appengine_demo"&gt;project site&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
In addition, we are happy to announce the release of a new &lt;a href="http://code.google.com/p/google-api-ads-python/downloads/detail?name=adwords_api_reporting_gae_demo_1.0.0.tar.gz"&gt;Python Google App Engine demo&lt;/a&gt; - this one demonstrating &lt;a href="http://code.google.com/apis/adwords/docs/guides/reporting.html#adhoc"&gt;AdHoc reports&lt;/a&gt; running on Google App Engine using OAuth 1.0a for the authentication.  This demo allows you to select as many or as few child accounts as you wish to run a report against and will download the reports asynchronously using a &lt;a href="http://code.google.com/appengine/docs/python/taskqueue/"&gt;Task Queue&lt;/a&gt; one by one.  Reports are stored in the Google App Engine &lt;a href="http://code.google.com/appengine/docs/python/blobstore/"&gt;Blobstore&lt;/a&gt; and can be downloaded by the user once they have been processed.&lt;br /&gt;
&lt;br /&gt;
The new demo also shows how to perform the &lt;a href="http://code.google.com/apis/accounts/docs/OAuth.html#WorkingOauth"&gt;OAuth flow&lt;/a&gt; in a web application context and how to store the oauth_token and oauth_token_secret in the Google App Engine datastore.  OAuth is used both to query the API for a list of accounts as well as to download the reports.&lt;br /&gt;
&lt;br /&gt;
You can download the Google App Engine demo and use the &lt;a href="http://code.google.com/appengine/docs/python/tools/devserver.html"&gt;Python Development Google App Engine Server&lt;/a&gt; to play around with the code without the need for an existing Google App Engine account.  If you have any questions or would like to discuss this new demo, please post on &lt;a href="https://groups.google.com/forum/#!forum/adwords-api"&gt;the forum&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts"&gt;&lt;img height="20" src="https://lh6.googleusercontent.com/-Bm_0uFwE20M/AAAAAAAAAAI/AAAAAAAAALY/hflk83UJtt4/s200-c-k/photo.jpg?sz=20" style="border: none; vertical-align: middle;" width="20" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/u/0/110892224480992063622/posts" rel="author"&gt;Kevin Winter&lt;/a&gt;, AdWords API Team&lt;/span&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-5679557935366665625?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/fYxOpXpoNkc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/5679557935366665625?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/5679557935366665625?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/fYxOpXpoNkc/updates-to-adwords-api-on-python-google.html" title="Updates to AdWords API on Python Google App Engine" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2012/01/updates-to-adwords-api-on-python-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMDRHs5cSp7ImA9WhRWEEo.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-809553900445557328</id><published>2011-12-28T09:00:00.000-08:00</published><updated>2011-12-28T03:57:55.529-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-28T03:57:55.529-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adsense_api" /><category scheme="http://www.blogger.com/atom/ns#" term="interview" /><title>Meet an AdSense API Engineer: Nick Johnson</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-IeaZjB683Jc/Tvr1b9CpBAI/AAAAAAAAAFs/yR58CWUIuGQ/s1600/picture1b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-IeaZjB683Jc/Tvr1b9CpBAI/AAAAAAAAAFs/yR58CWUIuGQ/s320/picture1b.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
A few weeks ago, we caught up with &lt;a href="http://googleadsdeveloper.blogspot.com/2011/12/meet-adsense-api-engineer-ben-birt.html"&gt;Ben Birt&lt;/a&gt; from our AdSense API Engineering team in London. Today, we'd like to introduce you to another member of the team -- Nick Johnson, a Software Engineer who joined Google in May 2011.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;What’s your main contribution to API development?&lt;/b&gt;&lt;br /&gt;
I could tell you... but then I would have to use one of those flashy things from Men in Black on you. (We have those at Google). Then I’d probably have to use it on me. I’m essentially a general purpose code monkey at this point in time, but I have some very cool stuff coming into the pipeline soon.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Describe your average day at work&lt;/b&gt;&lt;br /&gt;
My average day starts with me grabbing a coffee and some cereal from the kitchen. Aside from our (seated) stand up team meeting, everything else changes on a daily basis. So long as I get to do some coding, I’m generally happy.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;What do you like most about the &lt;a href="http://code.google.com/apis/adsense/management/"&gt;AdSense Management API&lt;/a&gt;?&lt;/b&gt;&lt;br /&gt;
I think the Ad Clients list call is my favourite. It’s less typing, so that makes it pretty ideal for making test calls. In all seriousness though, I think the thing I like best is the potential. The ways in which you can use and combine your data are entirely in your hands now.&lt;br /&gt;
&lt;br /&gt;
We have some pretty cool surprises coming from inside Google (but when is that not true?), but we also can’t wait to see what third party developers create.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Tell us one best practice about the API&lt;/b&gt;&lt;br /&gt;
Think about what you have, and what you need. Be smart with your calls and make the most of them. Try to multiplex and retrieve as much of the data you need in the least number of calls. You need to balance this with the responsiveness of your app though. Quite obviously more data will take more time.&lt;br /&gt;
&lt;br /&gt;
Another important thing is that if you have any problems or feature suggestions, then by all means, please...&lt;br /&gt;
...&lt;a href="https://groups.google.com/group/adsense-api"&gt;tell Silvano and Sérgio&lt;/a&gt; :) (members of the AdSense API Developer Relations team)

&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-M8xdXmq31hs/Tvr280vM--I/AAAAAAAAAF4/jisiem2Ppkw/s1600/picture2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-M8xdXmq31hs/Tvr280vM--I/AAAAAAAAAF4/jisiem2Ppkw/s320/picture2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;Enough work stuff, let’s go personal.
We’ve heard that you lived in Scotland for some years. Is it true that they deep fry everything up there?&lt;/b&gt;&lt;br /&gt;
I think we both know that science has proven any foodstuff can be improved by submerging it in a large quantity of hot fat. It’s like adding “in space” to the end of a plot description. I did live in the beautiful city of &lt;a href="http://en.wikipedia.org/wiki/Edinburgh"&gt;Edinburgh&lt;/a&gt; (s’up to my homies on the Morningsi-ide) for ten extremely pleasant years, before I moved down to the big smoke for a job with the big G.&lt;br /&gt;
&lt;br /&gt;
No, it’s not true that the Scottish deep fry everything. It would be far more accurate to say they will deep fry anything. Don’t knock it until you’ve tried it though. Deep fried Mars bars are &lt;a href="http://www.youtube.com/watch?v=Tvt-CYmBPI8"&gt;very real&lt;/a&gt;, but I’m afraid I never tried them. I was worried I might like them.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Ok, let me ask you some geeky questions now. I’ve heard that you like functional programming...&lt;/b&gt;&lt;br /&gt;
Truly, your wit is sharp as a pillow.&lt;br /&gt;
&lt;br /&gt;
Functional programming is something I’m slowly getting my head around, but the biggest barrier (for me, at least) is the attitude of the functional programming evangelists. It’s like talking to someone who thinks Emacs is better than Vim.&lt;br /&gt;
&lt;br /&gt;
I mean, come on.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Since it’s obligatory in these sorts of interviews, why don’t you throw some film and book recommendations our way?&lt;/b&gt;&lt;br /&gt;
I’m at least as big a film nerd as I am a computer nerd (and I do the latter for a living!), so I could literally talk to you all day about that. If I’m completely honest, the film I saw in 2011 which I enjoyed the most was almost certainly Fast [and Furious] 5, but I’m not sure I’d go so far as to say it’s the best film I saw this year. I will always love The Matrix, Fight Club, Pitch Black and Amélie, and right now I’m really quite excited about Joss Whedon(!)’s The Avengers.&lt;br /&gt;
&lt;br /&gt;
If I had to recommend one book it would probably be either The Hitchhiker’s Guide to the Galaxy, or Neal Stephenson’s Cryptonomicon (though that is really not a light read, in any sense of the word). Recently I read, and loved, “The Alloy of Law”, Brandon Sanderson’s follow up to his brilliant Mistborn trilogy, so I think I’ll also have to recommend those books.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Will you fix my computer?&lt;/b&gt;&lt;br /&gt;
No.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Fine. Will you code my favorite API?&lt;/b&gt;&lt;br /&gt;
I’m on it.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;span class="post-author"&gt; &lt;a href="https://plus.google.com/118276561380249048216/about"&gt;&lt;img src="https://lh5.googleusercontent.com/-RMp-hn38AZI/AAAAAAAAAAI/AAAAAAAAADE/59YQber32iU/photo.jpg?sz=20" style="vertical-align: middle; border: none;" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/118276561380249048216/about" rel="author"&gt;Silvano Luciani&lt;/a&gt;, AdSense API Team&lt;/span&gt;
&lt;br /&gt;

&lt;span class="post-author"&gt; &lt;a href="https://plus.google.com/103951349449629293779/about"&gt;&lt;img src="https://lh5.googleusercontent.com/-IF04-WU5f0s/AAAAAAAAAAI/AAAAAAAAAD0/p7rs13Nv1VE/photo.jpg?sz=20" style="vertical-align: middle; border: none;" /&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/103951349449629293779/about" &gt;Nick Johnson&lt;/a&gt;, AdSense API Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-809553900445557328?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/CWMRxARrqQg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/809553900445557328?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/809553900445557328?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/CWMRxARrqQg/meet-adsense-api-engineer-nick-johnson.html" title="Meet an AdSense API Engineer: Nick Johnson" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-IeaZjB683Jc/Tvr1b9CpBAI/AAAAAAAAAFs/yR58CWUIuGQ/s72-c/picture1b.jpg" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2011/12/meet-adsense-api-engineer-nick-johnson.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIGSXoyfSp7ImA9WhRWEE0.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-3750809328016180875</id><published>2011-12-28T08:15:00.000-08:00</published><updated>2011-12-27T08:15:28.495-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-27T08:15:28.495-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="adwhirl" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="admob_sdk" /><title>AdMob and AdWhirl Refresh Rates - A Subtle but Important Difference</title><content type="html">&lt;p&gt;The &lt;a href="http://code.google.com/p/adwhirl/"&gt;AdWhirl SDK&lt;/a&gt; provides a framework that allows developers to display banner ads from different ad networks in their iOS and Android applications.  You simply tell AdWhirl what ad networks you want to use and the percentage of requests to allocate to each network, and AdWhirl handles the ad requests.  But how do you choose an acceptable refresh rate, and what settings should you use for both AdWhirl and your individual ad networks?&lt;/p&gt;

&lt;p&gt;AdWhirl has its own refresh rate; when it comes time to refresh, AdWhirl removes the current network’s ad view, chooses a new ad network, and creates a new ad view for that network.  So how is this different from the AdMob refresh rate?  Well, the AdMob refresh rate determines when its own ad view will request a new ad.&lt;/p&gt;

&lt;p&gt;AdWhirl does not know about the specific ad networks’ refresh rates.  Most networks expose the refresh rate on the client side; AdWhirl takes advantage of this by turning off refreshing for these networks.  AdMob, however, only supports configuring the refresh rate on the server side.  Therefore, AdWhirl must rely on you, the developer, to turn off the network refresh rate.  Forgetting to do so may result in unexpected refreshes.  This is best demonstrated with an example.&lt;/p&gt;

&lt;p&gt;Let’s say AdWhirl has selected the AdMob network for displaying an ad, and your AdMob refresh rate is 29 seconds while your AdWhirl refresh rate is 30 seconds.  AdWhirl will load up an AdMob view, and then the AdMob view will request and show an ad.  After 29 seconds, AdMob decides it's time to refresh, grabs a new ad on it's own, and displays a new ad.  AdWhirl has no idea that AdMob just refreshed.  One second later, AdWhirl decides it’s time to refresh (30 seconds have passed), and removes the AdMob view and picks a new ad network from which to show an ad.&lt;/p&gt;

&lt;p&gt;In the above example, AdMob displayed a new ad that was shown for only one second--it had virtually no chance of being clicked.  This results in extra impressions that reduce your click through rate and confuse your customers.  To avoid having AdMob refresh on its own, make sure to turn off automatic refreshing for the AdMob publisher ID you are mediating with!&lt;/p&gt;

&lt;p&gt;Please post to the &lt;a href="https://groups.google.com/forum/#!forum/adwhirl-users"&gt;forum&lt;/a&gt; for any questions regarding refresh rates.  You’re also welcome to attend one of our &lt;a href="http://googleadsdeveloper.blogspot.com/search/label/admob_sdk"&gt;office hours&lt;/a&gt; hangouts.&lt;/p&gt;

&lt;p&gt;&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/112870803958713211515/"&gt;&lt;img width="20" height="20" src="https://lh4.googleusercontent.com/-VjOdMVF5_qc/AAAAAAAAAAI/AAAAAAAAAB8/aYikCy7pZmw/photo.jpg?sz=20" style="vertical-align:middle; border:none;"&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/112870803958713211515/" rel="author"&gt;Eric Leichtenschlag&lt;/a&gt;, AdMob Team&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-3750809328016180875?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/edVtofpK-HI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3750809328016180875?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3750809328016180875?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/edVtofpK-HI/admob-and-adwhirl-refresh-rates-subtle.html" title="AdMob and AdWhirl Refresh Rates - A Subtle but Important Difference" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/-VjOdMVF5_qc/AAAAAAAAAAI/AAAAAAAAAB8/aYikCy7pZmw/s72-c/photo.jpg?sz=20" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2011/12/admob-and-adwhirl-refresh-rates-subtle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8EQnwyeyp7ImA9WhRXFUU.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-3934115252016169996</id><published>2011-12-22T12:07:00.000-08:00</published><updated>2011-12-22T13:20:03.293-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-22T13:20:03.293-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="admob_sdk" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><title>Incorporating Google AdMob ads into a Table View in iOS</title><content type="html">&lt;p&gt;Perfecting the look of your application is challenging, and incorporating ads into your application requires careful thinking. When using the AdMob SDK with &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html"&gt;Table Views&lt;/a&gt; in iOS, a typical challenge is that ads do not stay docked properly to a certain position on the screen. This blog post outlines a simple solution to this common problem.&lt;/p&gt;

&lt;br/&gt;
&lt;b&gt;Challenge&lt;/b&gt;

&lt;p&gt;Consider a simple application in which a &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableViewController_Class/Reference/Reference.html "&gt;UITableViewController&lt;/a&gt; is used to handle a list mechanism. If this is the main top level view in the application, getting the ad to remain docked to the bottom or top of the view while the content scrolls is problematic. This is usually because the ad has been placed inside the &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html "&gt;Table View&lt;/a&gt;.&lt;/p&gt;

&lt;br/&gt;
&lt;center&gt;
&lt;a href="http://2.bp.blogspot.com/-7HPnl9Tp_CI/TvONU8892AI/AAAAAAAAAFg/cDSZpqRgy3E/s1600/Screen%2Bshot%2B2011-12-22%2Bat%2B12.03.43%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="191" width="320" src="http://2.bp.blogspot.com/-7HPnl9Tp_CI/TvONU8892AI/AAAAAAAAAFg/cDSZpqRgy3E/s320/Screen%2Bshot%2B2011-12-22%2Bat%2B12.03.43%2BPM.png" /&gt;&lt;/a&gt;&lt;/center&gt;



&lt;br/&gt;
&lt;b&gt;Solution&lt;/b&gt;

&lt;p&gt;One way to dock the ad is to encompass the &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html "&gt;Table View&lt;/a&gt; into a container view (e.g.  a &lt;a href="http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html "&gt;UIView&lt;/a&gt;). This way, instead of inserting the ad into the &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html "&gt;Table View&lt;/a&gt; as a subview, it’s inserted into the encompassing container view (as a sibling of the &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html "&gt;Table View&lt;/a&gt;). Here is an example of the code snippet in the header file:&lt;/p&gt;

&lt;pre class="prettyprint"&gt;
@interface AdsOutOfTableView : UIViewController&lt;GADBannerViewDelegate&gt;  {
@private
 UITableView *tableView_;
 //Other private variables here
}

@property(nonatomic,retain) IBOutlet UITableView *tableView;
@end
&lt;/pre&gt;

&lt;p&gt;As shown in this &lt;a href="http://code.google.com/mobile/ads/docs/ios/fundamentals.html#addbannerview "&gt;example&lt;/a&gt;, the GADBannerView is initialized with a frame that has an origin at the bottom of the screen.&lt;/p&gt;

&lt;p&gt;Now when the ad is received, it should be added into the container view, and the size of the &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html"&gt;Table View&lt;/a&gt; should be modified accordingly. The height of the &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html"&gt;Table View&lt;/a&gt;'s frame cannot be modified directly, but this can be done using an intermediate frame as shown below.&lt;/p&gt;

&lt;pre class="prettyprint"&gt;
-(void)resizeTable
{
 CGRect tableFrame = tableView_.frame;
 tableFrame.size.height = tableFrame.size.height -
       bannerView_.frame.size.height;

 tableView_.frame = tableFrame;
}
&lt;/pre&gt;

&lt;p&gt;Now, no matter how much the &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html "&gt;Table View&lt;/a&gt; is scrolled, the &lt;a href="http://code.google.com/mobile/ads/docs/ios/fundamentals.html#addbannerview "&gt;GADBannerView&lt;/a&gt; stays docked to the bottom of the screen.&lt;/p&gt;

&lt;p&gt;Alternatively, keeping the ad docked to the top of the &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html "&gt;Table View&lt;/a&gt; is very similar to the situation shown above. The only difference is that the &lt;a href="http://code.google.com/mobile/ads/docs/ios/fundamentals.html#addbannerview"&gt;GADBannerView&lt;/a&gt; must be created and drawn at the top of the screen. The resizeTable: method now also has to to shift itself down by the height of the ad:&lt;/p&gt;

&lt;pre class="prettyprint"&gt;
 CGRect tableFrame = tableView_.frame;

 tableFrame.size.height = tableFrame.size.height -
         bannerView_.frame.size.height;
 tableFrame.origin.y = bannerView_.frame.size.height;
 tableView_.frame = tableFrame;
&lt;/pre&gt;

&lt;p&gt;With those minor tweaks, you will have ads set up correctly alongside your &lt;a href="http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html"&gt;Table View&lt;/a&gt;! If you have any questions about this or any other SDK topics, feel free to post them in our &lt;a href="https://groups.google.com/forum/#!forum/google-admob-ads-sdk"&gt;forum&lt;/a&gt;. &lt;/p&gt;
&lt;br/&gt;

&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/102708799507737837368"&gt;&lt;img width="20" height="20" src="https://lh3.googleusercontent.com/-RonljIAjNbg/AAAAAAAAAAI/AAAAAAAAAps/nM93tw3iYSk/s200-c-k/photo.jpg?sz=20" style="vertical-align:middle; border:none;"&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/102708799507737837368" rel="author"&gt;Raj Parameswaran&lt;/a&gt;, AdMob Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-3934115252016169996?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/QUzO2BPhXp0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3934115252016169996?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/3934115252016169996?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/QUzO2BPhXp0/incorporating-google-admob-ads-into.html" title="Incorporating Google AdMob ads into a Table View in iOS" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-7HPnl9Tp_CI/TvONU8892AI/AAAAAAAAAFg/cDSZpqRgy3E/s72-c/Screen%2Bshot%2B2011-12-22%2Bat%2B12.03.43%2BPM.png" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2011/12/incorporating-google-admob-ads-into.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QERX4zeCp7ImA9WhRXFUo.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-1294202733461947118</id><published>2011-12-22T10:41:00.000-08:00</published><updated>2011-12-22T10:41:44.080-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-22T10:41:44.080-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="app_engine" /><category scheme="http://www.blogger.com/atom/ns#" term="dfp_appengine" /><category scheme="http://www.blogger.com/atom/ns#" term="dfp_api" /><title>Google App Engine for Java meet DFP API, Part 1: Hello World</title><content type="html">&lt;p&gt;We are excited to start discussing how to use the &lt;a href="http://code.google.com/apis/dfp/"&gt;DFP API&lt;/a&gt; from within the &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt; (Java) environment. This first blog post in the series focuses on setting up your environment and understanding how to use the API from App Engine. Future posts in this series will build upon the same project to create a sample application. Ultimately, you will be able to make DFP information more accessible within your organization, while also leveraging the ease of scale and deployability that comes with creating applications on Google App Engine.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Setting up your environment&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;For simplicity sake we will focus on utilizing Eclipse and the Google App Engine Plugin available for Eclipse. Information about setting them up can be found &lt;a href="http://code.google.com/appengine/docs/java/tools/eclipse.html"&gt;here&lt;/a&gt;. If you prefer a different environment setup, you can always view the &lt;a href="http://code.google.com/appengine/docs/java/gettingstarted/"&gt;Getting Started Guide for App Engine&lt;/a&gt; for more information.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Create an App Engine project&lt;/b&gt;&lt;br /&gt;&lt;br/&gt;You’ll need a place to do your coding so create an App Engine project in a similar manner to the screenshots below.&lt;/p&gt;
&lt;br&gt;
&lt;a href="https://lh5.googleusercontent.com/7QOduFQYuZMbWv8dUFsygi6mHQciCDfQvXOrC4FdrE90LGnWvIXTxtAL7EJPNfDSjv8h54-9qvJurrxx1mJ8fvFRzYS2KbQRLEtDd-lD4PNR9pHQsB8"&gt;&lt;img width="250" src="https://lh5.googleusercontent.com/7QOduFQYuZMbWv8dUFsygi6mHQciCDfQvXOrC4FdrE90LGnWvIXTxtAL7EJPNfDSjv8h54-9qvJurrxx1mJ8fvFRzYS2KbQRLEtDd-lD4PNR9pHQsB8" /&gt;&lt;/a&gt;&lt;a href="https://lh6.googleusercontent.com/Lso2PT0dpPham3cSGiYc9BVK6vO6UassXzazokh6zF1WLs8x9QL1uOWbIVDYRHJijmljVpGvRKQbUFuec5qcuVfhJyvIi_3dCtnpX-5YEaJyTAmE0gQ"&gt;&lt;img width="250" src="https://lh6.googleusercontent.com/Lso2PT0dpPham3cSGiYc9BVK6vO6UassXzazokh6zF1WLs8x9QL1uOWbIVDYRHJijmljVpGvRKQbUFuec5qcuVfhJyvIi_3dCtnpX-5YEaJyTAmE0gQ" /&gt;&lt;/a&gt;

&lt;p&gt;Note: If you would like to download all of the source code in this blog post to follow along you can do so as a &lt;a href="http://code.google.com/p/google-api-dfp-java/downloads/detail?name=dfp-appenginesample.tar.gz&amp;amp;can=2&amp;amp;q="&gt;tarball&lt;/a&gt; or you can browse the code base from our &lt;a href="http://code.google.com/p/google-api-dfp-java/source/browse/#svn%2Fapps%2Fdfponappengine"&gt;svn repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Dependencies&lt;/b&gt;&lt;br /&gt;&lt;br/&gt;The App Engine Java environment requires JAX-WS when dealing with SOAP interfaces like DFP API so you won’t be able to use the normal Java &lt;a href="http://code.google.com/p/google-api-dfp-java/"&gt;client library&lt;/a&gt;. You’ll need to download &lt;a href="http://code.google.com/p/google-api-dfp-java/source/browse/apps/dfponappengine/src/com/google/api/ads/dfp/samples/appengine/ClientLoginAuth.java"&gt;this client login auth file&lt;/a&gt; to help with authentication. Place this file in your project’s src directory. Next, you’ll need a &lt;a href="http://code.google.com/p/google-api-dfp-java/source/browse/apps/dfponappengine/war/WEB-INF/lib/dfp-api-jax-ws-20111220.jar"&gt;jar&lt;/a&gt; and a &lt;a href="http://code.google.com/p/google-api-dfp-java/source/browse/apps/dfponappengine/war/WEB-INF/CombinedWsdl.wsdl"&gt;wsdl&lt;/a&gt; file that we’ve compiled with JAX-WS; place them in the WEB-INF/lib and WEB-INF directory, respectively. See the files highlighted in their respective locations below.&lt;/p&gt;
&lt;br&gt;
&lt;a href="https://lh4.googleusercontent.com/Wu8AAUApedNt367zp5LSQU-wTNnOPNRhwGEcfrLvA1nRglQW21aUMwL3T-Y6CuA-G2dQ2nRc2ZCMJ7N_TjVV2nDXNyVnP4DjW1uZ2j7vs4CI9g83kKE"&gt;&lt;img width="500" src="https://lh4.googleusercontent.com/Wu8AAUApedNt367zp5LSQU-wTNnOPNRhwGEcfrLvA1nRglQW21aUMwL3T-Y6CuA-G2dQ2nRc2ZCMJ7N_TjVV2nDXNyVnP4DjW1uZ2j7vs4CI9g83kKE" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;b&gt;Write some code&lt;/b&gt;&lt;br /&gt;&lt;br/&gt;Now that you’re set up, it’s time to write some code that uses the DFP API. This first snippet of code performs some setup for your App Engine Servlet.&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
  /**
   * Perform initialization of servlet and cached resources used to
   * access DFP API.
   */
  @Override
  public void init(ServletConfig config) throws ServletException {
    super.init(config);

    // Generate an authToken.
    try {
      authToken = regenerateAuthToken();
    } catch (Exception exception) {
      throw new ServletException("Could not generate an Auth Token.",
          exception);
    }
  }

  /**
   * Regenerate the client login auth token that the servlet uses.
   * 
   * @throws Exception
   */
  public synchronized String regenerateAuthToken() throws Exception {
    ClientLoginAuth clientLoginAuth = new ClientLoginAuth(EMAIL_ADDRESS, 
        EMAIL_ADDRESS_PASSWORD);
    return clientLoginAuth.getAuthToken();
  }
&lt;/pre&gt;
&lt;p&gt;This next snippet of code handles the actual web browser requests.&lt;/p&gt;
&lt;pre class="prettyprint"&gt;
  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException {
    try {
      // Retrieve an object handle to our network service.
      NetworkService networkService = new NetworkService();
      NetworkServiceInterface networkServiceInterface =
          networkService.getNetworkServiceInterfacePort();

      // Prepare header object to make server call
      SoapRequestHeader requestHeader = new SoapRequestHeader();
      requestHeader.setApplicationName("Hello World");
      ClientLogin clientLogin = new ClientLogin();
      clientLogin.setToken(authToken);
      requestHeader.setAuthentication(clientLogin);

      // Make protected call to the server.
      String rootAdUnitId = "";
      Network currentNetwork = networkServiceInterface.getCurrentNetwork(
          requestHeader, null);
      // Extract data from object returned from server.
      rootAdUnitId = currentNetwork.getEffectiveRootAdUnitId();

      resp.setContentType("text/plain");
      resp.getWriter().println("Hello, world. Your root ad unit id is: "
          + rootAdUnitId);
    } catch (Exception e) {
      // Perform exception handling.
      e.printStackTrace();
      throw new ServletException("Error occurred. Check logs for specific "
          " details about the error.");
    }
  }
&lt;/pre&gt;
&lt;p&gt;This particular code snippet retrieves the root ad unit for our network whenever someone accesses the application. You can view the full sample servlet code &lt;a href="http://code.google.com/p/google-api-dfp-java/source/browse/apps/dfponappengine/src/com/google/api/ads/dfp/samples/appengine/DfpAppEngineServlet.java"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Testing&lt;/b&gt;&lt;br /&gt;&lt;br/&gt;To make sure your code works, let’s deploy the project locally. Right-click on your project and then choose “Run” and select the “Web Application” option from the submenu. This will deploy your code to a locally running App Engine server. The console will display the URL to access the application (usually &lt;a href="http://localhost:8888/"&gt;http://localhost:8888/&lt;/a&gt;). Clicking on this link and then the subsequent servlet link should return a page similar to this.&lt;/p&gt;
&lt;br&gt;
&lt;a href="https://lh6.googleusercontent.com/xLkcrweB0ZC-PlfKrgNPBHQHCF2hg-XDtAYJuHLlyy1YrHFHiAkCeEsubIum3fBRvMISNl-4Uq3AhkEJiNeGvfc7IeIF4-Y0igY8Afo2EB6sSvMUHXY"&gt;&lt;img width="500" src="https://lh6.googleusercontent.com/xLkcrweB0ZC-PlfKrgNPBHQHCF2hg-XDtAYJuHLlyy1YrHFHiAkCeEsubIum3fBRvMISNl-4Uq3AhkEJiNeGvfc7IeIF4-Y0igY8Afo2EB6sSvMUHXY" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://lh3.googleusercontent.com/qMMOCzICbIUipTiiUWjXPo_qnZ2EoBbzBdd4-2EFm72dPflhSntqoDMrJFMCNVDUZ9n5_6qOCHrWreL-qg7p1GXdjUWbWtfQprjBFZB9_rCfxQ3Q5kI"&gt;&lt;img width="500" src="https://lh3.googleusercontent.com/qMMOCzICbIUipTiiUWjXPo_qnZ2EoBbzBdd4-2EFm72dPflhSntqoDMrJFMCNVDUZ9n5_6qOCHrWreL-qg7p1GXdjUWbWtfQprjBFZB9_rCfxQ3Q5kI" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;b&gt;Next Time&lt;/b&gt;&lt;br /&gt;&lt;br/&gt;Next time, we’ll extend the project to do some background processing and start using some other services from the DFP API.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Troubleshooting&lt;/b&gt;&lt;br /&gt;&lt;br/&gt;We really hope you didn’t have an issue, but if you did there is a troubleshooting README file included in the &lt;a href="http://code.google.com/p/google-api-dfp-java/source/browse/apps/dfponappengine/README"&gt;sample code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/apis/dfp/forum/discussions.html"&gt;Let us know&lt;/a&gt; if you have any questions, and happy holidays!&lt;/p&gt;

&lt;br /&gt;

&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/104679465567407024302/"&gt;&lt;img width="20" height="20" src="https://lh5.googleusercontent.com/oQZTvGY1RNICm4p-kpeNseyIOgEfFdRDfMNyaMs0hrBVvzjZQODeEnRRPbHA0SoebObwNhQnL7bEDImdE16tYXjwViv-90GTbywThxtii7XS7MO3RzE?sz=20" style="vertical-align:middle; border:none;"&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/104679465567407024302/" rel="author"&gt;Paul Rashidi&lt;/a&gt;, DFP API Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-1294202733461947118?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/ZIyK0P7enjQ" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/1294202733461947118?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/1294202733461947118?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/ZIyK0P7enjQ/google-app-engine-for-java-meet-dfp-api.html" title="Google App Engine for Java meet DFP API, Part 1: Hello World" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2011/12/google-app-engine-for-java-meet-dfp-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIDSH07fSp7ImA9WhRXFEQ.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-6197712991551892135</id><published>2011-12-20T18:40:00.000-08:00</published><updated>2011-12-21T11:09:39.305-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-21T11:09:39.305-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="dfa_api" /><category scheme="http://www.blogger.com/atom/ns#" term="admob_sdk" /><category scheme="http://www.blogger.com/atom/ns#" term="dfp_api" /><category scheme="http://www.blogger.com/atom/ns#" term="adwords_api" /><title>A look back at mobile in 2011</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;i&gt;Editor’s note: As many of you are planning your 2012 advertisement strategy, we’d like to share with you this &lt;a href="http://googlemobileads.blogspot.com/2011/12/look-back-at-2011.html"&gt;post&lt;/a&gt; from Karim Temsamani. It’s a look back on 2011 and provides a great perspective on how &lt;a href="http://googleadsdeveloper.blogspot.com/search/label/mobile"&gt;mobile&lt;/a&gt; really took a step forward in the advertising ecosystem. -- Stan Grinberg, Ads Developer Relations Team&lt;/i&gt;

&lt;p&gt;
Mobile turned a corner this year. As smartphones and tablets became a part of our everyday lives, business owners’ conversations shifted from 'Why should I advertise on mobile or build a mobile website?' to 'How do I get started?’.&lt;br /&gt;&lt;br /&gt;

Five major industry trends emerged in 2011 that will carry us into 2012, and beyond.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;1 - Everyone goes mobile&lt;/b&gt;&lt;br /&gt;
Smartphones and tablets proved that they weren’t just for the geekiest - er, ‘tech savviest’ - among us.  These devices are &lt;a href="http://blog.nielsen.com/nielsenwire/online_mobile/report-the-rise-of-smartphones-apps-and-the-mobile-web/"&gt;increasingly becoming the norm&lt;/a&gt; and they continue to change how people connect with each other, and with businesses, everywhere.  According to our &lt;a href="http://googlemobileads.blogspot.com/2011/04/smartphone-user-study-shows-mobile.html"&gt;research with IPSOS&lt;/a&gt; earlier this year:
&lt;ul&gt;&lt;li&gt;79% of smartphone consumers use their phones to help with shopping, from comparing prices, to finding more product info, to locating a retailer.&lt;/li&gt;&lt;li&gt;70% use their smartphones while in a store.&lt;/li&gt;&lt;li&gt;77% have contacted a business via mobile, with 61% calling and 59% visiting the local business.&lt;/li&gt;&lt;/ul&gt;

It’s not just that more people are using smartphones and tablets (though the numbers are skyrocketing at an accelerating pace)—it’s that a huge, and fast-growing base of smartphone users, now expect to engage with businesses on mobile. The mainstream consumer got mobilized in 2011.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;2 - Mobile search transforms shopping, forever&lt;/b&gt;   &lt;br /&gt;
Analyzing mobile search trends helped the industry better understand how people were using their mobile devices in 2011.  For starters, we learned a lot about the ‘timing’ of mobile and tablets.  These devices enable us to be constantly connected to the internet, as &lt;a href="http://googlemobileads.blogspot.com/2011/09/new-search-data-reveal-that-when-sun.html"&gt;mobile usage has proven to be complementary to the desktop&lt;/a&gt;.  We got a clearer picture of how search is changing the ways we shop and connect with businesses.  More people are looking for deals both en route to stores and within them on mobile - in the retail category, “Black Friday” related mobile queries were over 200% higher this year than in 2010.  Users have also developed some mobile-specific shopping habits - for example, &lt;a href="http://googlemobileads.blogspot.com/2011/09/holiday-retail-mobile-insights.html"&gt;44% of all searches for last minute gifts and store locator terms&lt;/a&gt; are projected to come from mobile devices this holiday season.  For procrastinators, mobile has come to the rescue!&lt;br /&gt;&lt;br /&gt;

In October, we looked at some of the newest ways marketers can build their businesses via &lt;a href="http://googleblog.blogspot.com/2011/10/mo-mentum-whats-new-with-mobile-search.html"&gt;mobile search&lt;/a&gt;.  But, this is only the beginning - whether people are trying to find or call a business, compare prices in a store, or visit a site or app directly from their phones, search and search ads will be the tools that shape a new shopping experience, enabling us connect with businesses, research and buy products on or offline, all via mobile.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;3 - Progress with the mobile advertising pipes&lt;/b&gt;&lt;br /&gt;
As an industry, we came a long way in terms of improving the ‘pipes’ - the systems, products and technologies that advertisers use to build, serve, and measure mobile ads.  It’s still early days, but the progress with standards like &lt;a href="http://googlemobileads.blogspot.com/2011/09/industry-standards-coming-to-mobile.html"&gt;MRAID&lt;/a&gt; and the momentum behind HTML5, are helping to rally the mobile community and make it easier for marketers and customers to connect on the platform.  Getting existing tools to ‘speak mobile’ has been another key to helping mobile advertising grow-up as quickly users and businesses want it to.  Across &lt;a href="http://googlemobileads.blogspot.com/2011/09/mobile-website-optimization-now-factors.html"&gt;search&lt;/a&gt; and &lt;a href="http://googlemobileads.blogspot.com/2011/05/delivering-mobile-branding-at-scale.html"&gt;display&lt;/a&gt;, the tools the industry is already familiar with are getting mobilized.  There’s plenty of work still to do, but significant progress is being made - watch this space in 2012.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;4 - Tablets join the mobile party&lt;/b&gt;&lt;br /&gt;
Tablets made quite a splash this year.  Usage trends sharpened - we’re seeing that people people use these devices &lt;a href="http://googlemobileads.blogspot.com/2011/11/consumers-on-tablet-devices-having-fun.html"&gt;to shop, consume media, have fun&lt;/a&gt;, and they do so most frequently &lt;a href="http://googlemobileads.blogspot.com/2011/09/new-search-data-reveal-that-when-sun.html"&gt;in the evenings&lt;/a&gt;.  Tablets are a third screen to be reckoned with for marketers - we saw a 440% growth in traffic from tablets in November 2011 compared to December 2010 on the AdMob network.  The business potential is tremendous: not only are users more inclined to shop and make purchases on tablets, but because campaigns can be more effective running across several screens instead of one, tablets offer an incremental opportunity for marketers.  Our research with Nielsen showed that campaigns on several screens can be ‘Better Together’ - indeed, in cases like &lt;a href="http://googlemobileads.blogspot.com/2011/09/better-together-new-insights-on-display.html"&gt;Adidas’&lt;/a&gt;, that proved to be true.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;5 - Businesses start (actually) thinking mobile first&lt;/b&gt;&lt;br /&gt;
Smartphones and tablets aren’t small desktop computers - they’re new devices being used in entirely new ways. This year, businesses began to embrace this at scale and many saw good things happen when they built &lt;a href="http://googlemobileads.blogspot.com/2011/02/mobile-best-practice-separate-out.html"&gt;ad campaigns&lt;/a&gt; and &lt;a href="http://googlemobileads.blogspot.com/2011/11/gomo-ten-mobile-site-best-practices.html"&gt;websites&lt;/a&gt; specifically for mobile.  &lt;a href="http://googlemobileads.blogspot.com/2011/11/gomo-ticketsnow-sees-100-spike-in.html"&gt;Ticketsnow’s success&lt;/a&gt; with a mobile optimized site - increased site traffic, and more ticket sales - is just one example of the benefits of building for mobile.  Initiatives like &lt;a href="http://googlemobileads.blogspot.com/2011/11/gomo-helping-businesses-create-mobile.html"&gt;GoMo&lt;/a&gt; and &lt;a href="http://googlemobileads.blogspot.com/2011/12/engaging-consumers-on-tablets-new-ad.html"&gt;platform-specific ad features&lt;/a&gt; will help businesses better connect with mobile customers in the coming months, and beyond.&lt;br /&gt;&lt;br /&gt;

It’s hard to believe, but as far as the industry has come in 2011, we’re still in the earliest chapters of mobile’s story.  The ways people connect to businesses on their mobile devices and the tools they’re using to connect from them progressed by leaps and bounds this year and soon, we’ll see the mainstream shift that changes the way mobile connects people with brick-and-mortar storefronts as well.  Mobile will be moving full speed ahead in 2012 so keep those sleeves rolled-up and those seatbelts fastened - we’ll see you then.&lt;br/&gt;&lt;br/&gt;
&lt;/p&gt;
Posted by: Karim Temsamani, VP Mobile Ads&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-6197712991551892135?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/ofin0y4-iTg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/6197712991551892135?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/6197712991551892135?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/ofin0y4-iTg/look-back-at-mobile-in-2011.html" title="A look back at mobile in 2011" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2011/12/look-back-at-mobile-in-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AERns-eyp7ImA9WhRXFE8.&quot;"><id>tag:blogger.com,1999:blog-7815614485808579332.post-104120910099774031</id><published>2011-12-20T14:55:00.000-08:00</published><updated>2011-12-20T14:55:07.553-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-20T14:55:07.553-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="animation" /><category scheme="http://www.blogger.com/atom/ns#" term="admob_sdk" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><title>Animating Banner Ads in AdMob SDK for iOS</title><content type="html">&lt;p&gt;Adding animations to banner ads can provide a nice touch to how the ad transitions onto the screen. This blog post will show you how to animate an AdMob banner on iOS.&lt;/p&gt;

&lt;p&gt;We will specifically focus on &lt;a href="http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html "&gt;block-based animation methods&lt;/a&gt; which were introduced in iOS 4. If you’re using an older version of iOS, you can achieve the same effect using the &lt;a href="http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html"&gt;beginAnimations:context:&lt;/a&gt; and &lt;a href="http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html"&gt;commitAnimations:&lt;/a&gt; class methods in &lt;a href="tp://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html "&gt;UIView&lt;/a&gt;.&lt;/p&gt;

&lt;br/&gt;
&lt;b&gt;Sliding a banner up onto the screen&lt;/b&gt;

&lt;p&gt;The key to animating banners is changing one of the animatable properties in &lt;a href="http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html "&gt;UIView&lt;/a&gt; across a certain period of time. iOS will then choose how to animate the AdMob banner across this specified time using its internal logic along with any options that have been specified. Let’s look at how to animate a banner to slide up onto the application’s screen. &lt;/p&gt;

&lt;p&gt;First, the AdMob banner is initialized with a frame outside of the bounds of the screen (specifically underneath the bottom of the screen). Once the ad is received, it can be animated upwards through its height. Since the banner is sliding up and onto the screen, only the y-coordinate will change during animation. The code for initializing the banner is shown below.&lt;/p&gt;

&lt;pre class="prettyprint"&gt;
// Initialize the banner off of the screen
self.adBanner = [[[GADBannerView alloc]    
  initWithFrame:CGRectMake(0.0, 
                           self.view.frame.size.height,    
                           GAD_SIZE_320x50.width,
                           GAD_SIZE_320x50.height)] autorelease];
&lt;/pre&gt;

&lt;p&gt;The next step is to implement &lt;a href="http://code.google.com/mobile/ads/docs/ios/intermediate.html "&gt;adViewDidReceiveAd:&lt;/a&gt; to set the final frame for the AdMob banner and tell iOS to animate across the two values using the &lt;a href="http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html"&gt;animateWithDuration:animations:&lt;/a&gt; method. &lt;/p&gt;

&lt;pre class="prettyprint"&gt;
- (void)adViewDidReceiveAd:(GADBannerView *)adView {

  [UIView animateWithDuration:1.0 animations:^ {
    // Final frame of ad should be docked to bottom of screen
    adView.frame = CGRectMake(0.0,
                              self.view.frame.size.height -
                              adView.frame.size.height,
                              adView.frame.size.width,
                              adView.frame.size.height);
  
  }];
}
&lt;/pre&gt;

&lt;p&gt;It’s as easy as that! Now, instead of instantly appearing on the screen, the banner ad gracefully slides up in the application using animation.&lt;/p&gt;

&lt;br/&gt;
&lt;center&gt;
&lt;a href="http://2.bp.blogspot.com/-23YwcQCTuDk/TvEP53kzv4I/AAAAAAAAAFU/dIN9DY-ufm8/s1600/Screen%2Bshot%2B2011-12-20%2Bat%2B2.43.51%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="194" width="320" src="http://2.bp.blogspot.com/-23YwcQCTuDk/TvEP53kzv4I/AAAAAAAAAFU/dIN9DY-ufm8/s320/Screen%2Bshot%2B2011-12-20%2Bat%2B2.43.51%2BPM.png" /&gt;&lt;/a&gt;&lt;/center&gt;


&lt;br/&gt;
&lt;b&gt;Customized animations&lt;/b&gt;

&lt;p&gt;You can experiment with other animatable properties of &lt;a href="http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html"&gt;UIView&lt;/a&gt; as well. For example, try sliding the banner onto the screen from left to right by changing the initial frame to the left of the screen instead of beneath it. If you want to get even more creative, try experimenting with the &lt;a href="http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html"&gt;Core Animation&lt;/a&gt; classes. These classes give you powerful animation functionality and allow you to  customize keyframe and timing functions. &lt;/p&gt;

&lt;p&gt;Pro tip: Be thoughtful about where and how you’re going to use animations. It’s easy to go overboard.&lt;/p&gt;

&lt;p&gt;If you have any questions about animations on iOS or about the AdMob SDK in general, feel free to post them in our &lt;a href="https://groups.google.com/forum/#!forum/google-admob-ads-sdk"&gt;forum&lt;/a&gt;. Have fun animating!&lt;/p&gt;

&lt;br/&gt;
&lt;span class="post-author"&gt;&lt;a href="https://plus.google.com/102708799507737837368/"&gt;&lt;img width="20" height="20" src="https://lh3.googleusercontent.com/-RonljIAjNbg/AAAAAAAAAAI/AAAAAAAAAps/nM93tw3iYSk/photo.jpg?sz=20" style="vertical-align:middle; border:none;"&gt;&lt;/a&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="https://plus.google.com/102708799507737837368/" rel="author"&gt;Raj Parameswaran&lt;/a&gt;, AdMob Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7815614485808579332-104120910099774031?l=googleadsdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/GoogleAdsDeveloperBlog/~4/R98P89NwDdo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/104120910099774031?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7815614485808579332/posts/default/104120910099774031?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoogleAdsDeveloperBlog/~3/R98P89NwDdo/animating-banner-ads-in-admob-sdk-for.html" title="Animating Banner Ads in AdMob SDK for iOS" /><author><name>Google Ads Developer Advisor</name><uri>http://www.blogger.com/profile/16700526826531306391</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-23YwcQCTuDk/TvEP53kzv4I/AAAAAAAAAFU/dIN9DY-ufm8/s72-c/Screen%2Bshot%2B2011-12-20%2Bat%2B2.43.51%2BPM.png" height="72" width="72" /><feedburner:origLink>http://googleadsdeveloper.blogspot.com/2011/12/animating-banner-ads-in-admob-sdk-for.html</feedburner:origLink></entry></feed>

