<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>Google&amp;#39;s DoubleClick for Publishers API</title><description></description><managingEditor>noreply@blogger.com (Admin)</managingEditor><pubDate>Fri, 8 Nov 2024 08:34:29 -0800</pubDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">4</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><link>http://doubleclickpublishersapis.blogspot.com/</link><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle/><itunes:category text="Business"><itunes:category text="Management &amp; Marketing"/></itunes:category><itunes:category text="Business"><itunes:category text="Investing"/></itunes:category><itunes:category text="News &amp; Politics"/><itunes:category text="Education"><itunes:category text="Educational Technology"/></itunes:category><itunes:category text="Government &amp; Organizations"><itunes:category text="National"/></itunes:category><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><title>Taking a closer look at the Publisher Query Language and the future</title><link>http://doubleclickpublishersapis.blogspot.com/2010/05/taking-closer-look-at-publisher-query.html</link><category>dfp</category><category>pql</category><author>noreply@blogger.com (Admin)</author><pubDate>Fri, 7 May 2010 15:00:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5705734152805851946.post-3542995151982885834</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Recently we launched &lt;a href="http://code.google.com/apis/dfp/docs/rel_notes.html"&gt;v201004&lt;/a&gt;, and with that introduced the new &lt;a href="http://code.google.com/apis/dfp/docs/reference/v201004/CreativeService.Statement.html"&gt;Statement&lt;/a&gt; object which gives support for one of our top requested features - bind variables. In this blog post, we will take a closer look at the Publisher Query Language (&lt;a href="http://code.google.com/apis/dfp/docs/pqlreference.html"&gt;PQL&lt;/a&gt;), Statements with bind variables, and what we have in store for the future.&lt;br /&gt;
&lt;br /&gt;
Publisher Query Language&lt;br /&gt;
&lt;br /&gt;
PQL plays a very significant role in the DFP API by providing the developer with a robust way of filtering which objects should be retrieved or modified before the request is completed. In other words, if you would like to retrieve only orders which are in the draft state, you could take one of two approaches. You could fetch all orders within your network and filter them one by one or instruct the server to only fetch orders in the draft state before returning all results. By doing the latter, the DFP API allows developers to create smaller and more direct requests, and, in turn, increases the efficiency of their code.&lt;br /&gt;
&lt;br /&gt;
PQL has a very similar syntax to SQL, but does not include keywords such as SELECT or FROM; they are implied by the method which uses the PQL statement. The following piece of code constructs a Statement capable of fetching orders in the draft state and retrieves those orders:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; // Create a statement to only select orders in the&lt;br /&gt;
&amp;nbsp; // 'DRAFT' state. &lt;br /&gt;
&amp;nbsp; Statement filterStatement = new Statement();&lt;br /&gt;
&amp;nbsp; filterStatement.setQuery("WHERE status = 'DRAFT' LIMIT 500");&lt;br /&gt;
&amp;nbsp; OrderPage orderPage =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orderService.getOrdersByStatemet(filterStatement);&lt;br /&gt;
&lt;br /&gt;
The documentation included for each "get*ByStatment" (e.g. &lt;a href="http://code.google.com/apis/dfp/docs/reference/OrderService.html#getOrdersByStatement"&gt;getOrdersByStatement&lt;/a&gt;) method indicates which PQL fields map to which object properties.&lt;br /&gt;
&lt;br /&gt;
Paging&lt;br /&gt;
&lt;br /&gt;
The result for "get*ByStatment" calls are pages specific to the service; i.e. an &lt;a href="http://code.google.com/apis/dfp/docs/reference/v201004/OrderService.OrderPage.html"&gt;OrderPage&lt;/a&gt; is returned by getOrdersByStatement. The limit for the number of objects that can be fetched for a single PQL request, and in a single Page, is 500. Because of this, you should always include LIMIT 500 in your statement. However, if you would like to fetch more than 500 objects, you will need to page through the results by including an OFFSET &amp;lt;#&amp;gt; in your statement as well. To page through orders in groups of 500, for example, in your statement, you would include LIMIT 500 as well as an OFFSET of an interval of 500.&lt;br /&gt;
&lt;br /&gt;
This can be represented by the following code:&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; // Sets defaults for page and filter. &lt;br /&gt;
&amp;nbsp; OrderPage page = new OrderPage();&lt;br /&gt;
&amp;nbsp; Statement filterStatement = new Statement();&lt;br /&gt;
&amp;nbsp; int offset = 0;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; do {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create a statement to get all orders.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; filterStatement.setQuery(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "WHERE status = 'DRAFT' LIMIT 500 OFFSET " + offset);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get orders by statement.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; page = orderService.getOrdersByStatement(filterStatement);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (page.getResults() != null) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i = page.getStartIndex();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (Order order : page.getResults()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(i + ") Order with ID \""&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + order.getId() + "\", name \"" + order.getName()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + "\", and advertiser ID \"" + order.getAdvertiserId()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + "\" was found.");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i++;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; offset += 500;&lt;br /&gt;
&amp;nbsp; } while (offset &amp;lt; page.getTotalResultSetSize());&lt;br /&gt;
&lt;br /&gt;
The loop will end when there are no pages left, i.e. the offset is greater than or equal to the to the total result set size.&lt;br /&gt;
&lt;br /&gt;
Bind variables&lt;br /&gt;
&lt;br /&gt;
Bind variables were recently introduced to allow for reusing of the same template PQL statement combined with varying parameters. To change the PQL statement above to differ which status is being selected, 'DRAFT' is changed to the bind variable status, represented by :status. Note that bind variables can be any name - not just the name of their property. We chose :status here for simplicity.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; // Create a statement to only select orders in the state&lt;br /&gt;
&amp;nbsp; // bound to status.&lt;br /&gt;
&amp;nbsp; Statement filterStatement = new Statement();&lt;br /&gt;
&amp;nbsp; filterStatement.setQuery("WHERE status = :status LIMIT 500");&lt;br /&gt;
&lt;br /&gt;
To bind to :status, you will need to create a parameter map with a &lt;a href="http://code.google.com/apis/dfp/docs/reference/v201004/OrderService.String_ParamMapEntry.html"&gt;String_ParamMapEntry&lt;/a&gt; coupling :status with a &lt;a href="http://code.google.com/apis/dfp/docs/reference/v201004/OrderService.StringParam.html"&gt;StringParam&lt;/a&gt;. Note that ":" is not included in the bind variable name in the parameter map.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; // Create the string parameter.&lt;br /&gt;
&amp;nbsp; StringParam stringParam = new StringParam();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; // Create bind parameters map.&lt;br /&gt;
&amp;nbsp; String_ParamMapEntry[] paramMap = new String_ParamMapEntry[] {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new String_ParamMapEntry("status", stringParam)&lt;br /&gt;
&amp;nbsp; };&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; filterStatement.setParams(paramMap);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Before you make the call to getOrdersByStatement, set the stringParam value to the specific status.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; stringParam.setValue("DRAFT");&lt;br /&gt;
&lt;br /&gt;
In this case, because status was bound to a variable declared before the parameter map, you can set the variables value at any time.&lt;br /&gt;
&lt;br /&gt;
The first iteration of the while loop above would then produce the following XML snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; ...&lt;br /&gt;
&amp;nbsp; &amp;lt;filterStatement&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;query&amp;gt;WHERE status = :status LIMIT 500 OFFSET 0&amp;lt;/query&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;params&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;key&amp;gt;status&amp;lt;/key&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;nbsp; xmlns:ns2=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "https://www.google.com/apis/ads/publisher/v201004" &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xsi:type="ns2:StringParam"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;DRAFT&amp;lt;/value&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/value&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/params&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;/filterStatement&amp;gt;&lt;br /&gt;
&amp;nbsp; ...&lt;br /&gt;
&lt;br /&gt;
Planned features and production&lt;br /&gt;
&lt;br /&gt;
The release of v201004 was the culmination of the last step before we can begin rolling out access to the production API and we will have more information about signing up to for production use in the coming weeks. We are still hard at work on the forecasting and reporting service and will have some news about those in the following weeks as well.&lt;br /&gt;
&lt;br /&gt;
We appreciate all of the great feedback we've been receiving on the &lt;a href="http://groups.google.com/group/google-doubleclick-for-publishers-api/topics"&gt;forum&lt;/a&gt;, both on the API and the &lt;a href="http://code.google.com/apis/dfp/docs/clients.html"&gt;client libraries&lt;/a&gt;, and we''ll continue to incorporate it as we continue development.&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Getting Started with the API: Sandbox Environment</title><link>http://doubleclickpublishersapis.blogspot.com/2010/03/getting-started-with-api-sandbox.html</link><category>Getting Started</category><category>Sandbox</category><author>noreply@blogger.com (Admin)</author><pubDate>Mon, 29 Mar 2010 17:00:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5705734152805851946.post-3505207380472690224</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;As most of you are now aware, there are &lt;a href="http://code.google.com/apis/dfp/docs/environments.html"&gt;two API environments&lt;/a&gt; - the sandbox and production. The production environment is the one in which your real ads run; this is the environment you log into on the website. The API also has a second environment, the sandbox, which allows developers to test their code before affecting any live running ads.  Production API access is in the process of being rolled out, and we'll have a blog post soon detailing how to get access. Today, we'll discuss some of the less known features of the sandbox and some new tools we've developed.&lt;br /&gt;
&lt;br /&gt;
Inviting users to your network&lt;br /&gt;
&lt;br /&gt;
A feature of the API that may be not immediately obvious is that the &lt;a href="http://code.google.com/apis/dfp/docs/reference/UserService.html"&gt;UserService&lt;/a&gt; allows a user with Administrator rights to &lt;a href="http://code.google.com/apis/dfp/docs/reference/UserService.html#createUser"&gt;create a user&lt;/a&gt; directly in their network. Any developer can currently do this without having the new user signup first. For example, if you are trying out the API for the first time, instead of performing every API call as an Administrator (the default for your email address), you may want to create a few users with roles such as Salesperson, Trafficker, or Advertiser to test real-world workflows.&lt;br /&gt;
&lt;br /&gt;
Create some new gmail addresses such as my.name.dfp.salesperson@gmail.com.&lt;br /&gt;
Alternatively, register an existing non-gmail address as a &lt;a href="http://www.google.com/accounts/NewAccount"&gt;new Google account&lt;/a&gt;.&lt;br /&gt;
Call &lt;a href="http://code.google.com/apis/dfp/docs/reference/UserService.html#createUsers"&gt;createUsers&lt;/a&gt; with that new address and the chosen Role.&lt;br /&gt;
You can now log in with that new user using that user's email and password while generating your authentication token.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As a quick note, calling createUsers with an address that already has access to the sandbox, will create a new network for that user. For example, if dfp.user1@gmail.com and dfp.user2@gmail.com separately sign up for the sandbox, each account has its own independent network and objects. If dfp.user1@gmail.com invites dfp.user2@gmail.com to their network by calling createUsers with dfp.user2@gmail.com, dfp.user2@gmail.com will now have access to both networks. To decide which network dfp.user2@gmail.com will connect to, the correct networkCode will need to be supplied when making an API call. Making any API call without the proper &lt;a href="http://code.google.com/apis/dfp/docs/developers_guide.html#headers"&gt;networkCode&lt;/a&gt; will throw an exception.&lt;br /&gt;
&lt;br /&gt;
Sandbox playground&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
We've listened your feedback and the top feature request was the ability to view the data in the sandbox. Today, we are announcing the &lt;a href="http://dfpsandbox.googlecodesamples.com/"&gt;DFP API Sandbox Playground&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4GweOHWFD3fkAsczVHQ09EcxwfGJtDVHOELz0HKi1oH5lZw1TepCKx2GqQaHsFhiF8MVTW0Wh7uNIkQa8wq2LKxjkbgvCIVD50i6SBmTFMlYERfaL4P3UZBT1qnsYNQjCkdK22yxqVXE/s1600/d3dfddb_123jx7dfmgf_b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4GweOHWFD3fkAsczVHQ09EcxwfGJtDVHOELz0HKi1oH5lZw1TepCKx2GqQaHsFhiF8MVTW0Wh7uNIkQa8wq2LKxjkbgvCIVD50i6SBmTFMlYERfaL4P3UZBT1qnsYNQjCkdK22yxqVXE/s320/d3dfddb_123jx7dfmgf_b.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
With this online tool, you'll be able to log in via &lt;a href="http://code.google.com/apis/dfp/docs/developers_guide.html#serviceauth"&gt;OAuth&lt;/a&gt; to view the objects within your network. We've also added the ability to test PQL statements directly in the tool. This app is built upon the current &lt;a href="http://code.google.com/p/google-api-dfp-php/wiki/SampleWebApp"&gt;PHP sample web application&lt;/a&gt; and we'll backport many of the new features into the open-source application soon.&lt;br /&gt;
&lt;br /&gt;
We also understand that having production access to the real website is also necessary for many developers. We are working on rolling this out and will have more information soon.&lt;br /&gt;
&lt;br /&gt;
Monthly sandbox refresh&lt;br /&gt;
&lt;br /&gt;
As a final note, the Sandbox is refreshed once a month as part of our server maintenance process. After a refresh, your account will only have the root ad unit, a test salesperson, and a test trafficker. We'll announce the next sandbox refresh coming up at the end of the month on our &lt;a href="http://groups.google.com/group/google-doubleclick-for-publishers-api/topics"&gt;forum&lt;/a&gt; as usual.&lt;br /&gt;
&lt;br /&gt;
Thanks for your continued feedback and support, and stay tuned for more info about our release to the production environment!&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4GweOHWFD3fkAsczVHQ09EcxwfGJtDVHOELz0HKi1oH5lZw1TepCKx2GqQaHsFhiF8MVTW0Wh7uNIkQa8wq2LKxjkbgvCIVD50i6SBmTFMlYERfaL4P3UZBT1qnsYNQjCkdK22yxqVXE/s72-c/d3dfddb_123jx7dfmgf_b.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Getting Started with the API: The Web Services</title><link>http://doubleclickpublishersapis.blogspot.com/2010/02/getting-started-with-api-web-services.html</link><category>Getting Started</category><author>noreply@blogger.com (Admin)</author><pubDate>Tue, 2 Mar 2010 14:00:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5705734152805851946.post-8248527173677324027</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;First off, we'd like to thank everyone for the feedback thus far; we will continue to incorporate it as we plan new features for the API. We are also very excited about the applications we've seen being built and would love to hear more about them on our &lt;a href="http://groups.google.com/group/google-doubleclick-for-publishers-api/topics"&gt;forum&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Today, in the first part of our Getting Started with the API series, I'd like to discuss some of the more technical aspects of the API. As many of our developers are just getting started with the API, I'd like to remind everyone that we provide a full &lt;a href="http://code.google.com/apis/dfp/docs/start.html"&gt;documentation site&lt;/a&gt;, and much of the following information is taken from there. I'd also like to point out that if at any time you feel we could better document a feature or expand on a detail, please do not hesitate to leave any suggestions on our &lt;a href="http://code.google.com/apis/dfp/docs/survey.html"&gt;feedback survey&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
General service overview&lt;br /&gt;
&lt;br /&gt;
As you have most likely determined by now, our API uses SOAP and provides one WSDL per service. The output from code generation on each WSDL can be combined to create the complete API; this is currently what we are doing in the &lt;a href="http://code.google.com/apis/dfp/docs/clients.html"&gt;client libraries&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Our API is versioned and, because objects are separated into namespaces according to their version, objects from one version will not work with any other version. We will support multiple versions of the API at the same time - both in our documentation and in our client libraries. Our versioning timeline has not yet been determined, but each version will have at least a 4 month sunset period before it is disabled.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Our API is highly consistent; each service has the same methods:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;createObject&lt;/li&gt;
&lt;li&gt;createObjects&lt;/li&gt;
&lt;li&gt;getObject&lt;/li&gt;
&lt;li&gt;getObjectsByFilter&lt;/li&gt;
&lt;li&gt;performObjectAction&lt;/li&gt;
&lt;li&gt;updateObject&lt;/li&gt;
&lt;li&gt;updateObjects&lt;/li&gt;
&lt;/ul&gt;* Note here that these methods are examples where Object would be replaced, by Order or LineItem.&lt;br /&gt;
&lt;br /&gt;
In each service, all methods act on a single type of Object. For example, the OrderService only provides methods to create, get, or update orders; i.e. getOrdersByFilter and updateOrders. This allows you to develop a standard way of handling service invocation in your application; you will always call getObjectsByFilter, but the filter may change depending on the service, and it will always return some type of Page.&lt;br /&gt;
&lt;br /&gt;
For creating objects, we provide two methods that are interchangeable - createObject and createObjects; createObjects is simply a convenience method that performs the same task as createObject.&lt;br /&gt;
&lt;br /&gt;
To create an object, a local object is created with all the required fields and passed via one of the mentioned methods. The returned object will be the result of this creation. It will have its defaults filled in and its ID populated.&lt;br /&gt;
&lt;br /&gt;
For getting objects, we provide two methods - getting an object by its ID and getting objects by a &lt;a href="http://code.google.com/apis/dfp/docs/pqlreference.html"&gt;PQL statement&lt;/a&gt;. In cases where you might want to get the most recent version of an object quickly, getObject would suffice. Retrieving large sets of information for the user would call for paging through a series of getObjectsByFilter service calls.&lt;br /&gt;
&lt;br /&gt;
The final methods involve mutating objects on our server. The update methods provide a way of performing an object replacement by its ID. A typical workflow for updating an object given user input would resemble the following steps:&lt;br /&gt;
&lt;br /&gt;
&lt;ol style="text-align: left;"&gt;&lt;li&gt;Perform a getObjectsByFilter call and present the user with a large set of data.&lt;/li&gt;
&lt;li&gt;After the user selects one particular object, perform a getObject call by recalling its ID.&lt;/li&gt;
&lt;li&gt;The user modifies the object to update it locally; the ID should not change.&lt;/li&gt;
&lt;li&gt;Finally, perform an updateObject call, passing in the full updated object.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Notice that in our general workflow, getObject must be called before the updateObject call so that the most recent version of the object is modified.&lt;br /&gt;
&lt;br /&gt;
The last method, performObjectAction, allows you to specify an action that takes place on the objects selected by the supplied filter. Instead of returning a set of objects to the developer, who would then typically update them, all updates occur server-side. The performObjectAction methods are mostly used to update the workflow of objects, such as approving or activating them.&lt;br /&gt;
&lt;br /&gt;
As we develop new features for the API, we will continue to keep the consistency we have incorporated so far. As always, we look forward to discussing our API with you on our &lt;a href="http://groups.google.com/group/google-doubleclick-for-publishers-api/topics"&gt;forum&lt;/a&gt;.&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Introducing Google's DoubleClick For Publishers API</title><link>http://doubleclickpublishersapis.blogspot.com/2010/02/introducing-googles-doubleclick-for.html</link><category>dfp</category><category>intro</category><author>noreply@blogger.com (Admin)</author><pubDate>Mon, 22 Feb 2010 08:00:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-5705734152805851946.post-4370441870176239775</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Today, we announced the next generation of our ad serving technology for online publishers, the new &lt;a href="http://www.google.com/dfp/login/info/welcome.html?utm_source=dfp_api_blog&amp;amp;utm_medium=blog&amp;amp;utm_campaign=new_dfp_02/22"&gt;DoubleClick for Publishers (DFP) from Google&lt;/a&gt;. I am pleased to announce that the new version of DFP comes with a modern API that enables publishers and third-parties to customize and extend the product.&lt;br /&gt;
&lt;br /&gt;
As we mentioned in our &lt;a href="http://googleblog.blogspot.com/2010/02/next-generation-of-ad-serving-for.html?utm_source=dfp_api_blog&amp;amp;utm_medium=blog&amp;amp;utm_campaign=gam_upgrade_2/22"&gt;Google blog post&lt;/a&gt;, for the past few years, &lt;a href="http://googleblog.blogspot.com/2010/02/our-approach-to-maximizing-advertising.html"&gt;we've been investing in a suite of solutions&lt;/a&gt; — AdSense, ad-serving technology and the DoubleClick Ad Exchange — to help online publishers make the most money possible from their content, whether they sell advertising through their own sales force directly, through an ad network such as AdSense, or a combination of both. We saw an opportunity to improve these solutions by combining Google's technology and infrastructure with DoubleClick's display advertising and ad serving experience. The new DoubleClick for Publishers is a result of that combination of strengths, as is the API that comes with it.&lt;br /&gt;
&lt;br /&gt;
The new API is available to publishers who use DFP, as well as to third-parties and vendors who would like to build applications on top of DFP. A growing community of developers is already working on sales, order management, workflow and data visualization tools. We've incorporated feedback on the existing DART for Publishers API and believe the new API is a significant step forward. It uses SOAP, a standard and widely-adopted messaging technology that uses HTTP requests to transmit and receive XML data between your client and our servers. This means you can use it with virtually any programming language of your choice. We have a wealth of public documentation available online and there are numerous code samples and client libraries ready for you to download.&lt;br /&gt;
&lt;br /&gt;
To learn more about the new API, there are a few places to get started:&lt;br /&gt;
&lt;br /&gt;
The Google Code site that hosts all of the documentation for the new API:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://code.google.com/apis/dfp"&gt;http://code.google.com/apis/dfp&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The Google Groups forum where we provide support and where you can provide feedback to us:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://groups.google.com/group/google-doubleclick-for-publishers-api/"&gt;http://groups.google.com/group/google-doubleclick-for-publishers-api/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
This blog, which will continue to have posts explaining new API features, discussing best practices for development, and alerting developers of planned outages.&lt;br /&gt;
&lt;br /&gt;
When you are ready to begin development, please &lt;a href="http://code.google.com/apis/dfp/docs/signup.html?utm_source=dfp_api_blog&amp;amp;utm_medium=blog&amp;amp;utm_campaign=gam_upgrade_2/22"&gt;sign up&lt;/a&gt; to receive access to a sandbox development environment. In this environment, you will be able to explore the API without worrying about affecting your production accounts. API access to production DFP accounts is being rolled out in waves to customers who have used the sandbox environment and will be granted as resources allow. Please start your development effort using the sandbox environment now. You'll be able to contact us when your application is ready to test in the production environment through a new sign-up form that will appear on our online documentation and on our blog.&lt;br /&gt;
&lt;br /&gt;
We are looking forward to working with you and seeing what you build!&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item></channel></rss>