{"id":1000,"date":"2017-02-14T19:28:31","date_gmt":"2017-02-14T19:28:31","guid":{"rendered":"http:\/\/zappysys.com\/blog\/?p=1000"},"modified":"2017-10-09T13:48:23","modified_gmt":"2017-10-09T13:48:23","slug":"calling-google-dfp-api-with-ssis-doubleclick-soap-api","status":"publish","type":"post","link":"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/","title":{"rendered":"How to call Google DFP API with SSIS &#8211; DoubleClick"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-1634 alignleft\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png\" alt=\"\" width=\"198\" height=\"198\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png 500w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration-150x150.png 150w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration-300x300.png 300w\" sizes=\"(max-width: 198px) 100vw, 198px\" \/><\/a>Google DoubleClick is one of the most popular platforms for Advertisers. Many times you have need for custom integration or Automation for many operations. In this article we will learn how to Call Google DFP API (i.e. DoubleClick for Publishers) without coding using SSIS (Microsoft SQL Server Integration Services). In our previous article we discussed how to Integrate <a href=\"https:\/\/zappysys.com\/blog\/get-data-from-google-adwords-using-ssis\/\" target=\"_blank\" rel=\"noopener\">Google AdWords API using SSIS (Click here)<\/a>.<\/p>\n<p>If you are new to SSIS then no worry there are plenty of <a href=\"http:\/\/www.bing.com\/search?q=ssis+tutorials&amp;src=IE-TopResult&amp;FORM=IE11TR&amp;conversationid=\" target=\"_blank\" rel=\"noopener\">tutorials for ssis<\/a><\/p>\n<p>To achieve Custom integration for DoubleClick (DFP) API we will use <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-xml-source\/\" target=\"_blank\" rel=\"noopener\">SSIS XML Source<\/a>. XML Source is part of <a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/\" target=\"_blank\" rel=\"noopener\">SSIS PowerPack<\/a> which has 45+ connectors and Tasks.<\/p>\n<p>&nbsp;<\/p>\n<h2>Prerequisite<\/h2>\n<p>Before you can finish tasks explained in this article you have to finish below steps. This article assumes you have basic knowledge of SSIS (SQL Server Integration Services)<\/p>\n<ol>\n<li>Make sure you SSIS designer installed. Sometimes its referred as BIDS or SSDT (<a href=\"https:\/\/msdn.microsoft.com\/en-us\/mt186501\" target=\"_blank\" rel=\"noopener\">Get from here)<\/a><\/li>\n<li><a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/\" target=\"_blank\" rel=\"noopener\">Download SSIS PowerPack<\/a><\/li>\n<li><a href=\"https:\/\/www.soapui.org\/downloads\/soapui.html\" target=\"_blank\" rel=\"noopener\">Download SoapUI<\/a> (Its free third party tool to test SOAP API). SoapUI can help you to generate XML Request BODY easily from WSDL file provided by API Vendor. You can also test your service by supplying parameters.<\/li>\n<li>Optional &#8211; Another very useful Free tool is Fiddler. You can use it to see raw request\/response (<a href=\"https:\/\/zappysys.com\/blog\/how-to-use-fiddler-to-analyze-http-web-requests\/\" target=\"_blank\" rel=\"noopener\">Check this article<\/a>)<\/li>\n<\/ol>\n<h2>Download DFP API Example SSIS Package<\/h2>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/Google-DoubleClick-API-SSIS-DEMO.zip\" target=\"_blank\" rel=\"noopener\">Click here to DFP API download Sample for SSIS<\/a> SSIS Package (SSIS 2012, 2014, 2016)<\/p>\n<p>Screenshot of Sample Package:<\/p>\n<div id=\"attachment_1059\" style=\"width: 977px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-example-call-google-dfp-api-get-data-from-doubleclick.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1059\" class=\"size-full wp-image-1059\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-example-call-google-dfp-api-get-data-from-doubleclick.png\" alt=\"Example SSIS Package - Google DFP API Integration (Read \/ Write data in Google Double Click for Publisher) - No Coding required\" width=\"967\" height=\"650\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-example-call-google-dfp-api-get-data-from-doubleclick.png 967w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-example-call-google-dfp-api-get-data-from-doubleclick-300x202.png 300w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-example-call-google-dfp-api-get-data-from-doubleclick-272x182.png 272w\" sizes=\"(max-width: 967px) 100vw, 967px\" \/><\/a><p id=\"caption-attachment-1059\" class=\"wp-caption-text\">Example SSIS Package &#8211; Google DFP API Integration (Read \/ Write data in Google Double Click for Publisher) &#8211; No Coding required<\/p><\/div>\n<h2>Making your first DFP API Call using SSIS<\/h2>\n<p>Once you install <a href=\"https:\/\/zappysys.com\/products\/ssis-powerpack\/\" target=\"_blank\" rel=\"noopener\">PowerPack<\/a> you are ready to execute your very first Google DFP API Call.<\/p>\n<p><strong>NOTE<\/strong>: If you don&#8217;t have any DFP network for test then see next section (Explains how to create test network for testing).<\/p>\n<p>Lets look at how to call Google DFP API step-by-step.<\/p>\n<ol>\n<li>Create new SSIS Project and open package designer<\/li>\n<li>Drag <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-rest-api-web-service-task\/\" target=\"_blank\" rel=\"noopener\">ZS REST API Task<\/a> from SSIS control flow toolbox and drop it on designer.<br \/>\n<div class=\"su-note\"  style=\"border-color:#e5e5c6;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#ffffe0;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-rest-api-web-service-task\/\" target=\"_blank\" rel=\"noopener\">REST API Task<\/a> is useful when you want to call SOAP\/REST API but not necessarily parse response into rows and columns. We will look at <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-json-file-source\/\" target=\"_blank\" rel=\"noopener\">JSON Source<\/a> later in this article which can actually parse response into rows and columns (Useful to load Google DFP data into SQL Server or other RDBMS \/ flatfile )<\/div><\/div><\/li>\n<li>Double click REST API Task to configure. Select Access mode to [Url from Connection]<\/li>\n<li>Enter following URL in the URL Textbox\n<pre>\u00a0https:\/\/ads.google.com\/apis\/ads\/publisher\/v201702\/NetworkService<\/pre>\n<\/li>\n<li>From the connection dialogbox select <strong>ZS-OAUTH<\/strong> to create new OAuth Connection for DFP API<\/li>\n<li>On OAuth Connection dialogbox select <strong>Google<\/strong> from Provider dropdown. In this demo we will use Default OAuth App but you can <a href=\"https:\/\/zappysys.com\/blog\/register-google-oauth-application-get-clientid-clientsecret\/\" target=\"_blank\" rel=\"noopener\">register your own google OAuth app<\/a> if you wish to use Custom OAuth option from UI.<\/li>\n<li>Enter following Scopes in the Scopes textbox (or select manually by clicking Select Scopes button). Scope is nothing but permission for API (In our case View\/Manage DFP data and Read\/Write Report Files to Cloud Storage).\n<pre class=\"\">https:\/\/www.googleapis.com\/auth\/dfp\r\nhttps:\/\/www.googleapis.com\/auth\/devstorage.read_only\r\nhttps:\/\/www.googleapis.com\/auth\/devstorage.write_only\r\nhttps:\/\/www.googleapis.com\/auth\/cloud-platform.read-only\r\nhttps:\/\/www.googleapis.com\/auth\/devstorage.full_control\r\nhttps:\/\/www.googleapis.com\/auth\/cloud-platform\r\nhttps:\/\/www.googleapis.com\/auth\/devstorage.read_write<\/pre>\n<\/li>\n<li>If you are not going call <a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/ReportService\" target=\"_blank\" rel=\"noopener\">ReportService<\/a> API to generate Reports in CSV format then you will need only\u00a0one scope\n<pre class=\"\">https:\/\/www.googleapis.com\/auth\/dfp<\/pre>\n<\/li>\n<li>Click Generate Token button. You will see browser popup for login and then Accept option to confirm permissions like below. Once you don&#8217;t it will populate tokens and prompt to save tokens to backup file. Secure token backup\u00a0to safe place.\n<div id=\"attachment_1034\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-oauth-2-connection-call-google-dfp-api-doubleclick-soap-webservice.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1034\" class=\"wp-image-1034\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-oauth-2-connection-call-google-dfp-api-doubleclick-soap-webservice.png\" alt=\"SSIS OAuth Connection - Connect to Google DFP API (DoubleClick SOAP Web Service)\" width=\"600\" height=\"491\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-oauth-2-connection-call-google-dfp-api-doubleclick-soap-webservice.png 816w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-oauth-2-connection-call-google-dfp-api-doubleclick-soap-webservice-300x246.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-1034\" class=\"wp-caption-text\">SSIS OAuth Connection &#8211; Connect to Google DFP API (DoubleClick SOAP Web Service)<\/p><\/div><\/li>\n<li>Once done Click Test Connection and if its green then Click OK to save connection<\/li>\n<li>Once you are back to REST API Task UI then select Method to <strong>POST<\/strong><\/li>\n<li>Select Request Body\u00a0<strong>Content Type<\/strong> to XML (i.e. text\/xml)<\/li>\n<li>Click edit button next to <strong>Request Body<\/strong> and enter following XML.\n<pre class=\"lang:xhtml decode:true\">&lt;soapenv:Envelope xmlns:soapenv=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:v20=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n   &lt;soapenv:Header&gt;\r\n      &lt;v20:RequestHeader\/&gt;\r\n   &lt;\/soapenv:Header&gt;\r\n   &lt;soapenv:Body&gt;\r\n      &lt;v20:getAllNetworks\/&gt;\r\n   &lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\n<div class=\"su-note\"  style=\"border-color:#e5e5c6;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#ffffe0;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\">\n<p>If you are wondering how did we get above XML fragment then read next section about using 3rd party tool called SoapUI. Also we have detail article for calling SOAP request.\u00a0<a href=\"\/\/zappysys.com\/blog\/calling-soap-web-service-in-ssis-xml-source\/\" target=\"_blank\" rel=\"noopener\">Check\u00a0this article on how to use SoapUI (free 3rd party tool) to create SOAP request Bodyfrom WSDL<\/a>.\u00a0DFP has many API endpoints for different actions (e.g. <a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/NetworkService\" target=\"_blank\" rel=\"noopener\">NetworkService<\/a>\u00a0,\u00a0<a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/InventoryService\" target=\"_blank\" rel=\"noopener\">InventoryService<\/a>\u00a0, &#8230;). For each service you have different Api URL and different WSDL. In the next section you can learn how to create correct SOAP Body (for POST) using <strong>SoapUI<\/strong> tool.<\/p>\n<p>For example if you using DFP NetworkService API for version v201702 then your <strong>help page URL would be like this<\/strong><br \/>\n<a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/NetworkService\" target=\"_blank\" rel=\"noopener\">https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/NetworkService<\/a><br \/>\nAnd on the same page you will see <strong>WSDL link below<\/strong><br \/>\n<a href=\"https:\/\/adwords.google.com\/api\/adwords\/mcm\/v201609\/ManagedCustomerService?wsdl\" target=\"_blank\" rel=\"noopener\">https:\/\/adwords.google.com\/api\/adwords\/mcm\/v201609\/ManagedCustomerService?wsdl<\/a><br \/>\n(Just download that WSDL XML and save to local disk then use with SoapUI to generate XML body to submit for any DFP API call.)<\/p>\n<\/div><\/div><\/li>\n<li>Once you done with above steps, your Task Configuration will look like below.\n<div id=\"attachment_1035\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-task-call-dfp-google-doubleclick-api-getAllNetworks.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1035\" class=\"wp-image-1035\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-task-call-dfp-google-doubleclick-api-getAllNetworks.png\" alt=\"SSIS Rest API Task - Call Google DoubleClick API - Get all DFP Networks\" width=\"600\" height=\"522\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-task-call-dfp-google-doubleclick-api-getAllNetworks.png 805w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-task-call-dfp-google-doubleclick-api-getAllNetworks-300x261.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-1035\" class=\"wp-caption-text\">SSIS Rest API Task &#8211; Call Google DoubleClick API &#8211; Get all DFP Networks<\/p><\/div><\/li>\n<li>Now click Test Request button. You will see Response popup with below content if its successful (Scroll at the bottom on response\u00a0form and you will see XML data) .. see below\n<pre class=\"lang:default decode:true\">------------------------------------\r\nRequest\r\n------------------------------------\r\nPOST https 1.1 ==&gt; \/apis\/ads\/publisher\/v201702\/NetworkService\r\nHost: ads.google.com\r\n\r\n&gt;&gt;&gt;&gt; HEADERS &lt;&lt;&lt;&lt;&lt;\r\nAuthorization: Bearer ya29.Glz-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\nContent-Type: text\/xml;charset=UTF-8\r\nUser-Agent: ZappySysApp\r\nHost: ads.google.com\r\nContent-Length: 291\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\nConnection: Keep-Alive\r\n\r\n------------------------------------\r\nResponse\r\n------------------------------------\r\nPOST 1.1 200 OK==&gt; OK\r\n\r\n&gt;&gt;&gt;&gt; HEADERS &lt;&lt;&lt;&lt;&lt;\r\nContent-Encoding: \r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: SAMEORIGIN\r\nX-XSS-Protection: 1; mode=block\r\nAlt-Svc: quic=\":443\"; ma=2592000; v=\"35,34\"\r\nTransfer-Encoding: chunked\r\nCache-Control: private, max-age=0\r\nContent-Type: text\/xml; charset=UTF-8\r\nDate: Sun, 26 Feb 2017 01:18:32 GMT\r\nExpires: Sun, 26 Feb 2017 01:18:32 GMT\r\nServer: GSE\r\n\r\n&gt;&gt;&gt;&gt; Cookies &lt;&lt;&lt;&lt;&lt;\r\n\r\n&gt;&gt;&gt;&gt; CONTENT &lt;&lt;&lt;&lt;&lt;\r\n\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\"&gt;\r\n\t&lt;soap:Header&gt;\r\n\t\t&lt;ResponseHeader xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t\t\t&lt;requestId&gt;27ab3d2e4e1fcb8f444b317d0b0f871d&lt;\/requestId&gt;\r\n\t\t\t&lt;responseTime&gt;50&lt;\/responseTime&gt;\r\n\t\t&lt;\/ResponseHeader&gt;\r\n\t&lt;\/soap:Header&gt;\r\n\t&lt;soap:Body&gt;\r\n\t\t&lt;getAllNetworksResponse xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t\t\t&lt;rval&gt;\r\n\t\t\t\t&lt;id&gt;551196&lt;\/id&gt;\r\n\t\t\t\t&lt;displayName&gt;XFP sandbox property&lt;\/displayName&gt;\r\n\t\t\t\t&lt;networkCode&gt;238897396&lt;\/networkCode&gt;\r\n\t\t\t\t&lt;propertyCode&gt;ca-pub-2799179143725683&lt;\/propertyCode&gt;\r\n\t\t\t\t&lt;timeZone&gt;America\/New_York&lt;\/timeZone&gt;\r\n\t\t\t\t&lt;currencyCode&gt;USD&lt;\/currencyCode&gt;\r\n\t\t\t\t&lt;effectiveRootAdUnitId&gt;237897516&lt;\/effectiveRootAdUnitId&gt;\r\n\t\t\t\t&lt;isTest&gt;true&lt;\/isTest&gt;\r\n\t\t\t&lt;\/rval&gt;\r\n\t\t&lt;\/getAllNetworksResponse&gt;\r\n\t&lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;\r\n<\/pre>\n<p>&nbsp;<\/li>\n<\/ol>\n<h2>How to generate SOAP Request Body using SoapUI tool<\/h2>\n<p>This section describes how to create DoubleClick SOAP API Request Body (XML fragment) for any DFP SOAP API call described anywhere in this article.<\/p>\n<ol>\n<li><a href=\"https:\/\/www.soapui.org\/downloads\/soapui.html\" target=\"_blank\" rel=\"noopener\">Download SoapUI<\/a> (Its free third party tool to test SOAP API). SoapUI can help you to generate XML Request BODY easily from WSDL file provided by API Vendor. You can also test your service by supplying parameters.<\/li>\n<li>Now download WDSL xml for appropriate API calls you want to make.\u00a0Assume that you want to call \u00a0<strong>getAllNetworksResponse<\/strong> API found under\u00a0<a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/NetworkService\" target=\"_blank\" rel=\"noopener\">NetworkService<\/a>. For that first navigate to help file page and open help page. Make sure you select correct version from help navigation. Copy WSDL link and open in new browser window. Save XML to local disk (e.g. c:\\api\\dfp_networkservice_wsdl.xml\u00a0(See below screenshot how to find DFP API WSDL link)\n<div id=\"attachment_1043\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/get-dftp-soap-api-wsdl-doubleclick-web-service.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1043\" class=\"wp-image-1043\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/get-dftp-soap-api-wsdl-doubleclick-web-service.png\" alt=\"How to get Google DFP API WSDL URL (Used to generate POST Body)\" width=\"600\" height=\"501\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/get-dftp-soap-api-wsdl-doubleclick-web-service.png 969w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/get-dftp-soap-api-wsdl-doubleclick-web-service-300x250.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-1043\" class=\"wp-caption-text\">How to get Google DFP API WSDL URL (Used to generate POST Body)<\/p><\/div><\/li>\n<li>Once SoapUI is downloaded and installed click <strong>File<\/strong> menu &gt; <strong>Create New SOAP Project<\/strong> option<\/li>\n<li>Name your project (e.g. DFP API) and specify WSDL URL or File Path if it was saved locally (e.g. c:\\api\\dfp_networkservice_wsdl.xml) and click OK<\/li>\n<li>Now navigate to API\u00a0Action for which you would like to get Body. Click Request node (If missing create new) and edit request. You may see XML like below (If some optional parameters not visible in XML then click Re-create request with optional parameters button from toolbar)\n<div id=\"attachment_1044\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-dfp-api-generate-soap-request-body-from-wsdl.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1044\" class=\"wp-image-1044\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-dfp-api-generate-soap-request-body-from-wsdl.png\" alt=\"Call Google DFP API - Generate SOAP Request Body XML using SoapUI (Google DoubleClick Web Service)\" width=\"600\" height=\"284\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-dfp-api-generate-soap-request-body-from-wsdl.png 727w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-dfp-api-generate-soap-request-body-from-wsdl-300x142.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-1044\" class=\"wp-caption-text\">Call Google DFP API &#8211; Generate SOAP Request Body XML using SoapUI (Google DoubleClick Web Service)<\/p><\/div><\/li>\n<li>Edit necessary parameters from above XML code and copy to Body of SSIS REST API Task.<\/li>\n<\/ol>\n<h2>Creating test network &#8211; DFP Sandbox<\/h2>\n<p>Very first step we recommend before testing DFP API call is <a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/NetworkService#makeTestNetwork\">create test network<\/a>. You can call DFP API against LIVE network but not recommended if you are calling create\/update API.<\/p>\n<p>To create test network you can follow exact same steps described in the previous section except the Body step (Step#12). Use following Request body to call makeTestNetwork command.<\/p>\n<h3>API makeTestNetwork &#8211;\u00a0Request<\/h3>\n<p>URL:\u00a0https:\/\/ads.google.com\/apis\/ads\/publisher\/v201702\/NetworkService<br \/>\nBody (see below):<\/p>\n<pre class=\"lang:default decode:true\">&lt;soapenv:Envelope xmlns:soapenv=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:v20=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n   &lt;soapenv:Header&gt;\r\n      &lt;v20:RequestHeader\/&gt;\r\n   &lt;\/soapenv:Header&gt;\r\n   &lt;soapenv:Body&gt;\r\n      &lt;v20:makeTestNetwork\/&gt;\r\n   &lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\n<p>Once you click Test you may receive following response. Note your network code (e.g. 1122334455\u00a0from below). This network code is used in pretty much all DFP API to view or manage ad network related items or properties.<\/p>\n<h3>API makeTestNetwork &#8211; Response<\/h3>\n<pre class=\"lang:xhtml decode:true\">&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\"&gt;\r\n\t&lt;soap:Header&gt;\r\n\t\t&lt;ResponseHeader xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t\t\t&lt;requestId&gt;ba61d79efee325bf4b5aa45c46836021&lt;\/requestId&gt;\r\n\t\t\t&lt;responseTime&gt;1021&lt;\/responseTime&gt;\r\n\t\t&lt;\/ResponseHeader&gt;\r\n\t&lt;\/soap:Header&gt;\r\n\t&lt;soap:Body&gt;\r\n\t\t&lt;makeTestNetworkResponse xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t\t\t&lt;rval&gt;\r\n\t\t\t\t&lt;id&gt;551196&lt;\/id&gt;\r\n\t\t\t\t&lt;displayName&gt;XFP sandbox property&lt;\/displayName&gt;\r\n\t\t\t\t&lt;networkCode&gt;1122334455&lt;\/networkCode&gt;\r\n\t\t\t\t&lt;propertyCode&gt;ca-pub-2799179143725683&lt;\/propertyCode&gt;\r\n\t\t\t\t&lt;timeZone&gt;America\/Los_Angeles&lt;\/timeZone&gt;\r\n\t\t\t\t&lt;currencyCode&gt;USD&lt;\/currencyCode&gt;\r\n\t\t\t\t&lt;effectiveRootAdUnitId&gt;237897516&lt;\/effectiveRootAdUnitId&gt;\r\n\t\t\t\t&lt;isTest&gt;true&lt;\/isTest&gt;\r\n\t\t\t&lt;\/rval&gt;\r\n\t\t&lt;\/makeTestNetworkResponse&gt;\r\n\t&lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;<\/pre>\n<p>Above response contains test networkcode copy that code becuase you will need in almost every API call you make later. You can only have one test network. If test network is already created and you try to execute above code then you may receive error \u00a0<strong>AuthenticationError.GOOGLE_ACCOUNT_ALREADY_ASSOCIATED_WITH_NETWORK<\/strong><\/p>\n<p>You can also get network code using two different ways.<\/p>\n<ul>\n<li>Visit your DFP console homepage by visiting <a href=\"https:\/\/www.google.com\/dfp\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.google.com\/dfp\/<\/a> and you will see network name and code in the top potion. Also its listed in the URL (e.g. https:\/\/www.google.com\/dfp\/1234567)<\/li>\n<li>Another way to get available networks for your login is to visit DFP API Play ground here <a href=\"https:\/\/dfp-playground.appspot.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/dfp-playground.appspot.com\/<\/a> and you will see network list in the dropdown ( name and network code)<\/li>\n<\/ul>\n<h2>How to Create new Ad Units<\/h2>\n<p>Now lets look at an example which will create few Ad Units by calling <a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/InventoryService#createAdUnits\" target=\"_blank\" rel=\"noopener\">createAdUnits<\/a> API. If you are creating Ad Unit at the root level then you will need to specify correct Parent ID (i.e \u00a0effectiveRootAdUnitId). To obtain that Parent ID you may have to call \u00a0<a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/NetworkService#getcurrentnetwork\" target=\"_blank\" rel=\"noopener\">getCurrentNetwork<\/a> API. In the response you will see\u00a0effectiveRootAdUnitId.<\/p>\n<p>There is another way to know effectiveRootAdUnitId or Id of any Ad Units which can be Parent for new AdUnit. Goto google.com\/dfp &gt; Click Inventory Tab &gt; Click Ad Units Side menu &gt; Click Download ad units hyper link. You can also download AdUnits as CSV file from DFP Portal and look for Ad Units which are created at the root. Parent ID column for Root level Ad Units is basically called\u00a0effectiveRootAdUnitId.<\/p>\n<p>Now lets look at how to get\u00a0EffectiveRootID by calling <a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/NetworkService#getcurrentnetwork\" target=\"_blank\" rel=\"noopener\">getCurrentNetwork<\/a>.<\/p>\n<h3>API getCurrentNetwork &#8211; Request<\/h3>\n<p>URL:\u00a0https:\/\/ads.google.com\/apis\/ads\/publisher\/v201702\/NetworkService<br \/>\nBody (see below):<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns:xsd=\"http:\/\/www.w3.org\/2001\/XMLSchema\"&gt;\r\n&lt;soap:Header&gt;\r\n\t&lt;RequestHeader xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;\r\n\t\t&lt;networkCode xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;1122334455&lt;\/networkCode&gt;\r\n\t\t&lt;applicationName xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;ZappySysApp&lt;\/applicationName&gt;\r\n\t&lt;\/RequestHeader&gt;\r\n\t&lt;\/soap:Header&gt;\r\n\t&lt;soap:Body&gt;\r\n\t\t&lt;getCurrentNetwork xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\" \/&gt;\r\n\t&lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;<\/pre>\n<p>&nbsp;<\/p>\n<h3>API getCurrentNetwork &#8211; Response<\/h3>\n<pre class=\"lang:xhtml decode:true\">&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\"&gt;\r\n\t&lt;soap:Header&gt;\r\n\t\t&lt;ResponseHeader xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;\r\n\t\t\t&lt;requestId&gt;81d1b00e8fbfb862129eb2dd485cf7bb&lt;\/requestId&gt;\r\n\t\t\t&lt;responseTime&gt;4507&lt;\/responseTime&gt;\r\n\t\t&lt;\/ResponseHeader&gt;\r\n\t&lt;\/soap:Header&gt;\r\n\t&lt;soap:Body&gt;\r\n\t\t&lt;getCurrentNetworkResponse xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;\r\n\t\t\t&lt;rval&gt;\r\n\t\t\t\t&lt;id&gt;551196&lt;\/id&gt;\r\n\t\t\t\t&lt;displayName&gt;XFP sandbox property&lt;\/displayName&gt;\r\n\t\t\t\t&lt;networkCode&gt;1122334455&lt;\/networkCode&gt;\r\n\t\t\t\t&lt;propertyCode&gt;ca-pub-2799179143725683&lt;\/propertyCode&gt;\r\n\t\t\t\t&lt;timeZone&gt;America\/New_York&lt;\/timeZone&gt;\r\n\t\t\t\t&lt;currencyCode&gt;USD&lt;\/currencyCode&gt;\r\n\t\t\t\t&lt;effectiveRootAdUnitId&gt;237897516&lt;\/effectiveRootAdUnitId&gt;\r\n\t\t\t\t&lt;isTest&gt;true&lt;\/isTest&gt;\r\n\t\t\t&lt;\/rval&gt;\r\n\t\t&lt;\/getCurrentNetworkResponse&gt;\r\n\t&lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>If you want to save single Element Value from Response into SSIS Variable then perform following steps (example of how to get just effectiveRootAdUnitId from above response)<\/p>\n<ol>\n<li>On REST API Task &gt; Go to Response Tab &gt; Select Response Content Type = XML<\/li>\n<li>Enter following expression in the XPath filter\n<pre class=\"\">\/\/*[local-name() = 'effectiveRootAdUnitId']<\/pre>\n<\/li>\n<li>Check Save response content option<\/li>\n<li>Select Variable from Dropdown &#8211; Click New Variable &gt; Name it RootAdUnitId.<\/li>\n<li>Click Test Request Button to test&#8230;. In the content textbox you will now see only Numeric value extracted by Filter<\/li>\n<\/ol>\n<div id=\"attachment_1050\" style=\"width: 832px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-save-response-into-variable-xpath-jsonpath-filter-extract-value.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1050\" class=\"size-full wp-image-1050\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-save-response-into-variable-xpath-jsonpath-filter-extract-value.png\" alt=\"SSIS REST Api Task - How to extract single vale from response and save to SSIS variable\" width=\"822\" height=\"616\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-save-response-into-variable-xpath-jsonpath-filter-extract-value.png 822w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-save-response-into-variable-xpath-jsonpath-filter-extract-value-300x225.png 300w\" sizes=\"(max-width: 822px) 100vw, 822px\" \/><\/a><p id=\"caption-attachment-1050\" class=\"wp-caption-text\">SSIS REST Api Task &#8211; How to extract single vale from response and save to SSIS variable<\/p><\/div>\n<p>Once you know Parent ID for your AdUnit now lets look at how to create Ad Units by calling <a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/InventoryService#createAdUnits\" target=\"_blank\" rel=\"noopener\">createAdUnits<\/a><\/p>\n<h3>API createAdUnits &#8211; Request<\/h3>\n<p>URL:\u00a0https:\/\/ads.google.com\/apis\/ads\/publisher\/v201702\/InventoryService<br \/>\nBody (see below):<\/p>\n<pre class=\"lang:default decode:true\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns:xsd=\"http:\/\/www.w3.org\/2001\/XMLSchema\"&gt;\r\n\t&lt;soap:Header&gt;\r\n\t\t&lt;RequestHeader xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;\r\n\t\t\t&lt;networkCode xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;1122334455&lt;\/networkCode&gt;\r\n\t\t\t&lt;applicationName xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;ZappySysApp&lt;\/applicationName&gt;\r\n\t\t&lt;\/RequestHeader&gt;\r\n\t&lt;\/soap:Header&gt;\r\n\t&lt;soap:Body&gt;\r\n\t\t&lt;createAdUnits xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;\r\n\t\t\t&lt;adUnits&gt;\r\n\t\t\t\t&lt;parentId&gt;237897516&lt;\/parentId&gt;\r\n\t\t\t\t&lt;name&gt;Ad_Unit_0&lt;\/name&gt;\r\n\t\t\t\t&lt;description&gt;Ad unit description #0.&lt;\/description&gt;\r\n\t\t\t\t&lt;targetWindow&gt;BLANK&lt;\/targetWindow&gt;\r\n\t\t\t\t&lt;adUnitSizes&gt;\r\n\t\t\t\t\t&lt;size&gt;\r\n\t\t\t\t\t\t&lt;width&gt;300&lt;\/width&gt;\r\n\t\t\t\t\t\t&lt;height&gt;250&lt;\/height&gt;\r\n\t\t\t\t\t&lt;\/size&gt;\r\n\t\t\t\t\t&lt;environmentType&gt;BROWSER&lt;\/environmentType&gt;\r\n\t\t\t\t&lt;\/adUnitSizes&gt;\r\n\t\t\t&lt;\/adUnits&gt;\r\n\t\t\t&lt;adUnits&gt;\r\n\t\t\t\t&lt;parentId&gt;237897516&lt;\/parentId&gt;\r\n\t\t\t\t&lt;name&gt;Ad_Unit_1&lt;\/name&gt;\r\n\t\t\t\t&lt;description&gt;Ad unit description #1.&lt;\/description&gt;\r\n\t\t\t\t&lt;targetWindow&gt;BLANK&lt;\/targetWindow&gt;\r\n\t\t\t\t&lt;adUnitSizes&gt;\r\n\t\t\t\t\t&lt;size&gt;\r\n\t\t\t\t\t\t&lt;width&gt;300&lt;\/width&gt;\r\n\t\t\t\t\t\t&lt;height&gt;250&lt;\/height&gt;\r\n\t\t\t\t\t&lt;\/size&gt;\r\n\t\t\t\t\t&lt;environmentType&gt;BROWSER&lt;\/environmentType&gt;\r\n\t\t\t\t&lt;\/adUnitSizes&gt;\r\n\t\t\t&lt;\/adUnits&gt;\t\t\t\r\n\t\t&lt;\/createAdUnits&gt;\r\n\t&lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;<\/pre>\n<h3>API createAdUnits &#8211; Response<\/h3>\n<pre class=\"lang:default decode:true\">&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\"&gt;\r\n\t&lt;soap:Header&gt;\r\n\t\t&lt;ResponseHeader xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;\r\n\t\t\t&lt;requestId&gt;b244d7ba9b65e96fc42b849a7bfb16e4&lt;\/requestId&gt;\r\n\t\t\t&lt;responseTime&gt;331&lt;\/responseTime&gt;\r\n\t\t&lt;\/ResponseHeader&gt;\r\n\t&lt;\/soap:Header&gt;\r\n\t&lt;soap:Body&gt;\r\n\t\t&lt;createAdUnitsResponse xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201608\"&gt;\r\n\t\t\t&lt;rval&gt;\r\n\t\t\t\t&lt;id&gt;252312396&lt;\/id&gt;\r\n\t\t\t\t&lt;parentId&gt;237897516&lt;\/parentId&gt;\r\n\t\t\t\t&lt;hasChildren&gt;false&lt;\/hasChildren&gt;\r\n\t\t\t\t&lt;parentPath&gt;\r\n\t\t\t\t\t&lt;id&gt;237897516&lt;\/id&gt;\r\n\t\t\t\t\t&lt;name&gt;ca-pub-2799179143725683&lt;\/name&gt;\r\n\t\t\t\t\t&lt;adUnitCode&gt;ca-pub-2799179143725683&lt;\/adUnitCode&gt;\r\n\t\t\t\t&lt;\/parentPath&gt;\r\n\t\t\t\t&lt;name&gt;Ad_Unit_0&lt;\/name&gt;\r\n\t\t\t\t&lt;description&gt;Ad unit description#0.&lt;\/description&gt;\r\n\t\t\t\t&lt;targetWindow&gt;BLANK&lt;\/targetWindow&gt;\r\n\t\t\t\t&lt;status&gt;ACTIVE&lt;\/status&gt;\r\n\t\t\t\t&lt;adUnitCode&gt;253312396&lt;\/adUnitCode&gt;\r\n\t\t\t\t&lt;adUnitSizes&gt;\r\n\t\t\t\t\t&lt;size&gt;\r\n\t\t\t\t\t\t&lt;width&gt;300&lt;\/width&gt;\r\n\t\t\t\t\t\t&lt;height&gt;250&lt;\/height&gt;\r\n\t\t\t\t\t\t&lt;isAspectRatio&gt;false&lt;\/isAspectRatio&gt;\r\n\t\t\t\t\t&lt;\/size&gt;\r\n\t\t\t\t\t&lt;environmentType&gt;BROWSER&lt;\/environmentType&gt;\r\n\t\t\t\t\t&lt;fullDisplayString&gt;300x250&lt;\/fullDisplayString&gt;\r\n\t\t\t\t&lt;\/adUnitSizes&gt;\r\n\t\t\t\t&lt;mobilePlatform&gt;SITE&lt;\/mobilePlatform&gt;\r\n\t\t\t\t&lt;explicitlyTargeted&gt;false&lt;\/explicitlyTargeted&gt;\r\n\t\t\t\t&lt;inheritedAdSenseSettings&gt;\r\n\t\t\t\t\t&lt;value&gt;\r\n\t\t\t\t\t\t&lt;adSenseEnabled&gt;true&lt;\/adSenseEnabled&gt;\r\n\t\t\t\t\t\t&lt;borderColor&gt;FFFFFF&lt;\/borderColor&gt;\r\n\t\t\t\t\t\t&lt;titleColor&gt;0000FF&lt;\/titleColor&gt;\r\n\t\t\t\t\t\t&lt;backgroundColor&gt;FFFFFF&lt;\/backgroundColor&gt;\r\n\t\t\t\t\t\t&lt;textColor&gt;000000&lt;\/textColor&gt;\r\n\t\t\t\t\t\t&lt;urlColor&gt;008000&lt;\/urlColor&gt;\r\n\t\t\t\t\t\t&lt;adType&gt;TEXT_AND_IMAGE&lt;\/adType&gt;\r\n\t\t\t\t\t\t&lt;borderStyle&gt;DEFAULT&lt;\/borderStyle&gt;\r\n\t\t\t\t\t\t&lt;fontFamily&gt;DEFAULT&lt;\/fontFamily&gt;\r\n\t\t\t\t\t\t&lt;fontSize&gt;DEFAULT&lt;\/fontSize&gt;\r\n\t\t\t\t\t&lt;\/value&gt;\r\n\t\t\t\t&lt;\/inheritedAdSenseSettings&gt;\r\n\t\t\t\t&lt;lastModifiedDateTime&gt;\r\n\t\t\t\t\t&lt;date&gt;\r\n\t\t\t\t\t\t&lt;year&gt;2017&lt;\/year&gt;\r\n\t\t\t\t\t\t&lt;month&gt;2&lt;\/month&gt;\r\n\t\t\t\t\t\t&lt;day&gt;27&lt;\/day&gt;\r\n\t\t\t\t\t&lt;\/date&gt;\r\n\t\t\t\t\t&lt;hour&gt;7&lt;\/hour&gt;\r\n\t\t\t\t\t&lt;minute&gt;23&lt;\/minute&gt;\r\n\t\t\t\t\t&lt;second&gt;32&lt;\/second&gt;\r\n\t\t\t\t\t&lt;timeZoneID&gt;PST8PDT&lt;\/timeZoneID&gt;\r\n\t\t\t\t&lt;\/lastModifiedDateTime&gt;\r\n\t\t\t\t&lt;smartSizeMode&gt;NONE&lt;\/smartSizeMode&gt;\r\n\t\t\t\t&lt;isSharedByDistributor&gt;false&lt;\/isSharedByDistributor&gt;\r\n\t\t\t\t&lt;isSetTopBoxEnabled&gt;false&lt;\/isSetTopBoxEnabled&gt;\r\n\t\t\t&lt;\/rval&gt;\r\n\t\t\t&lt;rval&gt;\r\n\t\t\t\t&lt;id&gt;252312516&lt;\/id&gt;\r\n\t\t\t\t&lt;parentId&gt;237897516&lt;\/parentId&gt;\r\n\t\t\t\t&lt;hasChildren&gt;false&lt;\/hasChildren&gt;\r\n\t\t\t\t&lt;parentPath&gt;\r\n\t\t\t\t\t&lt;id&gt;237897516&lt;\/id&gt;\r\n\t\t\t\t\t&lt;name&gt;ca-pub-2799179143725683&lt;\/name&gt;\r\n\t\t\t\t\t&lt;adUnitCode&gt;ca-pub-2799179143725683&lt;\/adUnitCode&gt;\r\n\t\t\t\t&lt;\/parentPath&gt;\r\n\t\t\t\t&lt;name&gt;Ad_Unit_1&lt;\/name&gt;\r\n\t\t\t\t&lt;description&gt;Ad unit description#2.&lt;\/description&gt;\r\n\t\t\t\t&lt;targetWindow&gt;BLANK&lt;\/targetWindow&gt;\r\n\t\t\t\t&lt;status&gt;ACTIVE&lt;\/status&gt;\r\n\t\t\t\t&lt;adUnitCode&gt;253312516&lt;\/adUnitCode&gt;\r\n\t\t\t\t&lt;adUnitSizes&gt;\r\n\t\t\t\t\t&lt;size&gt;\r\n\t\t\t\t\t\t&lt;width&gt;300&lt;\/width&gt;\r\n\t\t\t\t\t\t&lt;height&gt;250&lt;\/height&gt;\r\n\t\t\t\t\t\t&lt;isAspectRatio&gt;false&lt;\/isAspectRatio&gt;\r\n\t\t\t\t\t&lt;\/size&gt;\r\n\t\t\t\t\t&lt;environmentType&gt;BROWSER&lt;\/environmentType&gt;\r\n\t\t\t\t\t&lt;fullDisplayString&gt;300x250&lt;\/fullDisplayString&gt;\r\n\t\t\t\t&lt;\/adUnitSizes&gt;\r\n\t\t\t\t&lt;mobilePlatform&gt;SITE&lt;\/mobilePlatform&gt;\r\n\t\t\t\t&lt;explicitlyTargeted&gt;false&lt;\/explicitlyTargeted&gt;\r\n\t\t\t\t&lt;inheritedAdSenseSettings&gt;\r\n\t\t\t\t\t&lt;value&gt;\r\n\t\t\t\t\t\t&lt;adSenseEnabled&gt;true&lt;\/adSenseEnabled&gt;\r\n\t\t\t\t\t\t&lt;borderColor&gt;FFFFFF&lt;\/borderColor&gt;\r\n\t\t\t\t\t\t&lt;titleColor&gt;0000FF&lt;\/titleColor&gt;\r\n\t\t\t\t\t\t&lt;backgroundColor&gt;FFFFFF&lt;\/backgroundColor&gt;\r\n\t\t\t\t\t\t&lt;textColor&gt;000000&lt;\/textColor&gt;\r\n\t\t\t\t\t\t&lt;urlColor&gt;008000&lt;\/urlColor&gt;\r\n\t\t\t\t\t\t&lt;adType&gt;TEXT_AND_IMAGE&lt;\/adType&gt;\r\n\t\t\t\t\t\t&lt;borderStyle&gt;DEFAULT&lt;\/borderStyle&gt;\r\n\t\t\t\t\t\t&lt;fontFamily&gt;DEFAULT&lt;\/fontFamily&gt;\r\n\t\t\t\t\t\t&lt;fontSize&gt;DEFAULT&lt;\/fontSize&gt;\r\n\t\t\t\t\t&lt;\/value&gt;\r\n\t\t\t\t&lt;\/inheritedAdSenseSettings&gt;\r\n\t\t\t\t&lt;lastModifiedDateTime&gt;\r\n\t\t\t\t\t&lt;date&gt;\r\n\t\t\t\t\t\t&lt;year&gt;2017&lt;\/year&gt;\r\n\t\t\t\t\t\t&lt;month&gt;2&lt;\/month&gt;\r\n\t\t\t\t\t\t&lt;day&gt;27&lt;\/day&gt;\r\n\t\t\t\t\t&lt;\/date&gt;\r\n\t\t\t\t\t&lt;hour&gt;7&lt;\/hour&gt;\r\n\t\t\t\t\t&lt;minute&gt;23&lt;\/minute&gt;\r\n\t\t\t\t\t&lt;second&gt;32&lt;\/second&gt;\r\n\t\t\t\t\t&lt;timeZoneID&gt;PST8PDT&lt;\/timeZoneID&gt;\r\n\t\t\t\t&lt;\/lastModifiedDateTime&gt;\r\n\t\t\t\t&lt;smartSizeMode&gt;NONE&lt;\/smartSizeMode&gt;\r\n\t\t\t\t&lt;isSharedByDistributor&gt;false&lt;\/isSharedByDistributor&gt;\r\n\t\t\t\t&lt;isSetTopBoxEnabled&gt;false&lt;\/isSetTopBoxEnabled&gt;\r\n\t\t\t&lt;\/rval&gt;\r\n\t\t\t\t&lt;id&gt;252312876&lt;\/id&gt;\r\n\t\t\t\t&lt;parentId&gt;237897516&lt;\/parentId&gt;\r\n\t\t\t\t&lt;hasChildren&gt;false&lt;\/hasChildren&gt;\r\n\t\t\t\t&lt;parentPath&gt;\r\n\t\t\t\t\t&lt;id&gt;237897516&lt;\/id&gt;\r\n\t\t\t\t\t&lt;name&gt;ca-pub-2799179143725683&lt;\/name&gt;\r\n\t\t\t\t\t&lt;adUnitCode&gt;ca-pub-2799179143725683&lt;\/adUnitCode&gt;\r\n\t\t\t\t&lt;\/parentPath&gt;\r\n\t\t\t\t&lt;name&gt;Ad_Unit_4&lt;\/name&gt;\r\n\t\t\t\t&lt;description&gt;Ad unit description.&lt;\/description&gt;\r\n\t\t\t\t&lt;targetWindow&gt;BLANK&lt;\/targetWindow&gt;\r\n\t\t\t\t&lt;status&gt;ACTIVE&lt;\/status&gt;\r\n\t\t\t\t&lt;adUnitCode&gt;253312876&lt;\/adUnitCode&gt;\r\n\t\t\t\t&lt;adUnitSizes&gt;\r\n\t\t\t\t\t&lt;size&gt;\r\n\t\t\t\t\t\t&lt;width&gt;300&lt;\/width&gt;\r\n\t\t\t\t\t\t&lt;height&gt;250&lt;\/height&gt;\r\n\t\t\t\t\t\t&lt;isAspectRatio&gt;false&lt;\/isAspectRatio&gt;\r\n\t\t\t\t\t&lt;\/size&gt;\r\n\t\t\t\t\t&lt;environmentType&gt;BROWSER&lt;\/environmentType&gt;\r\n\t\t\t\t\t&lt;fullDisplayString&gt;300x250&lt;\/fullDisplayString&gt;\r\n\t\t\t\t&lt;\/adUnitSizes&gt;\r\n\t\t\t\t&lt;mobilePlatform&gt;SITE&lt;\/mobilePlatform&gt;\r\n\t\t\t\t&lt;explicitlyTargeted&gt;false&lt;\/explicitlyTargeted&gt;\r\n\t\t\t\t&lt;inheritedAdSenseSettings&gt;\r\n\t\t\t\t\t&lt;value&gt;\r\n\t\t\t\t\t\t&lt;adSenseEnabled&gt;true&lt;\/adSenseEnabled&gt;\r\n\t\t\t\t\t\t&lt;borderColor&gt;FFFFFF&lt;\/borderColor&gt;\r\n\t\t\t\t\t\t&lt;titleColor&gt;0000FF&lt;\/titleColor&gt;\r\n\t\t\t\t\t\t&lt;backgroundColor&gt;FFFFFF&lt;\/backgroundColor&gt;\r\n\t\t\t\t\t\t&lt;textColor&gt;000000&lt;\/textColor&gt;\r\n\t\t\t\t\t\t&lt;urlColor&gt;008000&lt;\/urlColor&gt;\r\n\t\t\t\t\t\t&lt;adType&gt;TEXT_AND_IMAGE&lt;\/adType&gt;\r\n\t\t\t\t\t\t&lt;borderStyle&gt;DEFAULT&lt;\/borderStyle&gt;\r\n\t\t\t\t\t\t&lt;fontFamily&gt;DEFAULT&lt;\/fontFamily&gt;\r\n\t\t\t\t\t\t&lt;fontSize&gt;DEFAULT&lt;\/fontSize&gt;\r\n\t\t\t\t\t&lt;\/value&gt;\r\n\t\t\t\t&lt;\/inheritedAdSenseSettings&gt;\r\n\t\t\t\t&lt;lastModifiedDateTime&gt;\r\n\t\t\t\t\t&lt;date&gt;\r\n\t\t\t\t\t\t&lt;year&gt;2017&lt;\/year&gt;\r\n\t\t\t\t\t\t&lt;month&gt;2&lt;\/month&gt;\r\n\t\t\t\t\t\t&lt;day&gt;27&lt;\/day&gt;\r\n\t\t\t\t\t&lt;\/date&gt;\r\n\t\t\t\t\t&lt;hour&gt;7&lt;\/hour&gt;\r\n\t\t\t\t\t&lt;minute&gt;23&lt;\/minute&gt;\r\n\t\t\t\t\t&lt;second&gt;32&lt;\/second&gt;\r\n\t\t\t\t\t&lt;timeZoneID&gt;PST8PDT&lt;\/timeZoneID&gt;\r\n\t\t\t\t&lt;\/lastModifiedDateTime&gt;\r\n\t\t\t\t&lt;smartSizeMode&gt;NONE&lt;\/smartSizeMode&gt;\r\n\t\t\t\t&lt;isSharedByDistributor&gt;false&lt;\/isSharedByDistributor&gt;\r\n\t\t\t\t&lt;isSetTopBoxEnabled&gt;false&lt;\/isSetTopBoxEnabled&gt;\r\n\t\t\t&lt;\/rval&gt;\r\n\t\t&lt;\/createAdUnitsResponse&gt;\r\n\t&lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;<\/pre>\n<h2>Loading Google DoubleClick data into SQL Server Table<\/h2>\n<p>So far we saw how to make simple DFP API calls without doing any parsing. Now lets look at how to use <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-xml-source\/\" target=\"_blank\" rel=\"noopener\">SSIS XML Source<\/a> which not only make API calls but it will parse XML Response into rows and columns which can be loaded into target database such as SQL Server, Oracle, MySQL or even Flat File. XML Source also supports pagination so if you have many records it will automatically loop through all response untill all records are fetched.<\/p>\n<h3>Step-By-Step &#8211; Using XML Source to read Google DFP data (Parse into rows and columns)<\/h3>\n<ol>\n<li>Assuming you have tested your first DFP API Call (Explianed in the beginning of this article). You must have OAuth connection tested for API call.<\/li>\n<li>Drag new Data flow task from SSIS Toolbox<\/li>\n<li>Inside Data flow designer drag and drop <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-xml-source\/\" target=\"_blank\" rel=\"noopener\">ZS XML Source<\/a>\u00a0from toolbox<\/li>\n<li>Double click XML Source to configure.<\/li>\n<li>Set URL as below<br \/>\nhttps:\/\/ads.google.com\/apis\/ads\/publisher\/v201702\/InventoryService<\/li>\n<li>Check Use credentials option and from Drop down select OAuth connection manager (created in previous section)<\/li>\n<li>Select\u00a0Method = POST,<\/li>\n<li>Select Request Content Type = XML (text\/xml)<\/li>\n<li>Enter Body as below (Click edit button).\n<pre class=\"lang:xhtml decode:true \">&lt;soapenv:Envelope xmlns:soapenv=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:v20=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n   &lt;soapenv:Header&gt;\r\n      &lt;v20:RequestHeader&gt;\r\n         &lt;v20:networkCode&gt;238897396&lt;\/v20:networkCode&gt;\r\n         &lt;v20:applicationName&gt;ZappySysApp&lt;\/v20:applicationName&gt;\r\n      &lt;\/v20:RequestHeader&gt;\r\n   &lt;\/soapenv:Header&gt;\r\n   &lt;soapenv:Body&gt;\r\n      &lt;v20:getAdUnitsByStatement&gt;\r\n         &lt;v20:filterStatement&gt;\r\n            &lt;v20:query&gt;WHERE Status='ACTIVE'&lt;\/v20:query&gt;\r\n         &lt;\/v20:filterStatement&gt;\r\n      &lt;\/v20:getAdUnitsByStatement&gt;\r\n   &lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\n<p>Notice that in above we calling\u00a0<a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/InventoryService#getAdUnitsByStatement\" target=\"_blank\" rel=\"noopener\">getAdUnitsByStatement <\/a>API to\u00a0fetch all Ad Units which are Active. Here is<a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/InventoryService.Statement\" target=\"_blank\" rel=\"noopener\"> more information about Query Syntax<\/a> for any API call getXXXXXXByStaement<\/li>\n<li>Now click on <strong>Select Filter<\/strong> button and select results node and click OK. If prompted add array to list.\n<div id=\"attachment_1054\" style=\"width: 965px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-get-data-from-google-dfp-doubleclick-api-set-filter.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1054\" class=\"size-full wp-image-1054\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-get-data-from-google-dfp-doubleclick-api-set-filter.png\" alt=\"SSIS XML Source - Get data from Google DFP API using OAuth (Configure URL, Body and Filter)\" width=\"955\" height=\"750\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-get-data-from-google-dfp-doubleclick-api-set-filter.png 955w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-get-data-from-google-dfp-doubleclick-api-set-filter-300x236.png 300w\" sizes=\"(max-width: 955px) 100vw, 955px\" \/><\/a><p id=\"caption-attachment-1054\" class=\"wp-caption-text\">SSIS XML Source &#8211; Get data from Google DFP API using OAuth (Configure URL, Body and Filter)<\/p><\/div><\/li>\n<li>Click Preview to see data. Click Columns tab to review data types (Auto detected). If you wish to change length or datatype then edit there and check Lock option (Last column)\n<div id=\"attachment_1055\" style=\"width: 669px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-preview-google-dfp-data.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1055\" class=\"size-full wp-image-1055\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-preview-google-dfp-data.png\" alt=\"SSIS XML Source - Preview Response for Google DoubleClick API Call - Parse into Rows\/Columns\" width=\"659\" height=\"272\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-preview-google-dfp-data.png 659w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-preview-google-dfp-data-300x124.png 300w\" sizes=\"(max-width: 659px) 100vw, 659px\" \/><\/a><p id=\"caption-attachment-1055\" class=\"wp-caption-text\">SSIS XML Source &#8211; Preview Response for Google DoubleClick API Call &#8211; Parse into Rows\/Columns<\/p><\/div><\/li>\n<li>Click OK to save UI<\/li>\n<li>Connect XML Source to same target (e.g. OLEDB Destination &#8211; SQL Server Connection)<\/li>\n<li>Run data flow\n<div id=\"attachment_1056\" style=\"width: 602px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-get-data-from-google-dfp-doubleclick-load-into-sql-server.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1056\" class=\"size-full wp-image-1056\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-get-data-from-google-dfp-doubleclick-load-into-sql-server.png\" alt=\"SSIS Execution - Read from Google DFP and load into SQL Server Table\" width=\"592\" height=\"358\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-get-data-from-google-dfp-doubleclick-load-into-sql-server.png 592w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-get-data-from-google-dfp-doubleclick-load-into-sql-server-300x181.png 300w\" sizes=\"(max-width: 592px) 100vw, 592px\" \/><\/a><p id=\"caption-attachment-1056\" class=\"wp-caption-text\">SSIS Execution &#8211; Read from Google DFP and load into SQL Server Table<\/p><\/div><\/li>\n<\/ol>\n<h3>Configure Pagination for Google DFP API \/ PQL Query result<\/h3>\n<p>If you have large dataset to read from DoubleClick API ( when calling API such as\u00a0<strong>getxxxxxxByStatement<\/strong>) then we recommend to supply LIMIT and OFFSET clause in your <a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/pqlreference\" target=\"_blank\" rel=\"noopener\">PQL query<\/a>.<\/p>\n<p>For example if you have 2000 ad units and you want to limit response size by maximum 300 rows then your query can be like below<\/p>\n<pre class=\"lang:default decode:true \">--For first request (returns results 1-300)\r\nWHERE Status='ACTIVE' LIMIT 300 OFFSET 0\r\n\r\n--For second request (returns results 301-600)\r\nWHERE Status='ACTIVE' LIMIT 300 OFFSET 300\r\n\r\n--For third request  (returns results 601-900)\r\nWHERE Status='ACTIVE' LIMIT 300 OFFSET 600\r\n\r\n........<\/pre>\n<p>This looping logic can be complex to implement if you do manually. But no worry if you are using <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/ssis-xml-source\/\" target=\"_blank\" rel=\"noopener\">SSIS XML Source<\/a>. It comes with many pagination options (<a href=\"\/\/zappysys.com\/blog\/ssis-rest-api-looping-until-no-more-pages-found\/\" target=\"_blank\" rel=\"noopener\">Click here to read more about pagination<\/a>)<\/p>\n<p>See below screenshot how to configure Pagination options for Google DoubleClick API. Basically\u00a0two places you have to change. Inside body you have to set placeholder and change few settings on Pagination Tab.<\/p>\n<div id=\"attachment_1052\" style=\"width: 726px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-paginate-large-resultset-google-dfp-api-doubleclick-pql-query-paging.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1052\" class=\"size-full wp-image-1052\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-paginate-large-resultset-google-dfp-api-doubleclick-pql-query-paging.png\" alt=\"SSIS XML Source - Configure Pagination for Google DoubleClick API data fetch - PQL LIMIT and OFFSET clause for Google DFP API\" width=\"716\" height=\"608\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-paginate-large-resultset-google-dfp-api-doubleclick-pql-query-paging.png 716w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-paginate-large-resultset-google-dfp-api-doubleclick-pql-query-paging-300x255.png 300w\" sizes=\"(max-width: 716px) 100vw, 716px\" \/><\/a><p id=\"caption-attachment-1052\" class=\"wp-caption-text\">SSIS XML Source &#8211; Configure Pagination for Google DoubleClick API data fetch &#8211; PQL LIMIT and OFFSET clause for Google DFP API<\/p><\/div>\n<div id=\"attachment_1053\" style=\"width: 715px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-configure-pagination-using-post-data-method-call-google-dfp-api-doubleclick.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1053\" class=\"size-full wp-image-1053\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-configure-pagination-using-post-data-method-call-google-dfp-api-doubleclick.png\" alt=\"SSIS XML Source - Configure Pagination for Google DoubleClick API data fetch - Set Pagination Mode\" width=\"705\" height=\"510\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-configure-pagination-using-post-data-method-call-google-dfp-api-doubleclick.png 705w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-xml-source-configure-pagination-using-post-data-method-call-google-dfp-api-doubleclick-300x217.png 300w\" sizes=\"(max-width: 705px) 100vw, 705px\" \/><\/a><p id=\"caption-attachment-1053\" class=\"wp-caption-text\">SSIS XML Source &#8211; Configure Pagination for Google DoubleClick API data fetch &#8211; Set Pagination Mode<\/p><\/div>\n<h2>Create CSV Report File and Download in GZip format (*.gz)<\/h2>\n<p>Sometime you have to download large amount of data (Possibly millions of rows) in that case Bulk approach would be better. <a href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/ReportService\" target=\"_blank\" rel=\"noopener\">DFP\u00a0ReportService API<\/a>\u00a0allows to call following APIs which can be used to produce CSV report file in *.gz format and then you can download it using REST API Task.<\/p>\n<p>Below are high level steps you have to perform to produce report file and download it.<\/p>\n<ul>\n<li>Create the ReportJob\u00a0by invoking <a class=\"codelink\" href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/ReportService.html#runReportJob\">runReportJob<\/a>\u00a0command .<\/li>\n<li>Poll the ReportJob object using <a class=\"codelink\" href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/ReportService.html#getReportJob\">ReportService.getReportJob<\/a>\u00a0(This is required because file is not available right away) .<\/li>\n<li>Continue to poll the ReportJob object until the <a class=\"codelink\" href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/ReportService.ReportJob.html#reportJobStatus\">reportJobStatus<\/a> field is equal to\u00a0<a class=\"codelink\" href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/ReportService.ReportJobStatus.html#COMPLETED\">COMPLETED<\/a> or <a class=\"codelink\" href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/ReportService.ReportJobStatus.html#FAILED\">FAILED<\/a>.<\/li>\n<li>If successful, fetch the URL for downloading the report by invoking <a class=\"codelink\" href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/ReportService.html#getReportDownloadURL\">getReportDownloadURL<\/a>.<\/li>\n<\/ul>\n<p>Here is the sample SSIS Package to Perform this Action.<\/p>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/Google-DoubleClick-API-SSIS-DEMO.zip\" target=\"_blank\" rel=\"noopener\">Click here to DFP API download Sample for SSIS<\/a> SSIS Package (SSIS 2012, 2014, 2016)<\/p>\n<p>See below screenshot how to generate Google DFP Report File and download \/ extract (Unzip) using Drag and Drop SSIS workflow.<\/p>\n<div id=\"attachment_1179\" style=\"width: 837px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-dfp-api-doubleclick-soap-create-report-download-file-csv-gzip-format.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1179\" class=\"size-full wp-image-1179\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-dfp-api-doubleclick-soap-create-report-download-file-csv-gzip-format.png\" alt=\"Create Google DFP Report File (CSV \/ Gzip) and Download Using SSIS (Example of ReportService functions runReportJob, getReportJob and .getReportDownloadURL)\" width=\"827\" height=\"739\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-dfp-api-doubleclick-soap-create-report-download-file-csv-gzip-format.png 827w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-dfp-api-doubleclick-soap-create-report-download-file-csv-gzip-format-300x268.png 300w\" sizes=\"(max-width: 827px) 100vw, 827px\" \/><\/a><p id=\"caption-attachment-1179\" class=\"wp-caption-text\">Create Google DFP Report File (CSV \/ Gzip) and Download Using SSIS (Example of ReportService functions runReportJob, getReportJob and .getReportDownloadURL)<\/p><\/div>\n<h3>Call\u00a0runReportJob (Start DFP Report JOB)<\/h3>\n<p>Very first step to produce DFP Report file is call\u00a0<a class=\"codelink\" href=\"https:\/\/developers.google.com\/doubleclick-publishers\/docs\/reference\/v201702\/ReportService.html#runReportJob\">ReportService &gt;&gt; runReportJob<\/a>\u00a0API. See below Command.<\/p>\n<p><strong>Extract Single XML Node Value from SOAP API Response using XPATH<\/strong><\/p>\n<p>Once you get response you can extract id of your JOB using XPAth Expression (See REST API Task response settings tab. Change Format to XML and type following XPATH expression. This will look for &lt;id&gt;111111&lt;\/id&gt; node anywhere in SOAP response XML and extract value (i.e. 111111 ) \u00a0.. For screenshot see next section<\/p>\n<pre class=\"\">\/\/*[local-name() = 'id']<\/pre>\n<p><strong>Request<\/strong><\/p>\n<pre class=\"lang:default decode:true\">POST https:\/\/ads.google.com\/apis\/ads\/publisher\/v201702\/ReportService HTTP\/1.1\r\nAuthorization: Bearer ya29.xxxxxxxxxxxxxxxxxxxxxAKqG89gM-TpReRXO\r\nUser-Agent: ZappySysApp\/1.0.2017.10531\r\nContent-Type: text\/xml\r\nAccept: *\/*\r\nCache-Control: no-cache\r\nHost: ads.google.com\r\nContent-Length: 1018\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\n\r\n&lt;soapenv:Envelope xmlns:soapenv=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:v20=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t&lt;soapenv:Header&gt;\r\n\t\t&lt;v20:RequestHeader&gt;\r\n\t\t\t&lt;v20:networkCode&gt;238897396&lt;\/v20:networkCode&gt;\r\n\t\t\t&lt;v20:applicationName&gt;ZappySysApp&lt;\/v20:applicationName&gt;\r\n\t\t&lt;\/v20:RequestHeader&gt;\r\n\t&lt;\/soapenv:Header&gt;\r\n\t&lt;soapenv:Body&gt;\r\n\t\t&lt;v20:runReportJob&gt;\r\n\t\t\t&lt;v20:reportJob&gt;\r\n\t\t\t\t&lt;v20:reportQuery&gt;\r\n\t\t\t\t\t&lt;v20:dimensions&gt;DATE&lt;\/v20:dimensions&gt;\r\n\t\t\t\t\t&lt;v20:dimensions&gt;LINE_ITEM_ID&lt;\/v20:dimensions&gt;\r\n\t\t\t\t\t&lt;v20:dimensions&gt;LINE_ITEM_NAME&lt;\/v20:dimensions&gt;\r\n\t\t\t\t\t&lt;v20:dimensions&gt;AD_UNIT_NAME&lt;\/v20:dimensions&gt;\r\n\t\t\t\t\t&lt;v20:columns&gt;AD_SERVER_IMPRESSIONS&lt;\/v20:columns&gt;\r\n\t\t\t\t\t&lt;v20:columns&gt;AD_SERVER_CLICKS&lt;\/v20:columns&gt;\r\n\t\t\t\t\t&lt;v20:dimensionAttributes&gt;LINE_ITEM_COST_TYPE&lt;\/v20:dimensionAttributes&gt;\r\n\t\t\t\t\t&lt;v20:dimensionAttributes&gt;LINE_ITEM_GOAL_QUANTITY&lt;\/v20:dimensionAttributes&gt;\r\n\t\t\t\t\t&lt;v20:dateRangeType&gt;LAST_MONTH&lt;\/v20:dateRangeType&gt;\r\n\t\t\t\t&lt;\/v20:reportQuery&gt;\r\n\t\t\t&lt;\/v20:reportJob&gt;\r\n\t\t&lt;\/v20:runReportJob&gt;\r\n\t&lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\n<p><strong>Response<\/strong><\/p>\n<pre class=\"lang:default decode:true\">HTTP\/1.1 200 OK\r\nContent-Type: text\/xml; charset=UTF-8\r\nDate: Fri, 02 Jun 2017 21:23:41 GMT\r\nExpires: Fri, 02 Jun 2017 21:23:41 GMT\r\nCache-Control: private, max-age=0\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: SAMEORIGIN\r\nX-XSS-Protection: 1; mode=block\r\nServer: GSE\r\nAlt-Svc: quic=\":443\"; ma=2592000; v=\"38,37,36,35\"\r\nContent-Length: 999\r\n\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\"&gt;\r\n\t&lt;soap:Header&gt;\r\n\t\t&lt;ResponseHeader xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t\t\t&lt;requestId&gt;f03e7e474fde2a5f9c5d7c9d7eb83923&lt;\/requestId&gt;\r\n\t\t\t&lt;responseTime&gt;846&lt;\/responseTime&gt;\r\n\t\t&lt;\/ResponseHeader&gt;\r\n\t&lt;\/soap:Header&gt;\r\n\t&lt;soap:Body&gt;\r\n\t\t&lt;runReportJobResponse xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t\t\t&lt;rval&gt;\r\n\t\t\t\t&lt;id&gt;10000297829&lt;\/id&gt;\r\n\t\t\t\t&lt;reportQuery&gt;\r\n\t\t\t\t\t&lt;dimensions&gt;DATE&lt;\/dimensions&gt;\r\n\t\t\t\t\t&lt;dimensions&gt;LINE_ITEM_ID&lt;\/dimensions&gt;\r\n\t\t\t\t\t&lt;dimensions&gt;LINE_ITEM_NAME&lt;\/dimensions&gt;\r\n\t\t\t\t\t&lt;dimensions&gt;AD_UNIT_NAME&lt;\/dimensions&gt;\r\n\t\t\t\t\t&lt;adUnitView&gt;TOP_LEVEL&lt;\/adUnitView&gt;\r\n\t\t\t\t\t&lt;columns&gt;AD_SERVER_IMPRESSIONS&lt;\/columns&gt;\r\n\t\t\t\t\t&lt;columns&gt;AD_SERVER_CLICKS&lt;\/columns&gt;\r\n\t\t\t\t\t&lt;dimensionAttributes&gt;LINE_ITEM_COST_TYPE&lt;\/dimensionAttributes&gt;\r\n\t\t\t\t\t&lt;dimensionAttributes&gt;LINE_ITEM_GOAL_QUANTITY&lt;\/dimensionAttributes&gt;\r\n\t\t\t\t\t&lt;dateRangeType&gt;LAST_MONTH&lt;\/dateRangeType&gt;\r\n\t\t\t\t\t&lt;useSalesLocalTimeZone&gt;false&lt;\/useSalesLocalTimeZone&gt;\r\n\t\t\t\t\t&lt;includeZeroSalesRows&gt;false&lt;\/includeZeroSalesRows&gt;\r\n\t\t\t\t&lt;\/reportQuery&gt;\r\n\t\t\t&lt;\/rval&gt;\r\n\t\t&lt;\/runReportJobResponse&gt;\r\n\t&lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;<\/pre>\n<h3>Call getReportJob (Poll JOB Status)<\/h3>\n<p>Second step is to make sure is Report Status check. For large report it make take several seconds or minutes before you can get Download URL (See Next\u00a0Step). If you try to call Next step before Report is ready then you may get error. So better to add Polling logic.<\/p>\n<p><strong>Extract Single XML Node Value from SOAP API Response using XPATH<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>Once you get response you can extract status of your JOB using XPAth Expression (See REST API Task response settings tab. Change Format to XML and type following XPATH expression. This will look for &lt;rval&gt;IN_PROGRESS&lt;\/rval&gt; node anywhere in SOAP response XML and extract value (i.e. IN_PROGRESS )<\/p>\n<pre class=\"\">\/\/*[local-name() = 'rval']<\/pre>\n<div id=\"attachment_1182\" style=\"width: 719px\" class=\"wp-caption alignnone\"><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-xml-response-extract-node-value-xpath-soap-body.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1182\" class=\"size-full wp-image-1182\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-xml-response-extract-node-value-xpath-soap-body.png\" alt=\"Extract Single XML Node Value from SOAP API Response - Use XPATH in SSIS\" width=\"709\" height=\"417\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-xml-response-extract-node-value-xpath-soap-body.png 709w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/ssis-rest-api-xml-response-extract-node-value-xpath-soap-body-300x176.png 300w\" sizes=\"(max-width: 709px) 100vw, 709px\" \/><\/a><p id=\"caption-attachment-1182\" class=\"wp-caption-text\">Extract Single XML Node Value from SOAP API Response &#8211; Use XPATH in SSIS<\/p><\/div>\n<p><strong>Request<\/strong><\/p>\n<pre class=\"lang:default decode:true\">POST https:\/\/ads.google.com\/apis\/ads\/publisher\/v201702\/ReportService HTTP\/1.1\r\nAuthorization: Bearer ya29.xxxxxxxxxxxxxxxxxxXmWqmq\r\nUser-Agent: ZappySysApp\/1.0.2017.10531\r\nContent-Type: text\/xml\r\nAccept: *\/*\r\nCache-Control: no-cache\r\nHost: ads.google.com\r\nContent-Length: 524\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\n\r\n&lt;soapenv:Envelope xmlns:soapenv=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:v20=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n   &lt;soapenv:Header&gt;\r\n      &lt;v20:RequestHeader&gt;\r\n         &lt;v20:networkCode&gt;238897396&lt;\/v20:networkCode&gt;\r\n         &lt;v20:applicationName&gt;ZappySysApp&lt;\/v20:applicationName&gt;\r\n      &lt;\/v20:RequestHeader&gt;\r\n   &lt;\/soapenv:Header&gt;\r\n   &lt;soapenv:Body&gt;\r\n      &lt;v20:getReportJobStatus&gt;\r\n       &lt;v20:reportJobId&gt;10000297829&lt;\/v20:reportJobId&gt;\r\n      &lt;\/v20:getReportJobStatus&gt;\r\n   &lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\n<p><strong>Response<\/strong><\/p>\n<pre class=\"lang:default decode:true\">HTTP\/1.1 200 OK\r\nContent-Type: text\/xml; charset=UTF-8\r\nDate: Fri, 02 Jun 2017 21:23:47 GMT\r\nExpires: Fri, 02 Jun 2017 21:23:47 GMT\r\nCache-Control: private, max-age=0\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: SAMEORIGIN\r\nX-XSS-Protection: 1; mode=block\r\nServer: GSE\r\nAlt-Svc: quic=\":443\"; ma=2592000; v=\"38,37,36,35\"\r\nContent-Length: 451\r\n\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\"&gt;\r\n\t&lt;soap:Header&gt;\r\n\t\t&lt;ResponseHeader xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t\t\t&lt;requestId&gt;d52cb3a3d68af24aec2f9b0284379700&lt;\/requestId&gt;\r\n\t\t\t&lt;responseTime&gt;803&lt;\/responseTime&gt;\r\n\t\t&lt;\/ResponseHeader&gt;\r\n\t&lt;\/soap:Header&gt;\r\n\t&lt;soap:Body&gt;\r\n\t\t&lt;getReportJobStatusResponse xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t\t\t&lt;rval&gt;COMPLETED&lt;\/rval&gt;\r\n\t\t&lt;\/getReportJobStatusResponse&gt;\r\n\t&lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;<\/pre>\n<p>&nbsp;<\/p>\n<h3>Call\u00a0getReportDownloadURL\u00a0(Get Download URL)<\/h3>\n<p>Once you get status = COMPLETED in above API Call (i.e. \u00a0getReportJobStatus) then you ready to call\u00a0getReportDownloadURL \u00a0to fetch URL which you can download.<\/p>\n<p>Here is the API sample Request and Response<\/p>\n<p><strong>Request<\/strong><\/p>\n<pre class=\"lang:default decode:true \">POST https:\/\/ads.google.com\/apis\/ads\/publisher\/v201702\/ReportService HTTP\/1.1\r\nAuthorization: Bearer ya29.xxxxxxxxxxxxxxxxxxBp84ltTNyVRb9hlUEWx\r\nUser-Agent: ZappySysApp\/1.0.2017.10531\r\nContent-Type: text\/xml\r\nAccept: *\/*\r\nCache-Control: no-cache\r\nHost: ads.google.com\r\nContent-Length: 581\r\nExpect: 100-continue\r\nAccept-Encoding: gzip, deflate\r\n\r\n&lt;soapenv:Envelope xmlns:soapenv=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:v20=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n   &lt;soapenv:Header&gt;\r\n      &lt;v20:RequestHeader&gt;\r\n         &lt;v20:networkCode&gt;238897396&lt;\/v20:networkCode&gt;\r\n         &lt;v20:applicationName&gt;ZappySysApp&lt;\/v20:applicationName&gt;\r\n      &lt;\/v20:RequestHeader&gt;\r\n   &lt;\/soapenv:Header&gt;\r\n   &lt;soapenv:Body&gt;\r\n      &lt;v20:getReportDownloadURL&gt;\r\n       &lt;v20:reportJobId&gt;10000297829&lt;\/v20:reportJobId&gt;\r\n       &lt;v20:exportFormat&gt;CSV_DUMP&lt;\/v20:exportFormat&gt;\r\n      &lt;\/v20:getReportDownloadURL&gt;\r\n   &lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Response<\/strong><\/p>\n<pre class=\"lang:default decode:true \">HTTP\/1.1 200 OK\r\nContent-Type: text\/xml; charset=UTF-8\r\nDate: Fri, 02 Jun 2017 21:23:49 GMT\r\nExpires: Fri, 02 Jun 2017 21:23:49 GMT\r\nCache-Control: private, max-age=0\r\nX-Content-Type-Options: nosniff\r\nX-Frame-Options: SAMEORIGIN\r\nX-XSS-Protection: 1; mode=block\r\nServer: GSE\r\nAlt-Svc: quic=\":443\"; ma=2592000; v=\"38,37,36,35\"\r\nContent-Length: 1039\r\n\r\n&lt;soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\"&gt;\r\n\t&lt;soap:Header&gt;\r\n\t\t&lt;ResponseHeader xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t\t\t&lt;requestId&gt;8e5ac0bbeb8e88c180ea442fc5378d99&lt;\/requestId&gt;\r\n\t\t\t&lt;responseTime&gt;1957&lt;\/responseTime&gt;\r\n\t\t&lt;\/ResponseHeader&gt;\r\n\t&lt;\/soap:Header&gt;\r\n\t&lt;soap:Body&gt;\r\n\t\t&lt;getReportDownloadURLResponse xmlns=\"https:\/\/www.google.com\/apis\/ads\/publisher\/v201702\"&gt;\r\n\t\t\t&lt;rval&gt;https:\/\/storage.googleapis.com\/dfp-report-export\/caxxxxxxxx-xxxxxxxxxxxxxxb?GoogleAccessId=3769xxxxxxxxxxx-qxxxxxxxxxxxxxxxxsqdb5dvi8g@developer.gserviceaccount.com&amp;amp;Expires=1496438929&amp;amp;Signature=vnhCiAIqd%2BFgWCtAHo9roFOI3W%2BveUTYuSvyBQ9gtMI2HDTXOCVDh7wzUV%2BPBJZZghaL6k8wKYq33GA4NpjZVNYuaAgPLWgGwAUPdtioHRi%2Bt3Eymp%2FAPRGIoos0ekP3O7l%2FPNPxenC6UTP087HV3j06V%2Fuui9ixpKZWGCK8r56oUPj6S8q1hG95Ns3d3sEcuz3%2BkShu6GYG5mqir5vjtZPuzwsr%2F96G5Kk123mke%2B%2FIVRJGoqnCMghNWtIG1yR1IdZx%2FIpit%2FnaJ9HP6IvAr3oMIXkQ3cHv%2FtOhXGy9dTG34q%2FKDbtkSJAayHgjlSLPGKucygcXBhUrbywBu8Y77A%3D%3D&lt;\/rval&gt;\r\n\t\t&lt;\/getReportDownloadURLResponse&gt;\r\n\t&lt;\/soap:Body&gt;\r\n&lt;\/soap:Envelope&gt;<\/pre>\n<p><strong>Extract Single XML Node Value from SOAP API Response using XPATH<\/strong><\/p>\n<p>Once you get response you can extract status of your JOB using XPAth Expression (See REST API Task response settings tab. Change Format to XML and type following XPATH expression. This will look for &lt;rval&gt;https:\/\/storage.googleapis.com\/dfp-report-export\/caxx&#8230;&#8230;&#8230;.&lt;\/rval&gt; node anywhere in SOAP response XML and extract value (i.e. URL)<\/p>\n<h3>Download File Using REST API Task<\/h3>\n<p>Once you get URL its time to download it.\u00a0You can use REST API Task to download the file. On Response Setting Tab specify full file path (e.g. c:\\report_csv.gz) and make sure Binary option is checked (Found next to the Save Path)<\/p>\n<h2>Making things dynamic<\/h2>\n<p>If you want to supply certain parameters at runtime (e.g. from SSIS Variable) rather than hard code then you can use Variable Placeholders any where in Request Body, URL or Headers. Click Insert Variable option found in Edit screen<\/p>\n<p>Here is an example of dynamic URL (API Version stored in SSIS Variable)<\/p>\n<pre>https:\/\/ads.google.com\/apis\/ads\/publisher\/{{User::ApiVer}}\/NetworkService<\/pre>\n<h2>Deployment to Production<\/h2>\n<p>When you ready to deploy your SSIS Package to production make sure to change Test NetworkCode supplied inside Request Body to your Production Ad Network. Also Set RefreshToken Property of OAuth Connection Manager (Get it from Backup file saved when you created OAuth connection first time). Once you set RefreshToken of connection manager you won&#8217;t have to Login again to get a new token.<\/p>\n<h2>Conclusion<\/h2>\n<p>Traditionally if you wanted to integrate Google DFP API (DoubleClick API) calls inside your ETL workflow then it required some sort of coding effort (e.g. Use C# SDK, JAVA SDK or Python SDK). Coding effort is not only time consuming and expensive but also hard to maintain for any non-coder (e.g. ETL Developer or DBA).<br \/>\nThanks to <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/\" target=\"_blank\" rel=\"noopener\">SSIS PowerPack<\/a> which changed the way developers do API integration. Now you can reduce time to implement and total cost of you API integration project significantly by using drag and drop approach. This approach is not only easy to maintain but also fast and high quality. You can use ZappySys REST\/SOAP SSIS Connectors and SSIS Tasks for any API integration project such as Google DFP API. <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/\" target=\"_blank\" rel=\"noopener\">Try SSIS PowerPack<\/a> for free to explore possibilities. If you have any issue with your integration <a href=\"\/\/zappysys.com\/support\/\">Contact Support<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Google DoubleClick is one of the most popular platforms for Advertisers. Many times you have need for custom integration or Automation for many operations. In this article we will learn how to Call Google DFP API (i.e. DoubleClick for Publishers) without coding using SSIS (Microsoft SQL Server Integration Services). In our previous article we [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1634,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55,225],"tags":[180,107,215,108,179,56,60,67,12,4,144,140,7],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>How to call Google DFP API with SSIS - DoubleClick | ZappySys Blog<\/title>\r\n<meta name=\"description\" content=\"Learn how to call Google DFP API (DoubleClick for Publishers) using SSIS without any coding. Use SSIS XML Source to View\/Manage Ads in DFP, AdWords, AdSense\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"How to call Google DFP API with SSIS - DoubleClick | ZappySys Blog\" \/>\r\n<meta property=\"og:description\" content=\"Learn how to call Google DFP API (DoubleClick for Publishers) using SSIS without any coding. Use SSIS XML Source to View\/Manage Ads in DFP, AdWords, AdSense\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/\" \/>\r\n<meta property=\"og:site_name\" content=\"ZappySys Blog\" \/>\r\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/ZappySys\/\" \/>\r\n<meta property=\"article:published_time\" content=\"2017-02-14T19:28:31+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2017-10-09T13:48:23+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png\" \/>\r\n\t<meta property=\"og:image:width\" content=\"500\" \/>\r\n\t<meta property=\"og:image:height\" content=\"500\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\r\n<meta name=\"author\" content=\"ZappySys\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/zappysys\/\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"ZappySys\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"32 minutes\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/\",\"url\":\"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/\",\"name\":\"How to call Google DFP API with SSIS - DoubleClick | ZappySys Blog\",\"isPartOf\":{\"@id\":\"https:\/\/zappysys.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png\",\"datePublished\":\"2017-02-14T19:28:31+00:00\",\"dateModified\":\"2017-10-09T13:48:23+00:00\",\"author\":{\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82\"},\"description\":\"Learn how to call Google DFP API (DoubleClick for Publishers) using SSIS without any coding. Use SSIS XML Source to View\/Manage Ads in DFP, AdWords, AdSense\",\"breadcrumb\":{\"@id\":\"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/#primaryimage\",\"url\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png\",\"contentUrl\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png\",\"width\":500,\"height\":500},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zappysys.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to call Google DFP API with SSIS &#8211; DoubleClick\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zappysys.com\/blog\/#website\",\"url\":\"https:\/\/zappysys.com\/blog\/\",\"name\":\"ZappySys Blog\",\"description\":\"SSIS \/ ODBC Drivers \/ API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zappysys.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82\",\"name\":\"ZappySys\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g\",\"caption\":\"ZappySys\"},\"sameAs\":[\"http:\/\/www.zappysys.com\/\",\"https:\/\/www.facebook.com\/ZappySys\/\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/zappysys\/\"],\"url\":\"https:\/\/zappysys.com\/blog\/author\/admin\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to call Google DFP API with SSIS - DoubleClick | ZappySys Blog","description":"Learn how to call Google DFP API (DoubleClick for Publishers) using SSIS without any coding. Use SSIS XML Source to View\/Manage Ads in DFP, AdWords, AdSense","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/","og_locale":"en_US","og_type":"article","og_title":"How to call Google DFP API with SSIS - DoubleClick | ZappySys Blog","og_description":"Learn how to call Google DFP API (DoubleClick for Publishers) using SSIS without any coding. Use SSIS XML Source to View\/Manage Ads in DFP, AdWords, AdSense","og_url":"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/","og_site_name":"ZappySys Blog","article_author":"https:\/\/www.facebook.com\/ZappySys\/","article_published_time":"2017-02-14T19:28:31+00:00","article_modified_time":"2017-10-09T13:48:23+00:00","og_image":[{"width":500,"height":500,"url":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png","type":"image\/png"}],"author":"ZappySys","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/zappysys\/","twitter_misc":{"Written by":"ZappySys","Est. reading time":"32 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/","url":"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/","name":"How to call Google DFP API with SSIS - DoubleClick | ZappySys Blog","isPartOf":{"@id":"https:\/\/zappysys.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/#primaryimage"},"image":{"@id":"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/#primaryimage"},"thumbnailUrl":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png","datePublished":"2017-02-14T19:28:31+00:00","dateModified":"2017-10-09T13:48:23+00:00","author":{"@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82"},"description":"Learn how to call Google DFP API (DoubleClick for Publishers) using SSIS without any coding. Use SSIS XML Source to View\/Manage Ads in DFP, AdWords, AdSense","breadcrumb":{"@id":"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/#primaryimage","url":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png","contentUrl":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/02\/google-doubleclick-dfp-api-integration.png","width":500,"height":500},{"@type":"BreadcrumbList","@id":"https:\/\/zappysys.com\/blog\/calling-google-dfp-api-with-ssis-doubleclick-soap-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zappysys.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to call Google DFP API with SSIS &#8211; DoubleClick"}]},{"@type":"WebSite","@id":"https:\/\/zappysys.com\/blog\/#website","url":"https:\/\/zappysys.com\/blog\/","name":"ZappySys Blog","description":"SSIS \/ ODBC Drivers \/ API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zappysys.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82","name":"ZappySys","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g","caption":"ZappySys"},"sameAs":["http:\/\/www.zappysys.com\/","https:\/\/www.facebook.com\/ZappySys\/","https:\/\/twitter.com\/https:\/\/twitter.com\/zappysys\/"],"url":"https:\/\/zappysys.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/1000"}],"collection":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/comments?post=1000"}],"version-history":[{"count":37,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/1000\/revisions"}],"predecessor-version":[{"id":2081,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/1000\/revisions\/2081"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/media\/1634"}],"wp:attachment":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/media?parent=1000"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/categories?post=1000"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/tags?post=1000"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}