增加 直播站 API

This commit is contained in:
czp3009 2019-03-13 17:31:02 +08:00
parent ef55946701
commit c4953c020e
15 changed files with 999 additions and 32 deletions

View File

@ -46,10 +46,9 @@ interface LiveAPI {
*/
@GET("/room/v1/Danmu/getConf")
fun getDanmakuConfig(
@Field("room_id") roomId: Long
@Query("room_id") roomId: Long
): Deferred<DanmakuConfig>
/**
* 获取该房间的主播的头像和等级一类的信息
*
@ -84,8 +83,104 @@ interface LiveAPI {
/**
* 查询是否关注了当前主播
*
* @param follow 所查询的主播的用户 ID
*/
@POST("/relation/v1/Feed/isFollowed")
@FormUrlEncoded
fun isFollowed(@Field("follow") follow: Long): Deferred<Follow>
/**
* 进入直播间的时候, 客户端会访问该接口来动态获取上方的 Tab. 包括 互动, 主播, 贡献榜
*
* @param roomId 房间号
*/
@Suppress("SpellCheckingInspection")
@GET("/room/v2/Room/mobileTab")
fun mobileTab(@Query("roomid") roomId: Long): Deferred<MobileTab>
/**
* 获取房间的历史弹幕(10)
*
* @param roomId 房间号
*/
@GET("/AppRoom/msg")
fun roomMessage(@Query("room_id") roomId: Long): Deferred<RoomMessage>
/**
* 获取进房后右下角显示的那些东西, 通常是一些活动, 它们导向 H5 页面
*
* @param roomId 房间号
* @param roomUserId 主播的用户 ID
*/
@Suppress("SpellCheckingInspection")
@GET("/activity/v1/Common/mobileRoomBanner")
fun mobileRoomBanner(
@Query("area_v2_id") areaV2Id: Int,
@Query("area_v2_parent_id") areaV2ParentId: Int,
@Query("roomid") roomId: Long,
@Query("ruid") roomUserId: Long
): Deferred<MobileRoomBanner>
/**
* 获取各种礼物的基本信息, 包括贴图地址, 描述, 价格等
*/
@Suppress("SpellCheckingInspection")
@GET("/gift/v3/live/gift_config")
fun getGiftConfig(
@Query("area_v2_id") areaV2Id: Int,
@Query("area_v2_parent_id") areaV2ParentId: Int,
@Query("roomid") roomId: Long
): Deferred<GiftConfig>
/**
* 获取访问 小时总榜 的地址(H5)
*/
@Suppress("SpellCheckingInspection")
@GET("/rankdb/v1/Common/roomRank")
fun roomRank(
@Query("area_v2_id") areaV2Id: Int,
@Query("area_v2_parent_id") areaV2ParentId: Int,
@Query("roomid") roomId: Long,
@Query("ruid") roomUserId: Long
): Deferred<RoomRank>
/**
* 直播站首页
* 首页 -> 直播
*/
@Suppress("SpellCheckingInspection")
@GET("/xlive/app-interface/v2/index/getAllList")
fun homePage(
@Query("quality") quality: Int = 0,
@Query("rec_page") recPage: Int = 2,
@Query("relation_page") relationPage: Int = 2,
@Query("scale") scale: String = "xxhdpi"
): Deferred<HomePage>
/**
* 获取某个直播分类下的全部子分类
*/
@GET("/room/v1/Area/getList")
fun getAreaList(@Query("parent_id") parentId: Int): Deferred<AreaList>
/**
* 根据某种维度来获取房间列表
* area, parent, category 0 表示不筛选这些维度
* sortType null 表示不排序
*
* 首页 -> 直播 -> 查看更多/全部直播
*
* @param page 分页, 1 开始
* @param sortType 排序维度, 已知的有 online(最热直播), live_time(最新开播)
*/
@GET("/room/v3/Area/getRoomList")
fun getRoomList(
@Query("area_id") areaId: Int = 0,
@Query("parent_area_id") parentAreaId: Int = 0,
@Query("cate_id") categoryId: Int = 0,
@Query("page") page: Int = 1,
@Query("page_size") pageSize: Int = 30,
@Query("sort_type") sortType: String? = null
): Deferred<RoomList>
}

View File

@ -26,7 +26,7 @@ data class AnchorInRoom(
@SerializedName("gender")
var gender: Int, // 0
@SerializedName("identification")
var identification: Int? = null, // 1
var identification: Int?, // 1
@SerializedName("mobile_verify")
var mobileVerify: Int, // 0
@SerializedName("official_verify")
@ -62,7 +62,7 @@ data class AnchorInRoom(
@SerializedName("master_level")
var masterLevel: MasterLevel,
@SerializedName("rcost")
var rcost: Int, // 3668592
var rcost: Long, // 3668592
@SerializedName("svip")
var svip: Int, // 0
@SerializedName("svip_time")

View File

@ -0,0 +1,39 @@
package com.hiczp.bilibili.api.live.model
import com.google.gson.annotations.SerializedName
data class AreaList(
@SerializedName("code")
var code: Int, // 0
@SerializedName("data")
var `data`: List<Data>,
@SerializedName("message")
var message: String, // success
@SerializedName("msg")
var msg: String // success
) {
data class Data(
@SerializedName("act_id")
var actId: String, // 0
@SerializedName("area_type")
var areaType: Int, // 0
@SerializedName("hot_status")
var hotStatus: Int, // 0
@SerializedName("id")
var id: String, // 34
@SerializedName("lock_status")
var lockStatus: String, // 0
@SerializedName("name")
var name: String, // 音乐台
@SerializedName("old_area_id")
var oldAreaId: String, // 7
@SerializedName("parent_id")
var parentId: String, // 1
@SerializedName("parent_name")
var parentName: String, // 娱乐
@SerializedName("pic")
var pic: String, // https://i0.hdslb.com/bfs/vc/8537694f4fe68ab0798dd5d493d3ca5deb908088.png
@SerializedName("pk_status")
var pkStatus: String // 0
)
}

View File

@ -0,0 +1,88 @@
package com.hiczp.bilibili.api.live.model
import com.google.gson.annotations.SerializedName
data class GiftConfig(
@SerializedName("code")
var code: Int, // 0
@SerializedName("data")
var `data`: List<Data>,
@SerializedName("message")
var message: String, // success
@SerializedName("msg")
var msg: String // success
) {
data class Data(
@SerializedName("animation_frame_num")
var animationFrameNum: Int, // 12
@SerializedName("bag_gift")
var bagGift: Int, // 0
@SerializedName("broadcast")
var broadcast: Int, // 0
@SerializedName("bullet_head")
var bulletHead: String,
@SerializedName("bullet_tail")
var bulletTail: String,
@SerializedName("coin_type")
var coinType: String, // gold
@SerializedName("corner_background")
var cornerBackground: String,
@SerializedName("corner_mark")
var cornerMark: String, // 祈愿
@SerializedName("count_map")
var countMap: List<CountMap>,
@SerializedName("desc")
var desc: String, // 祥瑞御免,家宅平安。
@SerializedName("draw")
var draw: Int, // 0
@SerializedName("effect")
var effect: Int, // 0
@SerializedName("frame_animation")
var frameAnimation: String, // https://i0.hdslb.com/bfs/live/4e19f947d0bd346d38fe4838d7ab431d003f9d7f.png
@SerializedName("full_sc_horizontal")
var fullScHorizontal: String,
@SerializedName("full_sc_horizontal_svga")
var fullScHorizontalSvga: String,
@SerializedName("full_sc_vertical")
var fullScVertical: String,
@SerializedName("full_sc_vertical_svga")
var fullScVerticalSvga: String,
@SerializedName("full_sc_web")
var fullScWeb: String,
@SerializedName("gif")
var gif: String, // https://i0.hdslb.com/bfs/live/a90ff57209661b309f121116682bdee1f3937a98.gif
@SerializedName("gift_type")
var giftType: Int, // 1
@SerializedName("id")
var id: Int, // 30136
@SerializedName("img_basic")
var imgBasic: String, // https://s1.hdslb.com/bfs/live/a7c750335ed42ae4dfeb70570804326d3ecaf61c.png
@SerializedName("img_dynamic")
var imgDynamic: String, // https://i0.hdslb.com/bfs/live/f6f314227e7ed8065c4f7266ada913289971f806.png
@SerializedName("limit_interval")
var limitInterval: Int, // 0
@SerializedName("name")
var name: String, // 御守
@SerializedName("price")
var price: Int, // 1000
@SerializedName("privilege_required")
var privilegeRequired: Int, // 0
@SerializedName("rights")
var rights: String, // 当前主播亲密度+10 经验值+1000
@SerializedName("rule")
var rule: String, // 赠送御守即可参与“敬祈照准”活动。
@SerializedName("stay_time")
var stayTime: Int, // 3
@SerializedName("type")
var type: Int, // 0
@SerializedName("webp")
var webp: String // https://i0.hdslb.com/bfs/live/6d8a7907cf89556d074b8ce220e7dd56ccaf5160.webp
) {
data class CountMap(
@SerializedName("num")
var num: Int, // 2333
@SerializedName("text")
var text: String
)
}
}

View File

@ -0,0 +1,393 @@
package com.hiczp.bilibili.api.live.model
import com.google.gson.JsonElement
import com.google.gson.annotations.SerializedName
data class HomePage(
@SerializedName("code")
var code: Int, // 0
@SerializedName("data")
var `data`: Data,
@SerializedName("message")
var message: String, // 0
@SerializedName("ttl")
var ttl: Int // 1
) {
data class Data(
@SerializedName("activity_card")
var activityCard: List<JsonElement>,
@SerializedName("area_entrance")
var areaEntrance: List<AreaEntrance>,
@SerializedName("area_entrance_v2")
var areaEntranceV2: List<JsonElement>,
@SerializedName("banner")
var banner: List<Banner>,
@SerializedName("hour_rank")
var hourRank: List<HourRank>,
@SerializedName("interval")
var interval: Int, // 10
@SerializedName("is_sky_horse_gray")
var isSkyHorseGray: Int, // 0
@SerializedName("my_idol")
var myIdol: List<MyIdol>,
@SerializedName("my_tag")
var myTag: List<MyTag>,
@SerializedName("room_list")
var roomList: List<Room>,
@SerializedName("sea_patrol")
var seaPatrol: List<JsonElement>
) {
data class MyTag(
@SerializedName("extra_info")
var extraInfo: ExtraInfo,
@SerializedName("list")
var list: List<X>,
@SerializedName("module_info")
var moduleInfo: ModuleInfo
) {
data class X(
@SerializedName("area_v2_id")
var areaV2Id: Int, // 0
@SerializedName("area_v2_name")
var areaV2Name: String, // 全部标签
@SerializedName("area_v2_parent_id")
var areaV2ParentId: Int, // 0
@SerializedName("area_v2_parent_name")
var areaV2ParentName: String,
@SerializedName("is_advice")
var isAdvice: Int, // 1
@SerializedName("link")
var link: String, // http://live.bilibili.com/app/mytag/
@SerializedName("pic")
var pic: String // http://i0.hdslb.com/bfs/vc/ff03528785fc8c91491d79e440398484811d6d87.png
)
data class ModuleInfo(
@SerializedName("count")
var count: Int, // 0
@SerializedName("id")
var id: Int, // 28
@SerializedName("link")
var link: String,
@SerializedName("pic")
var pic: String,
@SerializedName("sort")
var sort: Int, // 1
@SerializedName("title")
var title: String, // 常用标签
@SerializedName("type")
var type: Int // 12
)
data class ExtraInfo(
@SerializedName("is_gray")
var isGray: Int, // 0
@SerializedName("offline")
var offline: List<JsonElement>
)
}
data class Room(
@SerializedName("list")
var list: List<X>,
@SerializedName("module_info")
var moduleInfo: ModuleInfo
) {
data class X(
@SerializedName("accept_quality")
var acceptQuality: List<Int>,
@SerializedName("area_v2_id")
var areaV2Id: Int, // 96
@SerializedName("area_v2_name")
var areaV2Name: String, // 其他绘画
@SerializedName("area_v2_parent_id")
var areaV2ParentId: Int, // 4
@SerializedName("area_v2_parent_name")
var areaV2ParentName: String, // 绘画
@SerializedName("broadcast_type")
var broadcastType: Int, // 0
@SerializedName("click_callback")
var clickCallback: String,
@SerializedName("cover")
var cover: String, // http://i0.hdslb.com/bfs/live/room_cover/6ef5b522bdf4de9fe2535b6031ae9b32c405cea0.jpg
@SerializedName("current_quality")
var currentQuality: Int, // 4
@SerializedName("face")
var face: String, // http://i0.hdslb.com/bfs/face/c165088330c1bd7f671b427b610379603aa002ae.jpg
@SerializedName("group_id")
var groupId: Int, // 0
@SerializedName("link")
var link: String,
@SerializedName("online")
var online: Int, // 5584
@SerializedName("pendent_ru")
var pendentRu: String,
@SerializedName("pendent_ru_color")
var pendentRuColor: String,
@SerializedName("pendent_ru_pic")
var pendentRuPic: String,
@SerializedName("pk_id")
var pkId: Int, // 0
@SerializedName("play_url")
var playUrl: String, // http://ws.live-play.acgvideo.com/live-ws/403834/live_397298321_43558493.flv?wsSecret=9dc8725a77c8ef5c68545e436f53b917&wsTime=1552470101&trid=9179fec58e79438aab34a9bbe5087e33&sig=no
@SerializedName("play_url_h265")
var playUrlH265: String,
@SerializedName("rec_type")
var recType: Int, // 0
@SerializedName("roomid")
var roomid: Long, // 21218600
@SerializedName("session_id")
var sessionId: String, // 456BB3BF-16D6-4BD3-9B4E-4570C274CEE5
@SerializedName("show_callback")
var showCallback: String,
@SerializedName("title")
var title: String, // 学员答疑1300~2100
@SerializedName("uname")
var uname: String // 轻微课魔鬼绘画特训班
)
data class ModuleInfo(
@SerializedName("count")
var count: Int, // 0
@SerializedName("id")
var id: Int, // 8
@SerializedName("link")
var link: String, // http://live.bilibili.com/app/area?parent_area_id=4&parent_area_name=绘画&area_id=&area_name=
@SerializedName("pic")
var pic: String, // http://i0.hdslb.com/bfs/live/7c54d7cc64e022845fccd63221de069b71eb6f67.png
@SerializedName("sort")
var sort: Int, // 25
@SerializedName("title")
var title: String, // 绘画
@SerializedName("type")
var type: Int // 9
)
}
data class AreaEntrance(
@SerializedName("list")
var list: List<X>,
@SerializedName("module_info")
var moduleInfo: ModuleInfo
) {
data class ModuleInfo(
@SerializedName("count")
var count: Int, // 0
@SerializedName("id")
var id: Int, // 2
@SerializedName("link")
var link: String,
@SerializedName("pic")
var pic: String,
@SerializedName("sort")
var sort: Int, // 2
@SerializedName("title")
var title: String, // 分区入口
@SerializedName("type")
var type: Int // 2
)
data class X(
@SerializedName("content")
var content: String,
@SerializedName("id")
var id: Int, // 45
@SerializedName("link")
var link: String, // http://live.bilibili.com/app/area?parent_area_id=1&parent_area_name=娱乐&area_id=199&area_name=虚拟主播
@SerializedName("pic")
var pic: String, // http://i0.hdslb.com/bfs/vc/7725a45469b776ee91f2d42afca1e5711f84ac51.png
@SerializedName("title")
var title: String // 虚拟主播
)
}
data class Banner(
@SerializedName("list")
var list: List<X>,
@SerializedName("module_info")
var moduleInfo: ModuleInfo
) {
data class X(
@SerializedName("content")
var content: String,
@SerializedName("id")
var id: Int, // 1117
@SerializedName("link")
var link: String, // https://www.bilibili.com/blackboard/live/activity-flower-girl2-h5.html
@SerializedName("pic")
var pic: String, // http://i0.hdslb.com/bfs/vc/523a719b51a647eeb969956865a20781d7e6d994.jpg
@SerializedName("title")
var title: String // 花之初少女
)
data class ModuleInfo(
@SerializedName("count")
var count: Int, // 0
@SerializedName("id")
var id: Int, // 1
@SerializedName("link")
var link: String,
@SerializedName("pic")
var pic: String,
@SerializedName("sort")
var sort: Int, // 0
@SerializedName("title")
var title: String, // banner位
@SerializedName("type")
var type: Int // 1
)
}
data class MyIdol(
@SerializedName("extra_info")
var extraInfo: ExtraInfo,
@SerializedName("list")
var list: List<X>,
@SerializedName("module_info")
var moduleInfo: ModuleInfo
) {
data class ExtraInfo(
@SerializedName("card_type")
var cardType: Int, // 1
@SerializedName("relation_page")
var relationPage: Int, // 1
@SerializedName("tags_desc")
var tagsDesc: String,
@SerializedName("time_desc")
var timeDesc: String,
@SerializedName("total_count")
var totalCount: Int, // 1
@SerializedName("uname_desc")
var unameDesc: String
)
data class ModuleInfo(
@SerializedName("count")
var count: Int, // 0
@SerializedName("id")
var id: Int, // 13
@SerializedName("link")
var link: String, // http://live.bilibili.com/app/myfollow/
@SerializedName("pic")
var pic: String, // http://i0.hdslb.com/bfs/live/484abcd8940ee43ec8b4409cbfe0c1e52f09a338.png
@SerializedName("sort")
var sort: Int, // 4
@SerializedName("title")
var title: String, // 我的关注
@SerializedName("type")
var type: Int // 8
)
data class X(
@SerializedName("accept_quality")
var acceptQuality: List<Int>,
@SerializedName("area")
var area: Int, // 7
@SerializedName("area_name")
var areaName: String, // 放映厅
@SerializedName("area_v2_id")
var areaV2Id: Int, // 34
@SerializedName("area_v2_name")
var areaV2Name: String, // 音乐台
@SerializedName("area_v2_parent_id")
var areaV2ParentId: Int, // 1
@SerializedName("area_v2_parent_name")
var areaV2ParentName: String, // 娱乐
@SerializedName("broadcast_type")
var broadcastType: Int, // 0
@SerializedName("cover")
var cover: String, // http://i0.hdslb.com/bfs/live/6029764557e3cbe91475faae26e6e244de8c1d3c.jpg
@SerializedName("current_quality")
var currentQuality: Int, // 4
@SerializedName("face")
var face: String, // http://i0.hdslb.com/bfs/face/5d35da6e93fbfb1a77ad6d1f1004b08413913f9a.jpg
@SerializedName("link")
var link: String, // http://live.bilibili.com/23058?broadcast_type=0
@SerializedName("live_tag_name")
var liveTagName: String, // 音乐台
@SerializedName("live_time")
var liveTime: Int, // 1552406400
@SerializedName("official_verify")
var officialVerify: Int, // 1
@SerializedName("online")
var online: Int, // 9961
@SerializedName("pendent_ru")
var pendentRu: String,
@SerializedName("pendent_ru_color")
var pendentRuColor: String,
@SerializedName("pendent_ru_pic")
var pendentRuPic: String,
@SerializedName("pk_id")
var pkId: Int, // 0
@SerializedName("play_url")
var playUrl: String, // http://ws.live-play.acgvideo.com/live-ws/637609/live_11153765_9369560.flv?wsSecret=49e118106b827b5008e10b0c74fa1a5a&wsTime=1552470101&trid=fe3b3a0b017a439c86d792ab5dd6fcd5&sig=no
@SerializedName("play_url_h265")
var playUrlH265: String,
@SerializedName("roomid")
var roomid: Long, // 23058
@SerializedName("special_attention")
var specialAttention: Int, // 0
@SerializedName("title")
var title: String, // 哔哩哔哩音悦台
@SerializedName("uid")
var uid: Long, // 11153765
@SerializedName("uname")
var uname: String // 3号直播间
)
}
data class HourRank(
@SerializedName("extra_info")
var extraInfo: ExtraInfo,
@SerializedName("list")
var list: List<X>,
@SerializedName("module_info")
var moduleInfo: ModuleInfo
) {
data class ModuleInfo(
@SerializedName("count")
var count: Int, // 0
@SerializedName("id")
var id: Int, // 4
@SerializedName("link")
var link: String, // https://live.bilibili.com/p/html/live-app-rank/index.html?is_live_webview=1&nav=hour
@SerializedName("pic")
var pic: String, // http://i0.hdslb.com/bfs/live/39cd413f6bc72fb9da8c10ff2686b537477294ab.png
@SerializedName("sort")
var sort: Int, // 11
@SerializedName("title")
var title: String, // 小时榜
@SerializedName("type")
var type: Int // 5
)
data class X(
@SerializedName("area_v2_id")
var areaV2Id: Int, // 145
@SerializedName("area_v2_name")
var areaV2Name: String, // 视频聊天
@SerializedName("area_v2_parent_id")
var areaV2ParentId: Int, // 1
@SerializedName("area_v2_parent_name")
var areaV2ParentName: String, // 娱乐
@SerializedName("face")
var face: String, // http://i2.hdslb.com/bfs/face/cdc9866d09ed82e6fae610f5ba4b8706db509802.jpg
@SerializedName("live_status")
var liveStatus: Int, // 1
@SerializedName("rank")
var rank: Int, // 3
@SerializedName("roomid")
var roomid: Long, // 274926
@SerializedName("uid")
var uid: Long, // 24601383
@SerializedName("uname")
var uname: String // 蛋黄姬GAT-X105
)
data class ExtraInfo(
@SerializedName("sub_title")
var subTitle: String // 15:00-16:00 总榜排名
)
}
}
}

View File

@ -0,0 +1,74 @@
package com.hiczp.bilibili.api.live.model
import com.google.gson.JsonElement
import com.google.gson.annotations.SerializedName
data class MobileRoomBanner(
@SerializedName("code")
var code: Int, // 0
@SerializedName("data")
var `data`: Data,
@SerializedName("message")
var message: String, // OK
@SerializedName("msg")
var msg: String // OK
) {
data class Data(
@SerializedName("bottom")
var bottom: List<JsonElement>,
@SerializedName("gift")
var gift: JsonElement?, // null
@SerializedName("gift_banner")
var giftBanner: JsonElement?, // null
@SerializedName("inputBanner")
var inputBanner: List<JsonElement>,
@SerializedName("lol_activity")
var lolActivity: LolActivity,
@SerializedName("superBanner")
var superBanner: JsonElement?, // null
@SerializedName("top")
var top: List<Top>
) {
data class Top(
@SerializedName("activity_title")
var activityTitle: String, // 周星
@SerializedName("color")
var color: String,
@SerializedName("cover")
var cover: String, // https://i0.hdslb.com/bfs/vc/5cfb2a7dc2a25db580f130a55f475f74e2bd3202.png
@SerializedName("expire_hour")
var expireHour: Int, // 24
@SerializedName("gift_img")
var giftImg: String, // https://s1.hdslb.com/bfs/vc/39aee4bf13b170f22f19ef1c278cebf3a6e40332.png
@SerializedName("id")
var id: Int, // 199
@SerializedName("is_close")
var isClose: Int, // 0
@SerializedName("jump_url")
var jumpUrl: String, // https://live.bilibili.com/p/html/live-app-weekstar/index.html?is_live_half_webview=1&hybrid_biz=live-app-weekStar&hybrid_rotate_d=1&hybrid_half_ui=1,3,100p,70p,300e51,0,30,100;2,2,375,100p,300e51,0,30,100;3,3,100p,70p,300e51,0,30,100;4,2,375,100p,300e51,0,30,100;5,3,100p,70p,300e51,0,30,100;6,3,100p,70p,300e51,0,30,100;7,3,100p,70p,300e51,0,30,100&room_id=29434
@SerializedName("rank")
var rank: String, // 999+
@SerializedName("rank_name")
var rankName: String, // 打榜
@SerializedName("title")
var title: String, // 排名
@SerializedName("type")
var type: Int, // 1
@SerializedName("week_gift_color")
var weekGiftColor: String, // #ffffff
@SerializedName("week_rank_color")
var weekRankColor: String, // #ffffff
@SerializedName("week_text_color")
var weekTextColor: String // #ffffff
)
data class LolActivity(
@SerializedName("guess_cover")
var guessCover: String, // https://i0.hdslb.com/bfs/live/61d1c4bcce470080a5408d6c03b7b48e0a0fa8d7.png
@SerializedName("status")
var status: Int, // 0
@SerializedName("vote_cover")
var voteCover: String // https://i0.hdslb.com/bfs/live/6030cb2847f4d197caacb12fbe12f2656b999bcf.png
)
}
}

View File

@ -17,7 +17,7 @@ data class MobileTab(
* 如果是非顶层 Tab default null
*/
@SerializedName("default")
var default: Int? = null, // 0
var default: Int?, // 0
@SerializedName("default_sub_tab")
var defaultSubTab: String,
@SerializedName("desc")

View File

@ -18,6 +18,9 @@ data class RoomInfo(
var allowChangeAreaTime: Int, // 0
@SerializedName("allow_upload_cover_time")
var allowUploadCoverTime: Int, // 0
/**
* 没有 old 前缀的表示 v2 版本, 例如 area_v2_id. 下同
*/
@SerializedName("area_id")
var areaId: Int, // 107
@SerializedName("area_name")

View File

@ -0,0 +1,136 @@
package com.hiczp.bilibili.api.live.model
import com.google.gson.JsonElement
import com.google.gson.annotations.SerializedName
data class RoomList(
@SerializedName("code")
var code: Int, // 0
@SerializedName("data")
var `data`: Data,
@SerializedName("message")
var message: String, // success
@SerializedName("msg")
var msg: String // success
) {
data class Data(
@SerializedName("banner")
var banner: List<Banner>,
@SerializedName("count")
var count: Int, // 5116
@SerializedName("list")
var list: List<X>,
@SerializedName("tags")
var tags: List<Tag>
) {
data class Banner(
@SerializedName("id")
var id: String, // 1117
@SerializedName("link")
var link: String, // https://www.bilibili.com/blackboard/live/activity-flower-girl2-h5.html
@SerializedName("pic")
var pic: String, // https://i0.hdslb.com/bfs/vc/523a719b51a647eeb969956865a20781d7e6d994.jpg
@SerializedName("position")
var position: String, // 5
@SerializedName("sort_num")
var sortNum: String, // 1
@SerializedName("title")
var title: String // 花之初少女
)
data class X(
@SerializedName("accept_quality")
var acceptQuality: String, // 4
@SerializedName("accept_quality_v2")
var acceptQualityV2: List<JsonElement>,
@SerializedName("area_id")
var areaId: Int, // 107
@SerializedName("area_name")
var areaName: String, // 其他游戏
@SerializedName("area_v2_id")
var areaV2Id: Int, // 107
@SerializedName("area_v2_name")
var areaV2Name: String, // 其他游戏
@SerializedName("area_v2_parent_id")
var areaV2ParentId: Int, // 2
@SerializedName("area_v2_parent_name")
var areaV2ParentName: String, // 网游
@SerializedName("broadcast_type")
var broadcastType: Int, // 0
@SerializedName("corner")
var corner: String,
@SerializedName("cover_size")
var coverSize: CoverSize,
@SerializedName("current_quality")
var currentQuality: Int, // 4
@SerializedName("face")
var face: String, // https://i0.hdslb.com/bfs/face/9c9ad7d21784e70dfa57cdae40cfdca1b58424c4.jpg
@SerializedName("game_live_num")
var gameLiveNum: Int, // 30
@SerializedName("group_id")
var groupId: Int, // 0
@SerializedName("is_tv")
var isTv: Int, // 0
@SerializedName("link")
var link: String, // /21142258
@SerializedName("online")
var online: Int, // 0
@SerializedName("parent_id")
var parentId: Int, // 2
@SerializedName("parent_name")
var parentName: String, // 网游
@SerializedName("pendent")
var pendent: String,
@SerializedName("pendent_ld")
var pendentLd: String,
@SerializedName("pendent_ld_color")
var pendentLdColor: String,
@SerializedName("pendent_ru")
var pendentRu: String,
@SerializedName("pendent_ru_color")
var pendentRuColor: String,
@SerializedName("pendent_ru_pic")
var pendentRuPic: String,
@SerializedName("pk_id")
var pkId: Int, // 0
@SerializedName("play_url")
var playUrl: String,
@SerializedName("roomid")
var roomid: Long, // 21142258
@SerializedName("session_id")
var sessionId: String, // E9168524-EA1A-9F86-7A88-E33B58B9C8A8
@SerializedName("show_cover")
var showCover: String,
@SerializedName("system_cover")
var systemCover: String, // https://i0.hdslb.com/bfs/live/21142258.jpg?03131614
@SerializedName("title")
var title: String, // DNF除了肝啥都没
@SerializedName("uid")
var uid: Long, // 278287794
@SerializedName("uname")
var uname: String, // wz85699909
@SerializedName("user_cover")
var userCover: String, // https://i0.hdslb.com/bfs/live/room_cover/dbfd1bbb5f936620a7bccac4b5e51b54342284d1.jpg
@SerializedName("user_cover_flag")
var userCoverFlag: Int, // 1
@SerializedName("web_pendent")
var webPendent: String
) {
data class CoverSize(
@SerializedName("height")
var height: Int, // 180
@SerializedName("width")
var width: Int // 320
)
}
data class Tag(
@SerializedName("id")
var id: Int, // -2
@SerializedName("name")
var name: String, // 最新
@SerializedName("sort_type")
var sortType: String // live_time
)
}
}

View File

@ -0,0 +1,116 @@
package com.hiczp.bilibili.api.live.model
import com.google.gson.annotations.SerializedName
data class RoomMessage(
@SerializedName("code")
var code: Int, // 0
@SerializedName("data")
var `data`: Data,
@SerializedName("message")
var message: String,
@SerializedName("msg")
var msg: String
) {
data class Data(
@SerializedName("admin")
var admin: List<Admin>,
@SerializedName("room")
var room: List<Message>
) {
data class Message(
@SerializedName("bubble")
var bubble: Int, // 0
@SerializedName("check_info")
var checkInfo: CheckInfo,
@SerializedName("guard_level")
var guardLevel: Int, // 0
@SerializedName("isadmin")
var isadmin: Int, // 0
@SerializedName("medal")
var medal: List<String>, //[ 17, "毛菇","猫菇椰汁",923614,16752445,""]
@SerializedName("nickname")
var nickname: String, // 柠檬味狗凉゜
@SerializedName("rank")
var rank: Int, // 10000
@SerializedName("rnd")
var rnd: String, // 1552452731
@SerializedName("svip")
var svip: Int, // 1
@SerializedName("teamid")
var teamid: Int, // 0
@SerializedName("text")
var text: String, // 当前有效总督房:14979272;146
@SerializedName("timeline")
var timeline: String, // 2019-03-13 12:52:09
@SerializedName("title")
var title: List<String>,
@SerializedName("uid")
var uid: Int, // 1615204
@SerializedName("uname_color")
var unameColor: String,
/**
* 有可能是 >50000 这样的东西, 下同
*/
@SerializedName("user_level")
var userLevel: List<String>,
@SerializedName("user_title")
var userTitle: String,
@SerializedName("vip")
var vip: Int // 1
) {
data class CheckInfo(
@SerializedName("ct")
var ct: String, // 4B9A2E41
@SerializedName("ts")
var ts: Int // 1552452729
)
}
data class Admin(
@SerializedName("bubble")
var bubble: Int, // 2
@SerializedName("check_info")
var checkInfo: CheckInfo,
@SerializedName("guard_level")
var guardLevel: Int, // 2
@SerializedName("isadmin")
var isadmin: Int, // 1
@SerializedName("medal")
var medal: List<String>,
@SerializedName("nickname")
var nickname: String, // 沧澜ベ
@SerializedName("rank")
var rank: Int, // 10000
@SerializedName("rnd")
var rnd: String, // 350761541
@SerializedName("svip")
var svip: Int, // 1
@SerializedName("teamid")
var teamid: Int, // 0
@SerializedName("text")
var text: String, // 下个号见
@SerializedName("timeline")
var timeline: String, // 2019-03-13 12:54:42
@SerializedName("title")
var title: List<String>,
@SerializedName("uid")
var uid: Long, // 11626554
@SerializedName("uname_color")
var unameColor: String, // #e91e63
@SerializedName("user_level")
var userLevel: List<String>,
@SerializedName("user_title")
var userTitle: String, // title-181-1
@SerializedName("vip")
var vip: Int // 1
) {
data class CheckInfo(
@SerializedName("ct")
var ct: String, // D1012BA7
@SerializedName("ts")
var ts: Long // 1552452882
)
}
}
}

View File

@ -0,0 +1,29 @@
package com.hiczp.bilibili.api.live.model
import com.google.gson.annotations.SerializedName
data class RoomRank(
@SerializedName("code")
var code: Int, // 0
@SerializedName("data")
var `data`: Data,
@SerializedName("message")
var message: String, // OK
@SerializedName("msg")
var msg: String // OK
) {
data class Data(
@SerializedName("color")
var color: String, // #FB7299
@SerializedName("h5_url")
var h5Url: String, // https://live.bilibili.com/p/html/live-app-rankcurrent/index.html?is_live_half_webview=1&hybrid_half_ui=1,5,85p,70p,FFE293,0,30,100,10;2,2,320,100p,FFE293,0,30,100,0;4,2,320,100p,FFE293,0,30,100,0;6,5,65p,60p,FFE293,0,30,100,10;5,5,55p,60p,FFE293,0,30,100,10;3,5,85p,70p,FFE293,0,30,100,10;7,5,65p,60p,FFE293,0,30,100,10;&anchor_uid=2866663&rank_type=master_realtime_hour_room&area_hour=1&area_v2_id=145&area_v2_parent_id=1
@SerializedName("rank_desc")
var rankDesc: String, // 小时总榜
@SerializedName("roomid")
var roomid: Long, // 29434
@SerializedName("timestamp")
var timestamp: Long, // 1552451099
@SerializedName("web_url")
var webUrl: String // https://live.bilibili.com/blackboard/room-current-rank.html?rank_type=master_realtime_hour_room&area_hour=1&area_v2_id=145&area_v2_parent_id=1
)
}

View File

@ -86,7 +86,7 @@ data class UserInfoInRoom(
@SerializedName("master_level")
var masterLevel: MasterLevel,
@SerializedName("rcost")
var rcost: Int, // 2737665
var rcost: Long, // 2737665
@SerializedName("svip")
var svip: Int, // 0
@SerializedName("svip_time")

View File

@ -1,10 +0,0 @@
package com.hiczp.bilibili.api.retrofit
/**
* 用于指定参数类型
* 例如指定公共参数加在 Query
*/
enum class ParamType {
QUERY,
FORM_URL_ENCODED
}

View File

@ -7,9 +7,26 @@ class EnterRoomTest {
@Test
fun enterRoom() {
runBlocking {
val roomId = bilibiliClient.liveAPI.mobileRoomInit(3).await().data.roomId
bilibiliClient.liveAPI.roomEntryAction(roomId).await()
bilibiliClient.liveAPI.getInfo(roomId).await()
with(bilibiliClient.liveAPI) {
//下面模拟一个客户端进房时会访问的接口
val (roomId, uid) = mobileRoomInit(3).await().data.let { it.roomId to it.uid }
roomEntryAction(roomId).await()
val data = getInfo(roomId).await().data
isFollowed(uid).await()
getAnchorInRoom(roomId).await()
getUser().await()
getUserInfoInRoom(roomId).await()
getTitle().await()
mobileTab(roomId).await()
roomMessage(roomId).await().data.room.forEach {
println("${it.nickname}: ${it.text}")
}
val (areaId, parentAreaId) = data.let { it.areaId to it.parentAreaId }
mobileRoomBanner(areaId, parentAreaId, roomId, uid).await()
getGiftConfig(areaId, parentAreaId, roomId).await()
roomRank(areaId, parentAreaId, roomId, uid).await()
getDanmakuConfig(roomId).await()
}
}
}
}

View File

@ -1,13 +0,0 @@
package com.hiczp.bilibili.api.test
import kotlinx.coroutines.runBlocking
import org.junit.jupiter.api.Test
class IsFollowedTest {
@Test
fun followLive() {
runBlocking {
bilibiliClient.liveAPI.isFollowed(20293030).await()
}
}
}