{}吧 关注:4,176贴子:1,723
  • 6回复贴,共1

【贴吧API解析】之 客户端篇

取消只看楼主收藏回复

本帖将介绍:
贴吧客户端API调用方法
如何抓
贴吧机制 等


来自Windows8客户端1楼2014-01-19 10:08回复
    ·························· 1、发送请求
    客户端接口是以HTTP的形式提供的,因此就需要发送HTTP请求。
    C++ JAVA 易语言 百度一大堆
    JS用PHP做中转,下面是一个易用的简单PHP类:
    http://tieba.baidu.com/p/2822135437
    百度客户端的Host固定为c.tieba.baidu.com


    来自Windows8客户端2楼2014-01-19 10:23
    回复
      ························2、sign算法
      我们随便抓一个包,都会发现一个sign
      他是一个MD5值。
      那么,他是怎么算的呢?
          “
         Post请求按名称的字母顺序升序排列 ->去掉所有& -> 末尾加上tiebaclient!!! -> MD5
                ”
      下面是代码:
      _s.tiebaApi.sendTieba = function (fullpath, post, hdd) {
      _.sendOutserveredHttpWithCookie("", "c.tieba.baidu.com", fullpath, "POST", "BDUSS=" + encodeURIComponent(_s.tiebaApi.getBduss()) + "&_client_id=a0112ba8-b146-45c5-bb18-5b9fdde4917b&_client_type=4&_client_version=1.3.3&_phone_imei=" +
      "05-00-54-20-06-00-01-00-04-00-9C-35-01-00-26-28-02-00-24-14-09-00-32-53&net_type=3" + (function () {
      if (post != "") {
      return "&";
      } else {
      return "";
      }
      })() + post + "&sign=" + (function () {
      /*return _.md5sun(String("BDUSS=" + encodeURIComponent(_s.tiebaApi.getBduss()) + "&_client_id=a0112ba8-b146-45c5-bb18-5b9fdde4917b&_client_type=4&_client_version=1.3.3&_phone_imei=" +
      "05-00-54-20-06-00-01-00-04-00-9C-35-01-00-26-28-02-00-24-14-09-00-32-53&net_type=3" + post).toUpperCase().replace(/&/g, "") + "tiebaclient!!!");*/
      var allpost = String("BDUSS=" + encodeURIComponent(_s.tiebaApi.getBduss()) + "&_client_id=a0112ba8-b146-45c5-bb18-5b9fdde4917b&_client_type=4&_client_version=1.3.3&_phone_imei=" +
      "05-00-54-20-06-00-01-00-04-00-9C-35-01-00-26-28-02-00-24-14-09-00-32-53&net_type=3&" + post);
      var joinednoandargs = decodeURIComponent(allpost).split("&").sort().join("");
      return _.md5sun(joinednoandargs + "tiebaclient!!!");
      })(), 80, hdd);
      }
      这个是Webdows用来发贴吧的。。基于那个PHP。


      来自Windows8客户端3楼2014-01-19 11:06
      回复
        ·········3、登录
        POST /c/s/login
          参数:
           un: 用户名
           passwd: base64编码的密码
           sign
          返回:
           JSON{
            .anti.need_vcode: 是否需要验证码
              如果为1,客户端需要保存下.anti.vcode_md5的值,然后显示验证码图
              片.anti.vcode_pic_url,用户点击确定后再发一次请求,参数加上
              vcode_md5=之前保存的.anti.vcode_md5,vcode=验证码内容。
            .error_code: 错误吗,如果不等于0则向用户显示.error_msg。
            .user.BDUSS: 此次的会话标识符(BDUSS),标识符在用户主动注销前一
              直有效。每次操作都需要此标识符。
            .user.id: 用户的UID。
           }


        4楼2014-01-22 20:19
        回复
          ···········4、注销(销毁当前BDUSS)
          POST /c/s/loginout
            参数:
             BDUSS
             sign
            返回:
             JSON{
              .error_code: 0
             }


          5楼2014-01-22 20:21
          回复
            ············5、获得喜欢的吧
            javascript -------------------------------------------------------------
             _s.tiebaApi.getLikeKWs = function (hdd) {
              _s.tiebaApi.sendTieba("/c/f/forum/favolike", "pn=1",
              function (q) {
               if (ifnoerror(q)) {
                hdd(JSON.parse(q.body).forum_list);
               } else {
                hdd([]);
               }
              });
             }
            POST /c/f/forum/favolike
              参数:
               BDUSS
               pn: 页数
               sign
              返回:
               JSON{
                .error_code: 0
                .forum_list: 当前页
                .page: 参见 附录 1 page字段
               }


            6楼2014-01-22 20:27
            回复
              ···················6、签到
              javascript -------------------------------------------------------------
               _s.tiebaApi.sign = function (kw, hdd) {
                _s.tiebaApi.userInfo(0, function (q) {
                 _s.tiebaApi.sendTieba("/c/c/forum/sign", "kw=" +
                  encodeURIComponent(kw) + "&tbs=" +
                  encodeURIComponent(q.anti.tbs), function (q) {
                  if (ifnoerror(q)) {
                   hdd(JSON.parse(q.body));
                  } else {
                   hdd(false);
                  }
                 });
                })
               };
              此操作永远不会要求验证码。
              POST /c/c/forum/sign
              参数:
                 BDUSS
                 kw: 要签到的吧
                 tbs: 参见附录 2 tiebaUserSession
                 sign
                返回:
                 JSON{
                  .error_code: 0
                 }


              7楼2014-01-22 20:30
              回复