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

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

  1. <dependency>
  2. <groupId>com.google.protobuf</groupId>
  3. <artifactId>protobuf-java</artifactId>
  4. <version>2.5.0</version>
  5. </dependency>
  6.  
  7. <dependency>
  8. <groupId>org.apache.httpcomponents</groupId>
  9. <artifactId>httpclient</artifactId>
  10. <version>4.5.2</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>com.googlecode.protobuf-java-format</groupId>
  14. <artifactId>protobuf-java-format</artifactId>
  15. <version>1.2</version>
  16. </dependency>

  

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

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

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

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

会生成一个这个:

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

  1. BaiduMobadsApi5.App.Builder appBuilder = BaiduMobadsApi5.App.newBuilder();
  2. BaiduMobadsApi5.Version.Builder appversionBuilder = BaiduMobadsApi5.Version.newBuilder();
  3. appversionBuilder.setMajor(3);
  4. appversionBuilder.setMinor(2);
  5. appversionBuilder.setMicro(0);
  6. appBuilder.setAppId("");
  7. appBuilder.setAppPackage("");
  8. appBuilder.setAppVersion(appversionBuilder);
  9.  
  10. BaiduMobadsApi5.AdSlot.Builder adSlotBuilder = BaiduMobadsApi5.AdSlot.newBuilder();
  11. BaiduMobadsApi5.Size.Builder sizeBuilder = BaiduMobadsApi5.Size.newBuilder();
  12. sizeBuilder.setWidth(580);
  13. sizeBuilder.setHeight(90);
  14. adSlotBuilder.setAdslotId("");
  15. adSlotBuilder.setAdslotSize(sizeBuilder);
  16.  
  17. BaiduMobadsApi5.Device.Builder deviceBuilder = BaiduMobadsApi5.Device.newBuilder();
  18.  
  19. deviceBuilder.setDeviceType(BaiduMobadsApi5.Device.DeviceType.PHONE);
  20. deviceBuilder.setOsType(OsType.ANDROID);
  21. BaiduMobadsApi5.Version.Builder osversionBuilder = BaiduMobadsApi5.Version.newBuilder();
  22. osversionBuilder.setMajor(8);
  23. osversionBuilder.setMinor(1);
  24. osversionBuilder.setMicro(0);
  25. deviceBuilder.setOsVersion(osversionBuilder);
  26.  
  27. deviceBuilder.setVendor(ByteString.copyFrom("OPPO".getBytes()));
  28. deviceBuilder.setModel(ByteString.copyFrom("PADM00".getBytes()));
  29. BaiduMobadsApi5.Size.Builder screensizeBuilder = BaiduMobadsApi5.Size.newBuilder();
  30. screensizeBuilder.setWidth(800);
  31. screensizeBuilder.setHeight(600);
  32.  
  33. deviceBuilder.setScreenSize(screensizeBuilder);
  34.  
  35. BaiduMobadsApi5.UdId.Builder udidBuilder = BaiduMobadsApi5.UdId.newBuilder();
  36. udidBuilder.setImei("");
  37. udidBuilder.setAndroidId("");
  38. udidBuilder.setMac("");
  39. deviceBuilder.setUdid(udidBuilder);
  40.  
  41. BaiduMobadsApi5.Network.Builder networkBuilder = BaiduMobadsApi5.Network.newBuilder();
  42. networkBuilder.setIpv4("");
  43. networkBuilder.setConnectionType(ConnectionType.CELL_4G);
  44. networkBuilder.setOperatorType(OperatorType.CHINA_MOBILE);
  45.  
  46. String requestId ="";
  47.  
  48. BaiduMobadsApi5.Version.Builder versionBuilder = BaiduMobadsApi5.Version.newBuilder();
  49. versionBuilder.setMajor(5);
  50. versionBuilder.setMinor(5);
  51. versionBuilder.setMicro(0);
  52.  
  53. MobadsRequest mobadsRequest = MobadsRequest.newBuilder().setRequestId(requestId).setApiVersion(versionBuilder)
  54. .setApp(appBuilder).setAdslot(adSlotBuilder).setDevice(deviceBuilder).setNetwork(networkBuilder).build();
  55.  
  56. byte[] content = mobadsRequest.toByteArray();
  57.  
  58. BaiduMobadsApi5.MobadsRequest request = BaiduMobadsApi5.MobadsRequest.parseFrom(content);
  59. System.out.println(request.getApp().getAppId());
  60.  
  61. System.out.println(mobadsRequest.getApp().getAppId());
  62.  
  63. HttpPost httpPost = new HttpPost("");
  64. httpPost.setEntity(new ByteArrayEntity(content));
  65. httpPost.setHeader("Content-type", "application/octet-stream;charset=utf-8");
  66. CloseableHttpClient m_HttpClient = HttpClients.createDefault();
  67.  
  68. CloseableHttpResponse httpResponse = m_HttpClient.execute(httpPost);
  69.  
  70. try {
  71. HttpEntity entityResponse = httpResponse.getEntity();
  72. BaiduMobadsApi5.MobadsResponse response = BaiduMobadsApi5.MobadsResponse.parseFrom(entityResponse.getContent());
  73. // System.out.println(response.getErrorCode());
  74. // System.out.println(response.getRequestId());
  75. // System.out.println(response.getAdsList().get(0).getMaterialMeta().getImageSrc(0));
  76.  
  77. String jsonFormat =JsonFormat.printToString(response);
  78.  
  79. System.out.println(jsonFormat);
  80.  
  81. } finally {
  82. httpResponse.close();
  83. }

  

 

百度广告联盟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. js重点--匿名函数

    推荐博客:https://www.cnblogs.com/pssp/p/5216668.html 函数是必须要有函数名的,不然没有办法找到它,使用它. 如果没有名字必须要有一个依附体,如:将这个匿名函 ...

  2. An SDN-NFV Platform for Personal Cloud Services

    文章名称:An SDN-NFV Platform for Personal Cloud Services 发表时间:2017 期刊来源:IEEE Transactions on Network and ...

  3. 小程序 input type number 键盘没有小数点

    在此备注一下: <input type="digit"> number:数字键盘(无小数点)idcard:数字键盘(无小数点.有个 X 键)digit:数字键盘(有小数 ...

  4. Excel表格中依据某一列的值,将这列中一样的数据放在一个文件中。

    一需求:按照标题C的内容,一样的数据整理到一个文件中. 二.操作: 1.atl+F11弹出vb窗口 2.点击       插入===>模块   ,复制以下代码,注意这是一个表头为三行的函数(保存 ...

  5. [置顶]Python开发之路

    阅读目录   第一篇:python入门 第二篇:数据类型.字符编码.文件处理 第三篇:函数 第四篇:模块与包 第五篇:常用模块 第六篇:面向对象 第七篇:面向对象高级 第八篇:异常处理 第九篇:网络编 ...

  6. seajs使用方法

    必须执行seajs.use()时,才能自动执行预加载项 <script src="/UILib/sea.js"></script> <script s ...

  7. mac air中编译安装swoole

    本机php版本, 我的7.3.0 1 下载swoole源码 https://github.com/swoole/swoole-src/releases 我下载的版本是swoole-src-4.3.3. ...

  8. java多线程基础篇第一篇

    1.在开始多线程之前,我们先来聊聊计算机的缓存 计算机处理一个程序需要cpu处理器与存储设备的交互.但是在计算机发展的过程中,cpu处理器的处理速度不断提高,而存储设备的读写速度却没有得到与cpu同样 ...

  9. JavaScript的Document ,Histroy,Location对象

    1.  Document对象: a)         属性: 名称 描述 alinkColor 设置或检索文档中所有活动链接的颜色 bgColor 设置或检索 Document 对象的背景色 body ...

  10. Spring框架-IOC/DI详细学习

    一.IOC/DI概念 参考博客:https://www.cnblogs.com/xdp-gacl/p/4249939.html IOC(inversion of control, 控制反转)是一种设计 ...