package com.github.libsgh.tieba.api; import java.util.Map; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import cn.hutool.core.lang.Console; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.http.HttpRequest; public class TieBaLiveApi { /** * 贴吧直播获取任务列表 * @param bduss * @param stoken * @return */ public static JSONObject taskList(String bduss, String stoken) { return commonRequest("http://c.tieba.baidu.com/ala/user/taskList", bduss, stoken); } /** * 贴吧直播提交任务 * @param bduss * @param stoken * @param taskId * @return */ public static JSONObject taskCommit(String bduss, String stoken, Integer taskId) { return commonRequest("http://c.tieba.baidu.com/ala/user/taskCommit", bduss, stoken, "task_id="+taskId); } /** * 贴吧直播任务领取并开启下一阶段 * @param bduss * @param stoken * @param taskId * @return */ public static JSONObject taskReward(String bduss, String stoken, Integer taskId) { return commonRequest("http://c.tieba.baidu.com/ala/user/taskReward", bduss, stoken, "task_id="+taskId); } /** * 贴吧直播间赞 * @param bduss * @param stoken * @param liveId * @return */ public static JSONObject zan(String bduss, String stoken, String liveId) { return commonRequest("http://c.tieba.baidu.com/ala/live/zan", bduss, stoken, "is_first=1", "live_id="+liveId, "zan_type_id=1"); } /** * 贴吧直播首页大厅 * @param bduss * @param stoken * @param liveId * @return */ public static JSONObject tbLiveTab(String bduss, String stoken, Integer pn) { return commonRequest("http://c.tieba.baidu.com/c/f/video/tbLiveTab", bduss, stoken, "pn=1"); } public static JSONObject getAlaScores(String bduss, String stoken) { return commonRequest("http://c.tieba.baidu.com/ala/user/getAlaScores", bduss, stoken); } /** * 贴吧直播用户关注的主播 * @param bduss * @param stoken * @param liveId * @return */ public static JSONObject tbLiveTabUserLike(String bduss, String stoken, Integer pn) { return commonRequest("http://c.tieba.baidu.com/c/f/video/tbLiveTabUserLike", bduss, stoken, "pn=1"); } public static JSONObject globalSwitchPush(String bduss, String stoken) { return commonRequest("http://c.tieba.baidu.com/ala/relation/globalSwitchPush", bduss, stoken, "switch=1"); } /** * 关注一个主播 * @param bduss * @param stoken * @param liveId * @return */ public static JSONObject follow(String bduss, String stoken, String portrait) { return commonRequest("http://c.tieba.baidu.com/c/c/user/follow", bduss, stoken, "portrait="+portrait,"in_live=1", "from_type=0"); } /** * 取消关注一个主播 * @param bduss * @param stoken * @param liveId * @return */ public static JSONObject unfollow(String bduss, String stoken, String portrait) { return commonRequest("http://c.tieba.baidu.com/c/c/user/unfollow", bduss, stoken, "portrait="+portrait); } /** * 公共请求方法 * @param url * @param bduss * @param stoken * @param params * @return */ public static JSONObject commonRequest(String url, String bduss, String stoken, String... params) { HttpRequest request = HttpRequest.post(url) .form("BDUSS", bduss) .form("stoken", stoken) .form("_client_version", "10.3.8.1") .form("_client_type", 2) .form("timestamp", System.currentTimeMillis()); for (String param : params) { request.form(StrUtil.subBefore(param, "=", false), StrUtil.subAfter(param, "=", false)); } request.form("tbs", getTbs(bduss)); Map<String, Object> formMap = request.form(); formMap = MapUtil.sort(formMap); StringBuilder sb = new StringBuilder(); for (String key : formMap.keySet()) { sb.append(String.format("%s=%s", key, formMap.get(key)).toString()); } sb.append("tiebaclient!!!"); String sign = SecureUtil.md5(sb.toString()).toUpperCase(); String body = request.form("sign", sign).execute().body(); if(StrUtil.isNotBlank(body)) { return JSON.parseObject(body); } return null; } /** * 获取tbs * @param bduss bduss * @return tbs tbs */ public static String getTbs(String bduss){ String result = HttpRequest.get("http://tieba.baidu.com/dc/common/tbs").cookie("BDUSS="+bduss).execute().body(); return JSON.parseObject(result).getString("tbs"); } /** * 获取观众列表 * @param bduss * @param stoken * @param liveId * @return */ public static JSONObject getAudienceList(String bduss, String stoken, String liveId){ return commonRequest("http://c.tieba.baidu.com/ala/user/getAudienceList", bduss, stoken, "live_id="+liveId, "type=audience"); } /** * 获取贴吧所有主播 * @param bduss * @param stoken * @param pn * @return */ public static JSONObject liveBarSpecialTab(String bduss, String stoken , Integer pn){ return commonRequest("http://c.tieba.baidu.com/c/f/video/liveBarSpecialTab", bduss, stoken, "tab_name=推荐", "pn="+pn, "net_type=4"); } public static String getUserProfile(String uid) { String result = ""; try { if(StrUtil.isNotBlank(uid)) { //2.根据uid获取用户信息 HttpRequest request = HttpRequest.post("http://c.tieba.baidu.com/c/u/user/profile") .form("_client_version", "6.1.2") .form("has_plist", "2") .form("need_post_count", "1") .form("uid", uid); Map<String, Object> formMap = request.form(); formMap = MapUtil.sort(formMap); StringBuilder sb = new StringBuilder(); for (String key : formMap.keySet()) { sb.append(String.format("%s=%s", key, formMap.get(key)).toString()); } sb.append("tiebaclient!!!"); String sign = SecureUtil.md5(sb.toString()).toUpperCase(); String body = request.form("sign", sign).execute().body(); return body; }else { Console.log("用户信息查找失败"); } } catch (Exception e) { Console.error(e.getMessage(), e); } return result; } }