百度广告联盟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();
}
百度广告联盟api probuf协议对接的更多相关文章
- 16个值得个人站长做的广告联盟[转自cnzz]
建站也有好多年了,也建了几个站,有些微波收入, 反复测试了挺多广告联盟, 下面介绍一下: 1.googleadsense联盟: 推荐指数:☆☆☆☆☆ Google广告联盟是现在信誉最好的广告提供商之一 ...
- 跨域解决方案之JSONP,通过借助调用百度搜索的API了解跨域案例
跨域解决方案之JSONP 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web ...
- 流量如何才能变现?实际测试谷歌广告联盟(Google Adsense)的广告效果以及如何优化相关代码
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_150 2010年,谷歌正式退出中国市场,无数人扼腕叹息,如今十年过去了,谷歌还有两条重要的业务线并没有完全退出,一个是页面统计业务 ...
- 百度广告 高亮 Chrome插件(附源码)
一前言 百度最近是上了舆论头条了,相信中过百度毒的人对百度都反感.百度自己挖了这么多坑,终究还是要自己来填.国内网民使且最频繁的搜过 还是以百度为主,而百度依靠这种市场占有率靠他的广告竞价排名大发横财 ...
- 诚信的cpm广告联盟该怎么选择
诚信的cpm广告联盟该怎么选择?58传媒广告联盟介绍说,在目前我国的互联网行业发展中,新站长在不断的崛起,这也就意味着老站长在不断的衰败,而老站长的衰败并不是一天两天造成的,而是其长期积累形成的,将错 ...
- 最好的cpm广告联盟哪里有
最好的cpm广告联盟哪里有,58传媒广告联盟还要提醒众位站长的是网站在经营发展中必须最大化的扩展自己的优势力量.每个网站都有属于自己的优势魅力,这些优势特点只有得到最大化的发挥才能为网站带来意想不到的 ...
- 如何结合自己本地数据库,使用【百度地图】API
如何结合自己本地数据库,使用[百度地图]API百度地图使用越来越多,官网上的示例数据都是写死的,实际上我们的开发中的数据都是从数据库中取出来的,最近看了很多大神的文章,结合自己本地数据库使用百度地图A ...
- 百度地图JavaScript API覆盖物旋转时出现偏移
在项目中,调用百度地图JavaScript API,做覆盖物的旋转再添加到地图上,结果出现偏移了. 调试过程中的效果图: 发现图片的旋转并不是按车子的中心来的,而是之外的一个点.最后发现犯了一个很细节 ...
- 百度地图代码API
百度地图代码API: http://api.map.baidu.com/lbsapi/creatmap/index.html
随机推荐
- The 19th Zhejiang University Programming Contest - H
Princess Cjb is caught by Heltion again! Her knights Little Sub and Little Potato are going to Helti ...
- 04-oracle中的视图
1.创建视图 介绍: 视图(View)通过SELECT查询语句定义,它是从一个或多个表(或视图)导出的,用来导出视图的表称为基表(Base Table),导出的视图称为虚表.在数据库中,只存储视图的定 ...
- metasploit与Cobaltstrike互相派生shell
msf 派生 shell 给 Cobalt strike(前提有一个meterpreter) msf exploit(handler) > use exploit/windows/local/p ...
- 实现IOC功能的简单Spring框架
需求分析 设计一个含有IOC的简单Spring,要求含有对象注册.对象管理以及暴露给外部的获取对象功能. 项目设计 对于注册的对象用一个类BeanInfo来描述其信息,包括对象标识.全类名以及属性名与 ...
- c语言变量及输入输出
scanf: 格式字符串的一般形式:%[*][输入数据宽度][长度] 类型 (其中有方括号[] 的项为任选项.) 各项意义: 1) 类型:表示输入数据的类型,其格式符和意义如下表所示. ...
- Python appium搭建app自动化测试环境
appium做app自动化测试,环境搭建是比较麻烦的. 也是很多初学者在学习app自动化之时,花很多时间都难跨越的坎. 但没有成功的环境,就没有办法继续后续的使用. 在app自动化测试当中,我们主要是 ...
- C# 解析torrent文件
基础知识: torrent文件信息存储格式: bencoding是一种以简洁格式指定和组织数据的方法.支持下列类型:字节串.整数.列表和字典. 1 字符串存储格式: <字符串的长度>:& ...
- python核心编程(多线程编程)
1.全局解释器锁 2.threading模块 thread类
- docker安装redis
查询镜像 docker search redis 拉取镜像 docker pull redis 启动容器 docker run --name redis -p 6379:6379 -d --resta ...
- js的splice方法
splice是js原生处理数组的方法,可以在不改变引用的情况下对数组处理 arrayObject.splice(index,howmany,item1,.....,itemX)参数 描述index 必 ...