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

  

 

百度广告联盟api probuf协议对接的更多相关文章

  1. 16个值得个人站长做的广告联盟[转自cnzz]

    建站也有好多年了,也建了几个站,有些微波收入, 反复测试了挺多广告联盟, 下面介绍一下: 1.googleadsense联盟: 推荐指数:☆☆☆☆☆ Google广告联盟是现在信誉最好的广告提供商之一 ...

  2. 跨域解决方案之JSONP,通过借助调用百度搜索的API了解跨域案例

    跨域解决方案之JSONP 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web ...

  3. 流量如何才能变现?实际测试谷歌广告联盟(Google Adsense)的广告效果以及如何优化相关代码

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_150 2010年,谷歌正式退出中国市场,无数人扼腕叹息,如今十年过去了,谷歌还有两条重要的业务线并没有完全退出,一个是页面统计业务 ...

  4. 百度广告 高亮 Chrome插件(附源码)

    一前言 百度最近是上了舆论头条了,相信中过百度毒的人对百度都反感.百度自己挖了这么多坑,终究还是要自己来填.国内网民使且最频繁的搜过 还是以百度为主,而百度依靠这种市场占有率靠他的广告竞价排名大发横财 ...

  5. 诚信的cpm广告联盟该怎么选择

    诚信的cpm广告联盟该怎么选择?58传媒广告联盟介绍说,在目前我国的互联网行业发展中,新站长在不断的崛起,这也就意味着老站长在不断的衰败,而老站长的衰败并不是一天两天造成的,而是其长期积累形成的,将错 ...

  6. 最好的cpm广告联盟哪里有

    最好的cpm广告联盟哪里有,58传媒广告联盟还要提醒众位站长的是网站在经营发展中必须最大化的扩展自己的优势力量.每个网站都有属于自己的优势魅力,这些优势特点只有得到最大化的发挥才能为网站带来意想不到的 ...

  7. 如何结合自己本地数据库,使用【百度地图】API

    如何结合自己本地数据库,使用[百度地图]API百度地图使用越来越多,官网上的示例数据都是写死的,实际上我们的开发中的数据都是从数据库中取出来的,最近看了很多大神的文章,结合自己本地数据库使用百度地图A ...

  8. 百度地图JavaScript API覆盖物旋转时出现偏移

    在项目中,调用百度地图JavaScript API,做覆盖物的旋转再添加到地图上,结果出现偏移了. 调试过程中的效果图: 发现图片的旋转并不是按车子的中心来的,而是之外的一个点.最后发现犯了一个很细节 ...

  9. 百度地图代码API

    百度地图代码API: http://api.map.baidu.com/lbsapi/creatmap/index.html

随机推荐

  1. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...

  2. Exp6 信息收集与漏洞扫描

    一.实践过程 1.信息收集 1.1 通过DNS和IP查询目标网站的信息 (1)whois命令用来进行域名注册信息查询,可查询到3R注册信息,包括注册人的姓名.组织和城市等信息. whois baidu ...

  3. JMeter命令行监控CPU

    JMeter 命令行执行脚本得到的报告中,是没有CPU.内存使用率等监控数据的,我们可以使用JMeter插件帮忙. 首先,需要下载JMeterPlugins-Standard.jar,jmeter-p ...

  4. ES6随手学

    1.遍历字符串 for (let codePoint of 'foo') { console.log(codePoint) } 格式:for(let  print  of  string){  } p ...

  5. Java虚拟机内存溢出异常--《深入理解Java虚拟机》学习笔记及个人理解(三)

    Java虚拟机内存溢出异常--<深入理解Java虚拟机>学习笔记及个人理解(三) 书上P39 1. 堆内存溢出 不断地创建对象, 而且保证创建的这些对象不会被回收即可(让GC Root可达 ...

  6. html常用标签的取值和赋值操作

    我们在html页面当中,面对各种各样的标签,经常需要处理取值和赋值的问题,下面,就把常见的一些html标签元素的取值和赋值操作进行总结整理,以后备用. 1.button:改变button按钮上面的值, ...

  7. PMP知识点(五)——配置管理

    配置控制重点关注可交付成果及各个过程的技术规范,而变更控制则着眼于识别.记录.批准或否决对项目文件,可交付成果或基准的变更. 包括在实施整体变更控制过程中的部分配置管理活动有: 1.配置识别. 识别与 ...

  8. JAVA通过http访问其他服务端API

    项目要实现这么一个功能,用户通过点击按钮,通过axios来访问python的API(算法,java不好做)得到一个结果存储到数据库并且返回到页面. 但是python不是在tomcat上面运行的,所以不 ...

  9. jar包中File 文件找不到的异常分析与解决

    源链接: http://hxraid.iteye.com/blog/483115#comments 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会 ...

  10. react 监听页面滚动

    html: // 如果使用typescript, 定义dom类型 private dom: HTMLDivElement | null // ReactJS中,对Div监听只需要绑定 onScroll ...