• 百度广告联盟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();
    		}
    		
    		
    

      

     

  • 相关阅读:
    磁带库概念
    5、管理类概念
    4、客户机策略配置
    3、TSM节点配置
    2、TSM存储组件
    1、TSM简介
    day04-装饰器
    第二个UI脚本--Python+selenium之unittest+HTMLtestRunner及python的继承
    第一个UI脚本--python+selenium
    Python--类使用
  • 原文地址:https://www.cnblogs.com/hark0623/p/9776715.html
Copyright © 2020-2023  润新知