Update of /project/cl-soap/cvsroot/cl-soap/test In directory common-lisp.net:/tmp/cvs-serv30515/test
Modified Files: test-google-adwords.lisp test-xsd.lisp Log Message: first version of xsd bind-element/resolve-element based on the new concept of 'xsd templates' - so far input/output symmetry has been reached and initial testing looks good; awaits further/more/deeper testing and some more cleanup/integration
Date: Fri Sep 30 19:12:21 2005 Author: scaekenberghe
Index: cl-soap/test/test-google-adwords.lisp diff -u cl-soap/test/test-google-adwords.lisp:1.12 cl-soap/test/test-google-adwords.lisp:1.13 --- cl-soap/test/test-google-adwords.lisp:1.12 Wed Sep 28 11:26:11 2005 +++ cl-soap/test/test-google-adwords.lisp Fri Sep 30 19:12:20 2005 @@ -1,6 +1,6 @@ ;;;; -*- mode: lisp -*- ;;;; -;;;; $Id: test-google-adwords.lisp,v 1.12 2005/09/28 09:26:11 scaekenberghe Exp $ +;;;; $Id: test-google-adwords.lisp,v 1.13 2005/09/30 17:12:20 scaekenberghe Exp $ ;;;; ;;;; Some tests on the Google AdWords API (not publically available) ;;;; @@ -19,14 +19,6 @@
(defpackage :google (:nicknames "google") - (:export - ;; headers - "email" "password" "useragent" "token" "clientEmail" - ;; info service - "getUsageQuotaThisMonth" "getUsageQuotaThisMonthResponse" "getUsageQuotaThisMonthReturn" - "getCampaigns" "getCampaign" "getBillingAddress" - ;; optionally add more exports, but this is not really needed for wsdl-soap-call's - ) (:documentation "Package for symbols in the Google Adwords API XML Namespace"))
(defparameter *google-adwords-ns* (s-xml:register-namespace +google-adwords-ns-uri+ "google" :google)) @@ -74,154 +66,46 @@
;;; some test calls
-#+NIL -(defun get-usage-quota-this-month () - (multiple-value-bind (result headers) - (soap-call (make-soap-end-point "https://adwords.google.com:443/api/adwords/v2/InfoService") - `((google:|email| ,*google-adwords-email*) - (google:|password| ,*google-adwords-password*) - (google:|useragent| ,*google-adwords-user-agent*) - (google:|token| ,*google-adwords-token*)) - `(google:|getUsageQuotaThisMonth|) - :envelope-attributes `(:|xmlns| ,+google-adwords-ns-uri+)) - (if (eql (lxml-get-tag result) 'google:|getUsageQuotaThisMonthResponse|) - (let ((contents (lxml-find-tag 'google:|getUsageQuotaThisMonthReturn| (rest result)))) - (if contents - (values (parse-integer (second contents)) headers) - (error "Expected a <getUsageQuotaThisMonthReturn> element"))) - (error "Expected a <getUsageQuotaThisMonthResponse> element")))) - (defun get-usage-quota-this-month () (wsdl-soap-call (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/InfoService?wsdl") "getUsageQuotaThisMonth" :headers (make-google-headers)))
-#+NIL -(defun get-method-cost (service method &optional (date (ut))) - (multiple-value-bind (result headers) - (soap-call (make-soap-end-point "https://adwords.google.com:443/api/adwords/v2/InfoService") - `((google:|email| ,*google-adwords-email*) - (google:|password| ,*google-adwords-password*) - (google:|useragent| ,*google-adwords-user-agent*) - (google:|token| ,*google-adwords-token*)) - `(google:|getMethodCost| - (google:|service| ,service) - (google:|method| ,method) - (google:|date| ,(lisp->xsd-date date))) - :envelope-attributes `(:|xmlns| ,+google-adwords-ns-uri+)) - (if (eql (lxml-get-tag result) 'google:|getMethodCostResponse|) - (let ((contents (lxml-find-tag 'google:|getMethodCostReturn| (rest result)))) - (if contents - (values (parse-integer (second contents)) headers) - (error "Expected a <getMethodCostReturn> element"))) - (error "Expected a <getMethodCostResponse> element")))) - (defun get-method-cost (service method &optional (date (ut))) (wsdl-soap-call (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/InfoService?wsdl") "getMethodCost" - :input `("service" ,service - "method" ,method - "date" ,date) + :input `("getMethodCost" ("service" ,service "method" ,method "date" ,date)) :headers (make-google-headers)))
-#+NIL -(defun get-operation-count (start-date &optional (end-date start-date))) - (defun get-unit-count (&optional (start-date (ut)) (end-date start-date)) (wsdl-soap-call (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/InfoService?wsdl") "getUnitCount" - :input `("startDate" ,start-date - "endDate" ,end-date) + :input `("getUnitCount" ("startDate" ,start-date "endDate" ,end-date)) :headers (make-google-headers)))
-#+NIL -(defun get-unit-count-for-method (service method &optional (start-date (ut)) (end-date start-date))) - -#+NIL -(defun get-billing-address (client-email) - (multiple-value-bind (result headers) - (soap-call (make-soap-end-point "https://adwords.google.com:443/api/adwords/v2/AccountService") - `((google:|email| ,*google-adwords-email*) - (google:|password| ,*google-adwords-password*) - (google:|useragent| ,*google-adwords-user-agent*) - (google:|token| ,*google-adwords-token*) - (google:|clientEmail| ,client-email)) - `(google:|getBillingAddress|) - :envelope-attributes `(:|xmlns| ,+google-adwords-ns-uri+)) - (if (eql (lxml-get-tag result) 'google:|getBillingAddressResponse|) - (values (rest result) headers) - (error "Expected a <getBillingAddressResponse> element")))) - -#+NIL -(defun get-all-adwords-campaigns (client-email) - (multiple-value-bind (result headers) - (soap-call (make-soap-end-point "https://adwords.google.com:443/api/adwords/v2/CampaignService") - `((google:|email| ,*google-adwords-email*) - (google:|password| ,*google-adwords-password*) - (google:|useragent| ,*google-adwords-user-agent*) - (google:|token| ,*google-adwords-token*) - (google:|clientEmail| ,client-email)) - `(google:|getAllAdWordsCampaigns| - (google:|dummy| "1")) - :envelope-attributes `(:|xmlns| ,+google-adwords-ns-uri+)) - (values result headers))) - (defun get-all-adwords-campaigns (&optional (client-email *google-client-email*)) (wsdl-soap-call (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/CampaignService?wsdl") "getAllAdWordsCampaigns" - :input '("dummy" 1) + :input '("getAllAdWordsCampaigns" ("dummy" 1)) :headers (make-google-headers :client-email client-email)))
-#+NIL -(defun get-campaign (id client-email) - (multiple-value-bind (result headers) - (soap-call (make-soap-end-point "https://adwords.google.com:443/api/adwords/v2/CampaignService") - `((google:|email| ,*google-adwords-email*) - (google:|password| ,*google-adwords-password*) - (google:|useragent| ,*google-adwords-user-agent*) - (google:|token| ,*google-adwords-token*) - (google:|clientEmail| ,client-email)) - `(google:|getCampaign| - (google:|id| ,(princ-to-string id))) - :envelope-attributes `(:|xmlns| ,+google-adwords-ns-uri+)) - (values result headers))) - -#+NIL -(defun estimate-keyword-list (keywords) - "((<text> <type> <max-cpc>)*) where type is Broad|Phrase|Exact" - (multiple-value-bind (result headers) - (soap-call (make-soap-end-point "https://adwords.google.com:443/api/adwords/v2/TrafficEstimatorService") - `((google:|email| ,*google-adwords-email*) - (google:|password| ,*google-adwords-password*) - (google:|useragent| ,*google-adwords-user-agent*) - (google:|token| ,*google-adwords-token*)) - `(google::|estimateKeywordList| - ,@(mapcar #'(lambda (keyword) - (destructuring-bind (text type max-cpc) - keyword - `(google::|keywordRequest| - (google::|text| ,text) - (google::|type| ,type) - (google::|maxCpc| ,max-cpc)))) - keywords)) - :envelope-attributes `(:|xmlns| ,+google-adwords-ns-uri+)) - (values result headers))) - (defun estimate-keyword-list (keywords) "((<text> <type> <max-cpc>)*) where type is Broad|Phrase|Exact" (wsdl-soap-call (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/TrafficEstimatorService?wsdl") "estimateKeywordList" - :input (mapcar #'(lambda (keyword) - (destructuring-bind (text type max-cpc) - keyword - `("KeywordRequest" ("text" ,text "type" ,type "maxCpc" ,max-cpc)))) - keywords) + :input `("estimateKeywordList" + ("keywordRequests" + ,(mapcar #'(lambda (keyword) + (destructuring-bind (text type max-cpc) + keyword + `("text" ,text "type" ,type "maxCpc" ,max-cpc))) + keywords))) :headers (make-google-headers)))
(defun get-all-adgroups (campaign-id) (wsdl-soap-call (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/AdGroupService?wsdl") "getAllAdGroups" - :input `("campaignID" ,campaign-id) + :input `("getAllAdGroups" ("campaignID" ,campaign-id)) :headers (make-google-headers)))
(defun add-campaign (client-email daily-budget status &key name language-targeting geo-targeting) @@ -256,7 +140,23 @@ (wsdl-soap-call (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/AdGroupService?wsdl") "addAdGroup" :input - `("campaignID" ,campaign-id "AdGroup" ,new-data) + `("addAdGroup" ("campaignID" ,campaign-id "newData" ,new-data)) + :headers + (make-google-headers))) + +(defun update-ad-group (changed-data) + (wsdl-soap-call (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/AdGroupService?wsdl") + "updateAdGroup" + :input + `("updateAdGroup" ("changedData" ,changed-data)) + :headers + (make-google-headers))) + +(defun get-ad-group (id) + (wsdl-soap-call (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/AdGroupService?wsdl") + "getAdGroup" + :input + `("getAdGroup" ("adGroupId" ,id)) :headers (make-google-headers)))
Index: cl-soap/test/test-xsd.lisp diff -u cl-soap/test/test-xsd.lisp:1.1 cl-soap/test/test-xsd.lisp:1.2 --- cl-soap/test/test-xsd.lisp:1.1 Tue Sep 27 18:25:18 2005 +++ cl-soap/test/test-xsd.lisp Fri Sep 30 19:12:20 2005 @@ -1,6 +1,6 @@ ;;;; -*- mode: lisp -*- ;;;; -;;;; $Id: test-xsd.lisp,v 1.1 2005/09/27 16:25:18 scaekenberghe Exp $ +;;;; $Id: test-xsd.lisp,v 1.2 2005/09/30 17:12:20 scaekenberghe Exp $ ;;;; ;;;; Some (internal) test on the implementatin of the XML Schema Definition ;;;; @@ -11,9 +11,10 @@ ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. ;;;;
+(in-package :cl-soap) + (let ((schema (get-xml-schema-definition (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/CampaignService?wsdl"))) - (namespace (s-xml:find-namespace "https://adwords.google.com/api/adwords/v2")) (lxml '((GOOGLE::|getAllAdWordsCampaignsResponse| :|xmlns| "https://adwords.google.com/api/adwords/v2") (GOOGLE::|getAllAdWordsCampaignsReturn| (GOOGLE::|dailyBudget| "200000000") @@ -36,59 +37,14 @@ (GOOGLE::|optInSearchNetwork| "true") (GOOGLE::|optInContentNetwork| "true") (GOOGLE::|languageTargeting| (GOOGLE::|languages| "en")) - (GOOGLE::|geoTargeting| (GOOGLE::|countries| "AU"))) - (GOOGLE::|getAllAdWordsCampaignsReturn| - (GOOGLE::|dailyBudget| "10000") - (GOOGLE::|id| "5614005") - (GOOGLE::|name| "Campaign #4") - (GOOGLE::|status| "Deleted") - (GOOGLE::|startDate| "2005-09-14T07:24:05.000Z") - (GOOGLE::|endDate| "2005-09-14T07:24:52.000Z") - (GOOGLE::|optInSearchNetwork| "false") - (GOOGLE::|optInContentNetwork| "false") - ((GOOGLE::|languageTargeting| XSI:|null| "true")) - ((GOOGLE::|geoTargeting| XSI:|null| "true"))) - (GOOGLE::|getAllAdWordsCampaignsReturn| - (GOOGLE::|dailyBudget| "10000") - (GOOGLE::|id| "5614035") - (GOOGLE::|name| "Campaign #5") - (GOOGLE::|status| "Deleted") - (GOOGLE::|startDate| "2005-09-14T07:30:44.000Z") - (GOOGLE::|endDate| "2005-09-14T07:34:13.000Z") - (GOOGLE::|optInSearchNetwork| "false") - (GOOGLE::|optInContentNetwork| "false") - ((GOOGLE::|languageTargeting| XSI:|null| "true")) - ((GOOGLE::|geoTargeting| XSI:|null| "true"))) - (GOOGLE::|getAllAdWordsCampaignsReturn| - (GOOGLE::|dailyBudget| "10000") - (GOOGLE::|id| "5628855") - (GOOGLE::|name| "Campaign #6") - (GOOGLE::|status| "Deleted") - (GOOGLE::|startDate| "2005-09-16T05:42:20.000Z") - (GOOGLE::|endDate| "2005-09-16T05:43:24.000Z") - (GOOGLE::|optInSearchNetwork| "false") - (GOOGLE::|optInContentNetwork| "false") - ((GOOGLE::|languageTargeting| XSI:|null| "true")) - ((GOOGLE::|geoTargeting| XSI:|null| "true"))) - (GOOGLE::|getAllAdWordsCampaignsReturn| - (GOOGLE::|dailyBudget| "10000") - (GOOGLE::|id| "5634135") - (GOOGLE::|name| "Campaign #7") - (GOOGLE::|status| "Deleted") - (GOOGLE::|startDate| "2005-09-16T20:06:15.000Z") - (GOOGLE::|endDate| "2005-09-16T20:22:51.000Z") - (GOOGLE::|optInSearchNetwork| "false") - (GOOGLE::|optInContentNetwork| "false") - ((GOOGLE::|languageTargeting| XSI:|null| "true")) - ((GOOGLE::|geoTargeting| XSI:|null| "true")))))) + (GOOGLE::|geoTargeting| (GOOGLE::|countries| "AU")))))) (pprint (resolve-element "getAllAdWordsCampaignsResponse" lxml schema - namespace))) + *google-adwords-ns*)))
(let ((schema (get-xml-schema-definition (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/AdGroupService?wsdl"))) - (namespace (s-xml:find-namespace "https://adwords.google.com/api/adwords/v2")) (lxml '((GOOGLE::|getAllAdGroupsResponse| :|xmlns| "https://adwords.google.com/api/adwords/v2") (GOOGLE::|getAllAdGroupsReturn| (GOOGLE::|maxCpc| "8000000") @@ -127,324 +83,6 @@ (GOOGLE::|campaignId| "3871365") (GOOGLE::|status| "Deleted")) (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "Lifestyle Financial Planning") - (GOOGLE::|id| "200452095") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "Multi-Manager Investments") - (GOOGLE::|id| "200452125") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "12200000") - (GOOGLE::|name| "Planning Retirement") - (GOOGLE::|id| "200452215") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "Planning my Investments") - (GOOGLE::|id| "200452245") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "Reasonable Benefit Limit") - (GOOGLE::|id| "200452275") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "6560000") - (GOOGLE::|name| "Redundancy Advice") - (GOOGLE::|id| "200452305") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "5390000") - (GOOGLE::|name| "Retirement Advice") - (GOOGLE::|id| "200452335") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "Retrenchment Advice") - (GOOGLE::|id| "200452365") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "1610000") - (GOOGLE::|name| "Salary Sacrifice") - (GOOGLE::|id| "200452395") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "3570000") - (GOOGLE::|name| "Superannuation") - (GOOGLE::|id| "200452485") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "Superannuation Surcharge") - (GOOGLE::|id| "200452515") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "33240000") - (GOOGLE::|name| "Tax Advice") - (GOOGLE::|id| "200452575") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "7520000") - (GOOGLE::|name| "Tax Planning") - (GOOGLE::|id| "200452635") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "26910000") - (GOOGLE::|name| "Financial Advisor") - (GOOGLE::|id| "200452665") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "12980000") - (GOOGLE::|name| "Financial Planner") - (GOOGLE::|id| "200452695") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "1290000") - (GOOGLE::|name| "Tax Tips") - (GOOGLE::|id| "200902695") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "5510000") - (GOOGLE::|name| "Financial Assistance") - (GOOGLE::|id| "200902815") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "43750000") - (GOOGLE::|name| "Independent Financial Advisor") - (GOOGLE::|id| "200902845") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "2930000") - (GOOGLE::|name| "tax information") - (GOOGLE::|id| "200902875") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "3660000") - (GOOGLE::|name| "Planners") - (GOOGLE::|id| "200902905") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "4020000") - (GOOGLE::|name| "planning") - (GOOGLE::|id| "200902935") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "500000") - (GOOGLE::|name| "Australian Financial Planning") - (GOOGLE::|id| "200902995") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Deleted")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "8040000") - (GOOGLE::|name| "1. Financial Planning (new)") - (GOOGLE::|id| "202802655") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "1. Retrenchment Advice (new)") - (GOOGLE::|id| "202802715") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "6540000") - (GOOGLE::|name| "1. Redundancy Advice (new)") - (GOOGLE::|id| "202802775") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "1. Investing Super (new)") - (GOOGLE::|id| "202802805") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "1. Super (new)") - (GOOGLE::|id| "202802865") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "Lifestyle Financial Planning (new)") - (GOOGLE::|id| "202802895") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "Multi-Manager Investments (new)") - (GOOGLE::|id| "202802955") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "5370000") - (GOOGLE::|name| "1. Retirement Advice (new)") - (GOOGLE::|id| "202803075") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "1. Planning my Investments (new)") - (GOOGLE::|id| "202803135") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "10520000") - (GOOGLE::|name| "Investment Advice (new)") - (GOOGLE::|id| "202803165") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "1. Investment Guidance (new)") - (GOOGLE::|id| "202803225") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "5500000") - (GOOGLE::|name| "1. Financial Assistance (new)") - (GOOGLE::|id| "202803285") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "3230000") - (GOOGLE::|name| "1. Career Transition (new)") - (GOOGLE::|id| "202803315") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "1. Planning Seminars (new)") - (GOOGLE::|id| "202803345") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "4600000") - (GOOGLE::|name| "1. Financial Tips (new)") - (GOOGLE::|id| "202803375") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "2430000") - (GOOGLE::|name| "1. Money Tips (new)") - (GOOGLE::|id| "202803405") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "200000") - (GOOGLE::|name| "1. Super Tips (new)") - (GOOGLE::|id| "202803435") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "11750000") - (GOOGLE::|name| "1. Investment Tips (new)") - (GOOGLE::|id| "202803465") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "4020000") - (GOOGLE::|name| "1. planning (new)") - (GOOGLE::|id| "202803645") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "1. Reasonable Benefit Limit (new)") - (GOOGLE::|id| "202803705") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "90000") - (GOOGLE::|name| "1. Superannuation Surcharge (new)") - (GOOGLE::|id| "202803735") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "33120000") - (GOOGLE::|name| "1. Tax Advice (new)") - (GOOGLE::|id| "202803765") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "5420000") - (GOOGLE::|name| "1. Financial Plan (new)") - (GOOGLE::|id| "202803825") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "3560000") - (GOOGLE::|name| "1. Superannuation (new)") - (GOOGLE::|id| "202803855") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "3560000") - (GOOGLE::|name| "1. Diversified Fund (new)") - (GOOGLE::|id| "202803885") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "26820000") - (GOOGLE::|name| "1. Financial Advisor (new)") - (GOOGLE::|id| "202803915") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "150000") - (GOOGLE::|name| "ETP (new)") - (GOOGLE::|id| "202803945") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "7490000") - (GOOGLE::|name| "1. Tax Planning (new)") - (GOOGLE::|id| "202803975") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "12930000") - (GOOGLE::|name| "1. Financial Planner (new)") - (GOOGLE::|id| "202804005") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "12160000") - (GOOGLE::|name| "Retirement Planning") - (GOOGLE::|id| "202804035") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| - (GOOGLE::|maxCpc| "2930000") - (GOOGLE::|name| "1. Tax Information (new)") - (GOOGLE::|id| "202804095") - (GOOGLE::|campaignId| "3871365") - (GOOGLE::|status| "Enabled")) - (GOOGLE::|getAllAdGroupsReturn| (GOOGLE::|maxCpc| "43730000") (GOOGLE::|name| "1.Independent Financial Advisor (new)") (GOOGLE::|id| "202804125") @@ -453,6 +91,111 @@ (pprint (resolve-element "getAllAdGroupsResponse" lxml schema - namespace))) + *google-adwords-ns*))) + +(let ((schema (get-xml-schema-definition + (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/CampaignService?wsdl"))) + (lxml '((GOOGLE:|getAllAdWordsCampaignsResponse| :|xmlns| "https://adwords.google.com/api/adwords/v2") + (GOOGLE:|getAllAdWordsCampaignsReturn| + (GOOGLE:|dailyBudget| "1000000") + (GOOGLE:|id| "5631435") + (GOOGLE:|name| "Campaign #1") + (GOOGLE:|status| "Active") + (GOOGLE:|startDate| "2005-09-16T11:11:14.000Z") + (GOOGLE:|endDate| "2011-01-01T07:59:59.000Z") + (GOOGLE:|optInSearchNetwork| "true") + (GOOGLE:|optInContentNetwork| "true") + (GOOGLE:|languageTargeting| (GOOGLE:|languages| "en") (GOOGLE:|languages| "nl")) + (GOOGLE:|geoTargeting| (GOOGLE:|countries| "BE") (GOOGLE:|countries| "NL")))))) + (pprint (resolve-element "getAllAdWordsCampaignsResponse" + lxml + schema + *google-adwords-ns*))) + +(let ((schema (get-xml-schema-definition + (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/CampaignService?wsdl"))) + (binding '("id" + 5631435 + "name" + "Campaign #1" + "status" + "Active" + "startDate" + 3335857874 + "endDate" + 3502857599 + "dailyBudget" + 1000000 + "optInSearchNetwork" + T + "optInContentNetwork" + T + "languageTargeting" + (("languages" "en") ("languages" "nl")) + "geoTargeting" + (("countries" "BE") ("countries" "NL"))))) + (pprint (bind-type "Campaign" + binding + nil + schema + *google-adwords-ns*))) + +(let ((schema (get-xml-schema-definition + (wsdl-cache-get"https://adwords.google.com:443/api/adwords/v2/TrafficEstimatorService?wsdl"))) + (binding `("estimateKeywordList" + ("keywordRequests" + ,(mapcar #'(lambda (keyword) + (destructuring-bind (text type max-cpc) + keyword + `("text" ,text "type" ,type "maxCpc" ,max-cpc))) + '(("flowers" "Broad" 50000) ("tree" "Broad" 100000))))))) + (pprint (bind-element "estimateKeywordList" + binding + schema + *google-adwords-ns*))) + +(let ((schema (get-xml-schema-definition + (wsdl-cache-get"https://adwords.google.com:443/api/adwords/v2/TrafficEstimatorService?wsdl"))) + (binding '("text" "flowers" "type" "Broad" "maxCpc" 50000))) + (pprint (bind-type "KeywordRequest" + binding + nil + schema + *google-adwords-ns*))) + +(defun test-1 () + (let* ((schema (get-xml-schema-definition + (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/TrafficEstimatorService?wsdl"))) + (template (generate-xsd-template "estimateKeywordList" schema)) + (binding `("estimateKeywordList" + ("keywordRequests" + ,(mapcar #'(lambda (keyword) + (destructuring-bind (text type max-cpc) + keyword + `("text" ,text "type" ,type "maxCpc" ,max-cpc))) + '(("flowers" "Broad" 50000) ("tree" "Broad" 100000))))))) + (bind-xsd-template template + binding + *google-adwords-ns*))) + +(defun test-2 () + (let* ((schema (get-xml-schema-definition + (wsdl-cache-get "https://adwords.google.com:443/api/adwords/v2/CampaignService?wsdl"))) + (template (generate-xsd-template "getAllAdWordsCampaignsResponse" schema)) + (lxml '((GOOGLE::|getAllAdWordsCampaignsResponse| :|xmlns| "https://adwords.google.com/api/adwords/v2") + (GOOGLE::|getAllAdWordsCampaignsReturn| + (GOOGLE::|dailyBudget| "1000000") + (GOOGLE::|id| "5631435") + (GOOGLE::|name| "Campaign #1") + (GOOGLE::|status| "Active") + (GOOGLE::|startDate| "2005-09-16T11:11:14.000Z") + (GOOGLE::|endDate| "2011-01-01T07:59:59.000Z") + (GOOGLE::|optInSearchNetwork| "true") + (GOOGLE::|optInContentNetwork| "true") + (GOOGLE::|languageTargeting| (GOOGLE::|languages| "en") (GOOGLE::|languages| "nl")) + (GOOGLE::|geoTargeting| (GOOGLE::|countries| "BE") (GOOGLE::|countries| "NL")))))) + (resolve-xsd-template template + (list lxml) + *google-adwords-ns*)))
;;;; eof