[API Adwords] création du compte sandbox

  • Auteur de la discussion Auteur de la discussion Ceubex
  • Date de début Date de début
Nouveau WRInaute
Bonjour,

Je cherche à utiliser l'API Adwords en mode Sandbox (pour les tests). Mais je n'y arrive vraiment pas.
Ils disent sur la page https://developers.google.com/adwords/api/docs/sandbox?hl=fr#getting-started qu'il faut faire une première connexion en get pour l'activer mais je ne comprends vraiment pas comment la faire.

L'application que j'essaye de faire se trouve être en Java. J'ai essayé le code suivant mais ça n'a pas fonctionné.
Est-ce que quelqu'un a une idée ?

Code:
			String email="monEmail";
			String password="----";
			String useragent="----";
			String userID="-----";
			String developerToken="----";
			
			// connexion
			AdWordsServiceLogger.log();
			AdWordsUser user = new AdWordsUser(email,password,userID,useragent,developerToken,true); //le true c'est pour la sandbox
			
			
			
			
			CampaignServiceInterface campaignService = user.getService(AdWordsService.V201109.CAMPAIGN_SERVICE);
			
			Campaign campaign = new Campaign();
		    campaign.setName("Interplanetary Cruise #" + System.currentTimeMillis());
		    campaign.setStatus(CampaignStatus.PAUSED);
		    campaign.setBiddingStrategy(new ManualCPC());
		    
		    Budget budget = new Budget();
		    budget.setPeriod(BudgetBudgetPeriod.DAILY);
		    budget.setAmount(new Money(null, 50000000L));
		    budget.setDeliveryMethod(BudgetBudgetDeliveryMethod.STANDARD);
		    campaign.setBudget(budget);
		    
		    CampaignOperation operation1 = new CampaignOperation();
		    operation1.setOperand(campaign);
		    operation1.setOperator(Operator.ADD);
		    CampaignOperation[] operations1 = new CampaignOperation[] {operation1};
		    
		    CampaignReturnValue result = campaignService.mutate(operations1);
		    
		    if (result != null && result.getValue() != null) {
		        for (Campaign campaignResult : result.getValue()) {
		          System.out.println("Campaign with name \""
		              + campaignResult.getName() + "\" and id \""
		              + campaignResult.getId() + "\" was added.");
		        }
		      } else {
		        System.out.println("No campaigns were added.");
		      }
 
WRInaute accro
Ceubex a dit:
J'ai essayé le code suivant mais ça n'a pas fonctionné.
"Ça ne fonctionne pas", en informatique dire ça ou rien c'est pareil.
Tu as un message d'erreur ? T'as analysé où ça bloque ? ...
 
Nouveau WRInaute
J'ai ce message :

Code:
AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
 faultSubcode: 
 faultString: AuthenticationError.CUSTOMER_NOT_FOUND @ ; trigger:'Mon id Client' Service[CampaignService.mutate]
 faultActor: 
 faultNode: 
 faultDetail: 
	{https://adwords.google.com/api/adwords/cm/v201109}ApiExceptionFault:<message>AuthenticationError.CUSTOMER_NOT_FOUND @ ; trigger:'Mon id Client' Service[CampaignService.mutate]</message><ApplicationException.Type>ApiException</ApplicationException.Type><errors xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="AuthenticationError"><fieldPath/><trigger>Mon id Client</trigger><errorString>AuthenticationError.CUSTOMER_NOT_FOUND</errorString><ApiError.Type>AuthenticationError</ApiError.Type><reason>CUSTOMER_NOT_FOUND</reason></errors>

AuthenticationError.CUSTOMER_NOT_FOUND @ ; trigger:'Mon id Client' Service[CampaignService.mutate]

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:104)
at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:90)
at com.google.api.adwords.v201109.cm.ApiException.getDeserializer(ApiException.java:142)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.axis.encoding.ser.BaseDeserializerFactory.getSpecialized(BaseDeserializerFactory.java:154)
at org.apache.axis.encoding.ser.BaseDeserializerFactory.getDeserializerAs(BaseDeserializerFactory.java:84)
at org.apache.axis.encoding.DeserializationContext.getDeserializer(DeserializationContext.java:464)
at org.apache.axis.encoding.DeserializationContext.getDeserializerForType(DeserializationContext.java:547)
at org.apache.axis.message.SOAPFaultDetailsBuilder.onStartChild(SOAPFaultDetailsBuilder.java:157)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.google.api.adwords.v201109.cm.CampaignServiceSoapBindingStub.mutate(CampaignServiceSoapBindingStub.java:1139)
 
WRInaute accro
Ah ben voilà, ça parlera surement plus à ceux qui connaissent JAVA ... et sorry mais pas moi :mrgreen:
 
Nouveau WRInaute
Super j'adore quand on me fais la morale pour au final me dire que l'erreur nous apprend rien. En effet, connaissant le Java, je confirme qu'on en sait pas plus comme ça.
Pour les autres que ça pourrait intéressé, j'ai trouvé comment faire (ça faisait 3 jours plein que j'étais sur ce problème. C'est dingue mais ils disent nul part comment faire). Donc pour créer une sandbox Adwords executer le code suivant en mettant à jour les variables de l'authProps. Vous pouvez ensuite verifier l'existance de votre compte grace à l'application sandbox-account-viewer.

Code:
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			
			String email="monIdentif@gmail.com"; 
			String password="monPass";
			String developerToken="monIdentif@gmail.com++EUR";
			Map<String, Object> authProps = new HashMap<String, Object>();
		    
		        authProps.put("email", email);
		        authProps.put("password",password);
		        authProps.put("useragent", "bla");
		        authProps.put("developerToken", developerToken);
		        authProps.put("useSandbox", "true");
		    

			
			// connexio
			AdWordsServiceLogger.log();

            AdWordsUser user = new AdWordsUser(authProps);

            
            
			
			// Get the CampaignService.
		      CampaignServiceInterface campaignService1 =
		          user.getService(AdWordsService.V201109.CAMPAIGN_SERVICE);

		      // Create selector.
		      Selector selector = new Selector();
		      selector.setFields(new String[] {"Id", "Name"});
		      selector.setOrdering(new OrderBy[] {new OrderBy("Name", SortOrder.ASCENDING)});
		      
		      // Get all campaigns.
		      CampaignPage page = campaignService1.get(selector);

		      // Display campaigns.
		      if (page.getEntries() != null) {
		        for (Campaign campaign1 : page.getEntries()) {
		          System.out.println("Campaign with name \"" + campaign1.getName() + "\" and id \""
		              + campaign1.getId() + "\" was found.");
		        }
		      } else {
		        System.out.println("No campaigns were found.");
		      }
		    } catch (Exception e) {
		      e.printStackTrace();
		    }

	}
 
Nouveau WRInaute
Autre difficulté, une fois la sandbox installée, elle est en lecture seule (impossible par exemple d'ajouter une campagne). Pour ça, utilisez l'apli google sandbox viewer. A côté de l'user vous avez un numéro entre parenthèse. C'est le clientCustomerId. Ajoutez donc la ligne suivante à authProps pour vous identifier plus clairement :

authProps.put("clientCustomerId", userID);

J'espère que ces indications aideront qq1
 
Discussions similaires
Haut