2012-03-30 7 views
0

Ich möchte eine Liste der AdWords-Kunden abrufen, die einem authentifizierten Konto zugeordnet sind (ich verwende OAuth).AdWords-API: Kundenliste für kein Kundencenter-Konto

Erster Versuch war ServicedAccountService zu verwenden und diese XML-Anfrage

<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"> 
    <soap:Header> 
    <RequestHeader xmlns="https://adwords.google.com/api/adwords/mcm/v201109"> 
     <developerToken xmlns="https://adwords.google.com/api/adwords/mcm/v201109">[[DEV_TOKEN]]</developerToken> 
    </RequestHeader> 
    </soap:Header> 
    <soap:Body> 
    <get xmlns="https://adwords.google.com/api/adwords/mcm/v201109"> 
     <selector> 
     <enablePaging>false</enablePaging> 
     </selector> 
    </get> 
    </soap:Body> 
</soap:Envelope> 

Aber es funktioniert nur für MCC-Konten. Für die regelmäßige Google-Konto habe ich leere Dataset

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
    <ResponseHeader xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201109" xmlns="https://adwords.google.com/api/adwords/mcm/v201109"> 
     <ns2:requestId>0004bc71cee633d00aecb0aa000060ca</ns2:requestId> 
     <ns2:serviceName>ServicedAccountService</ns2:serviceName> 
     <ns2:methodName>get</ns2:methodName> 
     <ns2:operations>0</ns2:operations> 
     <ns2:responseTime>230</ns2:responseTime> 
     <ns2:units>0</ns2:units> 
    </ResponseHeader> 
    </soap:Header> 
    <soap:Body> 
    <getResponse xmlns="https://adwords.google.com/api/adwords/mcm/v201109" xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201109"> 
     <rval> 
     <accounts> 
      <customerId>0</customerId> 
      <canManageClients>false</canManageClients> 
     </accounts> 
     </rval> 
    </getResponse> 
    </soap:Body> 
</soap:Envelope> 

ich viel gegoogelt und schließlich found, dass ich andere XML verwenden kann (Infoservice) sowohl für MCC und nicht MCC-Konten.

<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"> 
    <soap:Header> 
    <RequestHeader xmlns="https://adwords.google.com/api/adwords/info/v201109"> 
     <developerToken xmlns="https://adwords.google.com/api/adwords/cm/v201109">[[DEV_TOKEN]]</developerToken> 
    </RequestHeader> 
    </soap:Header> 
    <soap:Body> 
    <get xmlns="https://adwords.google.com/api/adwords/info/v201109"> 
     <selector> 
     <dateRange> 
      <min xmlns="https://adwords.google.com/api/adwords/cm/v201109">[[START_DATE]]</min> 
      <max xmlns="https://adwords.google.com/api/adwords/cm/v201109">[[END_DATE]]</max> 
     </dateRange> 
     <includeSubAccounts>true</includeSubAccounts> 
     <apiUsageType>UNIT_COUNT_FOR_CLIENTS</apiUsageType> 
     </selector> 
    </get> 
    </soap:Body> 
</soap:Envelope> 

Aber Daten zurückgegeben wird, ist falsch - nicht alle Konten aufgelistet sind. Oder es wurden überhaupt keine Daten zurückgegeben.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
     <ResponseHeader xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201109" xmlns="https://adwords.google.com/api/adwords/info/v201109"> 
      <ns2:requestId>0004bc7121a910e80a97030d000051e7</ns2:requestId> 
      <ns2:serviceName>InfoService</ns2:serviceName> 
      <ns2:methodName>get</ns2:methodName> 
      <ns2:operations>1</ns2:operations> 
      <ns2:responseTime>1206</ns2:responseTime> 
      <ns2:units>1</ns2:units> 
     </ResponseHeader> 
    </soap:Header> 
    <soap:Body> 
     <getResponse xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201109" xmlns="https://adwords.google.com/api/adwords/info/v201109"> 
      <rval> 
       <cost>0</cost> 
      </rval> 
     </getResponse> 
    </soap:Body> 
</soap:Envelope> 

Gibt es eine andere Möglichkeit, die Client-Liste für AdWords-Konto zu bekommen? Danke vielmals.

Antwort

1

Ich habe auch dieses Problem festgestellt und kann bestätigen, dass es nicht das richtige Verhalten des ServicedAccountService ist; Es ist ein "known issue that will be resolved in future": Wenn Sie Ihr Basiskonto mit einem Kundencenter verknüpfen, können Sie sich mit dem Basiskonto authentifizieren und den ServicedAccountService verwenden, um die Kontodetails zu erhalten. Wenn das Konto jedoch nicht verknüpft ist, wird dieses Problem auftreten.

Wenn Sie nur die Kundennummer für ein Konto erhalten möchten, können Sie auch die InfoService verwenden, die nicht unter dem gleichen Problem leidet.

+0

letzte xml in meiner Frage ist eine Antwort von InfoService. Es funktioniert auch nicht korrekt - es werden nicht alle Accounts angezeigt, sondern nur über die API, und das ist nicht das, was ich erreichen möchte. –

+1

Sie müssen den ServicedAccountService für ein Kundencenter-Konto und den InfoService für ein normales Konto verwenden. Ich rufe zuerst den ServicedAccountService auf und führe dann einen InfoService-Aufruf durch, wenn im ID-Feld eine Null steht. Es ist nur ein Workaround, bis das Problem von Google behoben wird. –

+0

danke, das ist bereits implementiert. –