Hi, I recently was forced to transition away from the ruby client library because the most current version uses rack 1.4 which is incompatible with rails 2.3.11 (depends on rack ~> 1.1). I cannot use any of the prior gem versions because the API's have already sunset. As a result, we are writing our own SOAP requests using Savon. I am having a lot of trouble getting the correct format set up. Below is my Savon code followed by the XML that is generated:
SAVON CODE client = Savon::Client.new("https://adwords.google.com/api/adwords/o/v201209/TrafficEstimatorService?wsdl") @response = client.request :get do |soap| soap.element_form_default = false soap.header = { "ins0:RequestHeader" => { "ins1:clientCustomerId" => @client_customer_id, "ins1:userAgent" => @user_agent, "ins1:developerToken" => @developer_token, "ins1:authToken" => @auth_token } } soap.body = { "ins0:selector" => { "ins0:campaignEstimateRequests" => [{ "ins0:adGroupEstimateRequests" => [{ "ins0:keywordEstimateRequests" => [ {"ins0:keyword" => {"ins1:text" => "online schools", "ins1:matchType" => "EXACT"} } ], "ins0:maxCpc" => {"ins1:microAmount" => "99000000"} }], "ins0:criteria" => [ {"ins1:id" => "2840", "xsi:type" => "ins1:Location"}, {"ins1:id" => "1000", "xsi:type" => "ins1:Language"} ] }] } } end XML CODE: <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="https://adwords.google.com/api/adwords/o/v201209" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="https://adwords.google.com/api/adwords/o/v201209" xmlns:ins1="https://adwords.google.com/api/adwords/cm/v201209"> <env:Header> <ins0:RequestHeader> <ins1:clientCustomerId>809-888-9384</ins1:clientCustomerId> <ins1:userAgent>rails_app</ins1:userAgent> <ins1:developerToken>H6DYNBuj0p3WafYpA3dq9g</ins1:developerToken> <ins1:authToken>DQAAAMgAAADKUU2gnMfJ7oU0F30VsFhgVtJNoVhB2Rb7YJiqEna6D3WLArF5-Vvjxqdy4gkUZP4Ire0Qrg-_DyTKNuGhV_U7Z4SIpsuzVXsjlAMVD07VAFv7pfw9qFi1E9FphXPgHeoIhJ_atLD9b-sbD77fBmwCCgf882zNx329BbpOVstNqZ__UGh4IHJsnsWXpwEqyAT2yzlXCo38osbdNZ9TSS9HCQeQPVg7e1hTIR7u4Dl0F6bIF0NcgEYi4CETeJZzllS7ECfP5lOwWVu1W9Z35WnV</ins1:authToken> </ins0:RequestHeader> </env:Header> <env:Body> <ins0:get> <ins0:selector> <ins0:campaignEstimateRequests> <ins0:adGroupEstimateRequests> <ins0:keywordEstimateRequests> <ins0:keyword> <ins1:type>KEYWORD</ins1:type> <xsi:type>Keyword</xsi:type> <ins1:text>online schools</ins1:text> <ins1:matchType>EXACT</ins1:matchType> </ins0:keyword> </ins0:keywordEstimateRequests> <ins0:maxCpc> <ins1:microAmount>99000000</ins1:microAmount> </ins0:maxCpc> </ins0:adGroupEstimateRequests> <ins0:criteria> <ins1:id>2840</ins1:id> <xsi:type>Location</xsi:type> </ins0:criteria> <ins0:criteria> <ins1:id>1000</ins1:id> <xsi:type>Location</xsi:type> </ins0:criteria> </ins0:campaignEstimateRequests> </ins0:selector> </ins0:get> </env:Body> </env:Envelope> The error I keep getting is as follows: Savon::SOAP::Fault: (soap:Client) Unmarshalling Error: cvc-complex-type.2.4.a: Invalid content was found starting with element 'xsi:type'. One of '{"https://adwords.google.com/api/adwords/cm/v201209":type, "https://adwords.google.com/api/adwords/cm/v201209":Criterion.Type}' is expected. According to the documentation I need to specify "xsi:type" as Criterion.Type and type are ignored if passed along Any ideas on what I am doing wrong? Thanks, Gustav -- -- =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ Also find us on our blog and discussion group: http://adwordsapi.blogspot.com http://groups.google.com/group/adwords-api =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ You received this message because you are subscribed to the Google Groups "AdWords API Forum" group. To post to this group, send email to adwords-api@googlegroups.com To unsubscribe from this group, send email to adwords-api+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/adwords-api?hl=en