百度广告联盟api probuf协议对接

百度的广告API使用的是不是通常的http协议,而是使用谷歌开源出来的probuf协议,具体介绍请参考:https://www.jianshu.com/p/b1f18240f0c7https://www.jianshu.com/p/b1f18240f0c7

 

我们对接的客户端使用的是java,所以先会引用相对的jar包,使用的maven,如下:

<dependency>
			<groupId>com.google.protobuf</groupId>
			<artifactId>protobuf-java</artifactId>
			<version>2.5.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.2</version>
		</dependency>
		<dependency>
			<groupId>com.googlecode.protobuf-java-format</groupId>
			<artifactId>protobuf-java-format</artifactId>
			<version>1.2</version>
		</dependency>

  

需要在windows下载probuf的exe文件,来根据协议生成java的实体class

https://download.csdn.net/download/can007/5816063  在这里下载

 

执行脚本来根据百度提供的 aidu_mobads_api_5.proto 文件生成java类

protoc.exe --java_out=./ baidu_mobads_api_5.proto

 

会生成一个这个:

 

然后使用的时候大概是这样:  (会注释掉敏感的)

BaiduMobadsApi5.App.Builder appBuilder = BaiduMobadsApi5.App.newBuilder();
		BaiduMobadsApi5.Version.Builder appversionBuilder = BaiduMobadsApi5.Version.newBuilder();
		appversionBuilder.setMajor(3);
		appversionBuilder.setMinor(2);
		appversionBuilder.setMicro(0);
		appBuilder.setAppId("");
		appBuilder.setAppPackage("");
		appBuilder.setAppVersion(appversionBuilder);
		
		

		BaiduMobadsApi5.AdSlot.Builder adSlotBuilder = BaiduMobadsApi5.AdSlot.newBuilder();
		BaiduMobadsApi5.Size.Builder sizeBuilder = BaiduMobadsApi5.Size.newBuilder();
		sizeBuilder.setWidth(580);
		sizeBuilder.setHeight(90);
		adSlotBuilder.setAdslotId("");
		adSlotBuilder.setAdslotSize(sizeBuilder);

		BaiduMobadsApi5.Device.Builder deviceBuilder = BaiduMobadsApi5.Device.newBuilder();
		
		deviceBuilder.setDeviceType(BaiduMobadsApi5.Device.DeviceType.PHONE);
		deviceBuilder.setOsType(OsType.ANDROID);
		BaiduMobadsApi5.Version.Builder osversionBuilder = BaiduMobadsApi5.Version.newBuilder();
		osversionBuilder.setMajor(8);
		osversionBuilder.setMinor(1);
		osversionBuilder.setMicro(0);		
		deviceBuilder.setOsVersion(osversionBuilder);	
		
		deviceBuilder.setVendor(ByteString.copyFrom("OPPO".getBytes()));
		deviceBuilder.setModel(ByteString.copyFrom("PADM00".getBytes()));
		BaiduMobadsApi5.Size.Builder screensizeBuilder = BaiduMobadsApi5.Size.newBuilder();
		screensizeBuilder.setWidth(800);
		screensizeBuilder.setHeight(600);		
		
		deviceBuilder.setScreenSize(screensizeBuilder);		
		

		BaiduMobadsApi5.UdId.Builder udidBuilder = BaiduMobadsApi5.UdId.newBuilder();
		udidBuilder.setImei("");
		udidBuilder.setAndroidId("");
		udidBuilder.setMac("");
		deviceBuilder.setUdid(udidBuilder);	
		

		BaiduMobadsApi5.Network.Builder networkBuilder = BaiduMobadsApi5.Network.newBuilder();
		networkBuilder.setIpv4("");
		networkBuilder.setConnectionType(ConnectionType.CELL_4G);
		networkBuilder.setOperatorType(OperatorType.CHINA_MOBILE);		
		

		String requestId ="";

		BaiduMobadsApi5.Version.Builder versionBuilder = BaiduMobadsApi5.Version.newBuilder();
		versionBuilder.setMajor(5);
		versionBuilder.setMinor(5);
		versionBuilder.setMicro(0);
		
		MobadsRequest mobadsRequest = MobadsRequest.newBuilder().setRequestId(requestId).setApiVersion(versionBuilder)
				.setApp(appBuilder).setAdslot(adSlotBuilder).setDevice(deviceBuilder).setNetwork(networkBuilder).build();
		
		byte[] content = mobadsRequest.toByteArray();  
		
		BaiduMobadsApi5.MobadsRequest request = BaiduMobadsApi5.MobadsRequest.parseFrom(content);
		System.out.println(request.getApp().getAppId());
		
		System.out.println(mobadsRequest.getApp().getAppId());
		
		
		HttpPost httpPost = new HttpPost("");
		httpPost.setEntity(new ByteArrayEntity(content));
		httpPost.setHeader("Content-type", "application/octet-stream;charset=utf-8");
		CloseableHttpClient m_HttpClient = HttpClients.createDefault();
		
		CloseableHttpResponse httpResponse = m_HttpClient.execute(httpPost);
		
		try {
			HttpEntity entityResponse = httpResponse.getEntity();		
			BaiduMobadsApi5.MobadsResponse response = BaiduMobadsApi5.MobadsResponse.parseFrom(entityResponse.getContent());
//			System.out.println(response.getErrorCode());
//			System.out.println(response.getRequestId());
//			System.out.println(response.getAdsList().get(0).getMaterialMeta().getImageSrc(0));
			
			String jsonFormat =JsonFormat.printToString(response);
			
			System.out.println(jsonFormat);
			
		} finally {
			httpResponse.close();
		}
		
		

  

 

 

 

 

 

 

 

posted @ 2018-10-12 10:33  HarkLee  阅读(2118)  评论(0编辑  收藏  举报