完成搜索功能

This commit is contained in:
czp3009 2019-03-13 18:46:11 +08:00
parent c4953c020e
commit 692d6d1cad
9 changed files with 770 additions and 2 deletions

View File

@ -113,6 +113,21 @@ val myInfo = bilibiliClient.appAPI.myInfo().await()
返回用户 ID, vip 信息等.
## 搜索
当我们想看某些内容时, 我们会首先使用搜索功能, 例如
```kotlin
val searchResult = bilibiliClient.appAPI.search(keyword = "刀剑神域").await()
```
实际上这对应客户端上的 搜索 -> 综合.
如果要搜索番剧则使用 `bilibiliClient.appAPI.searchBangumi`.
同理, 搜索直播, 用户, 影视, 专栏分别使用 `searchLive`, `searchUser`, `searchMovie`, `searchArticle`.
所有的搜索都使用 `pageNumber` 参数来控制翻页(从 1 开始).
## 获取视频播放地址
获取视频实际播放地址的 API 比较特殊, 被单独分了出来, 示例如下
@ -243,8 +258,6 @@ val season = bilibiliClient.mainAPI.season(seasonId = 25617).await()
返回值中的 `result.episodes` 包含了当前所选择的季的全部集的 `aid``cid`.
搜索视频和番剧的功能绝赞咕咕咕中.
## 查看视频下面的评论
看完了视频当然要看一下傻吊网友都在说些什么. 使用以下 API 获取一个视频的评论.

View File

@ -1,5 +1,6 @@
package com.hiczp.bilibili.api.app
import com.google.gson.JsonObject
import com.hiczp.bilibili.api.app.model.*
import com.hiczp.bilibili.api.retrofit.CommonResponse
import kotlinx.coroutines.Deferred
@ -223,4 +224,113 @@ interface AppAPI {
@Query("pn") pageNumber: Int = 1,
@Query("ps") pageSize: Int = 20
): Deferred<FavoriteArticle>
/**
* 搜索(综合)
*
* 上方搜索栏
*
* @param duration 不明确
* @param keyword 搜索的关键字, 下同
* @param from_source 来源, 如果是直接搜索的则为 app_search, 在历史记录里点击的则为 apphistory_search
* @param pageNumber 分页, 1 开始
*/
@Suppress("SpellCheckingInspection")
@GET("/x/v2/search")
fun search(
@Query("duration") duration: Int = 0,
@Query("from_source") from_source: String = "app_search",
@Query("highlight") highlight: Int = 1,
@Query("keyword") keyword: String,
@Query("pn") pageNumber: Int = 1,
@Query("ps") pageSize: Int = 20,
@Query("recommend") recommend: Int = 1
): Deferred<SearchResult>
/**
* 搜索直播间
*
* 上方搜索栏 -> 直播
*
* @param type 搜索的内容的类型, 每种搜索的 type 都是固定的, 下同
*/
@GET("/x/v2/search/live")
fun searchLive(
@Query("keyword") keyword: String,
@Suppress("SpellCheckingInspection")
@Query("order") order: String = "totalrank",
@Query("pn") pageNumber: Int = 1,
@Query("ps") pageSize: Int = 20,
@Query("type") type: Int = 4
): Deferred<SearchLiveResult>
/**
* 根据某个类型来进行搜索(自定义)
*/
@GET("/x/v2/search/type")
fun searchType(
@Query("keyword") keyword: String,
@Query("pn") pageNumber: Int = 1,
@Query("ps") pageSize: Int = 20,
@Query("type") type: Int,
@QueryMap additionParam: Map<String, String>
): Deferred<JsonObject>
/**
* 搜索番剧
*
* 上方搜索栏 -> 番剧
*/
@GET("/x/v2/search/type")
fun searchBangumi(
@Query("keyword") keyword: String,
@Query("pn") pageNumber: Int = 1,
@Query("ps") pageSize: Int = 20,
@Query("type") type: Int = 7
): Deferred<SearchBangumiResult>
/**
* 搜索用户
*
* 上方搜索栏 -> 用户
*/
@GET("/x/v2/search/type")
fun searchUser(
@Query("highlight") highlight: Int = 1,
@Query("keyword") keyword: String,
@Suppress("SpellCheckingInspection")
@Query("order") order: String = "totalrank",
@Query("pn") pageNumber: Int = 1,
@Query("ps") pageSize: Int = 20,
@Query("type") type: Int = 2,
@Query("user_type") userType: Int = 0
): Deferred<SearchUserResult>
/**
* 搜索影视(包括动漫的剧场版和纪录片)
*
* 上方搜索栏 -> 影视
*/
@GET("/x/v2/search/type")
fun searchMovie(
@Query("keyword") keyword: String,
@Query("pn") pageNumber: Int = 1,
@Query("ps") pageSize: Int = 20,
@Query("type") type: Int = 8
): Deferred<SearchMovieResult>
/**
* 搜索文章
*
* 上方搜索栏 -> 专栏
*/
@GET("/x/v2/search/type")
fun searchArticle(
@Query("category_id") categoryId: Int = 0,
@Query("highlight") highlight: Int = 1,
@Query("keyword") keyword: String,
@Query("pn") pageNumber: Int = 1,
@Query("ps") pageSize: Int = 20,
@Query("type") type: Int = 6
): Deferred<SearchArticleResult>
}

View File

@ -0,0 +1,58 @@
package com.hiczp.bilibili.api.app.model
import com.google.gson.annotations.SerializedName
data class SearchArticleResult(
@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("items")
var items: List<Item>,
@SerializedName("pages")
var pages: Int, // 50
@SerializedName("total")
var total: Int, // 0
@SerializedName("trackid")
var trackid: String // 2251647613743955310
) {
data class Item(
@SerializedName("badge")
var badge: String, // 专栏
@SerializedName("desc")
var desc: String, // 今天来和大家说下《刀剑神域3》第19集的先行图剧情与其说是第19集确切的讲应该是18.5集根据先行图来看这一集是前面的合集主要讲的是桐人和尤吉欧的经历。在第18集结尾桐人不小心说出了赛鲁卡的名字导致爱丽丝记忆发生了错乱隐约想起了自己的妹妹而接下来就是桐人会和爱丽丝说关于她的事了而所说的方式根据先行图来看事回忆杀方式。下面就简单和大家说下官方给出的先行图。先行图01a姐植入记忆水晶桐人既然要告诉爱丽丝真相也会给她说这一切的元凶就是最高祭师a姐从上图先行图可以看出这是a姐
@SerializedName("goto")
var goto: String, // article
@SerializedName("id")
var id: Long, // 2052980
@SerializedName("image_urls")
var imageUrls: List<String>,
@SerializedName("like")
var like: Int, // 116
@SerializedName("mid")
var mid: Int, // 12043763
@SerializedName("name")
var name: String, // 老白与动漫
@SerializedName("param")
var `param`: String, // 2052980
@SerializedName("play")
var play: Int, // 19101
@SerializedName("reply")
var reply: Int, // 82
@SerializedName("template_id")
var templateId: Int, // 3
@SerializedName("title")
var title: String, // <em class="keyword">刀剑神域</em>3第19集先行桐人告诉爱丽丝真相又是回忆杀剧情
@SerializedName("uri")
var uri: String, // bilibili://article/2052980
@SerializedName("view")
var view: Int // 19101
)
}
}

View File

@ -0,0 +1,100 @@
package com.hiczp.bilibili.api.app.model
import com.google.gson.annotations.SerializedName
data class SearchBangumiResult(
@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("items")
var items: List<Item>,
@SerializedName("pages")
var pages: Int, // 1
@SerializedName("total")
var total: Int, // 1
@SerializedName("trackid")
var trackid: String // 1357843021891149439
) {
data class Item(
@SerializedName("area")
var area: String, // 日本
@SerializedName("badge")
var badge: String, // 番剧
@SerializedName("badges")
var badges: List<Badge>,
@SerializedName("cover")
var cover: String, // https://i0.hdslb.com/bfs/bangumi/4d9f43eb3dba572797f8915f8f28efce9e58d756.jpg
@SerializedName("cv")
var cv: String, // 桐人(桐谷和人):松冈祯丞亚丝娜(结城明日奈):户松遥爱丽丝:茅野爱衣尤吉欧:岛崎信长赛鲁卡:前田佳织里罗妮耶·亚拉贝尔:近藤玲奈蒂洁·修特利尼:石原夏织神代凛子:小林沙苗菊冈诚二郎:森川智之莱欧斯·安提诺斯:岩濑周平温贝尔·吉泽克:木岛隆一索尔狄丽娜·塞路尔特:潘惠美沃罗·利凡玎:村田太志诗乃(朝田诗乃):泽城美雪 强尼·布莱克(金本敦):逢坂良太 西莉卡(绫野珪子):日高里菜 莉兹贝特(筱崎里香):高垣彩阳
@SerializedName("episodes")
var episodes: List<Episode>,
@SerializedName("goto")
var goto: String, // bangumi
@SerializedName("is_atten")
var isAtten: Int, // 1
@SerializedName("is_selection")
var isSelection: Int, // 1
@SerializedName("label")
var label: String, // 小说改/热血/奇幻/战斗/励志
@SerializedName("media_type")
var mediaType: Int, // 1
@SerializedName("param")
var `param`: String, // 130412
@SerializedName("ptime")
var ptime: Int, // 1538841600
@SerializedName("rating")
var rating: Double, // 9.2
@SerializedName("season_id")
var seasonId: Int, // 25510
@SerializedName("season_type")
var seasonType: Int, // 1
@SerializedName("season_type_name")
var seasonTypeName: String, // 番剧
@SerializedName("staff")
var staff: String, // 原作:川原砾原作插画 / 角色设计草案abec导演小野学助理导演佐久间贵史角色设计足立慎吾、铃木豪、西口智也总作画监督铃木豪、西口智也动作作画监督菅野芳弘、竹内哲也美术导演小川友佳子、渡边佳人美术设定森冈贤一、谷内优穗色彩设计中野尚美CG导演云藤隆太音响导演岩浪美和效果小山恭正音响制作ソニルード音乐梶浦由记制片EGG FIRM、Straight Edge制作A-1 Pictures
@SerializedName("style")
var style: String, // 小说改/热血/奇幻/战斗/励志
@SerializedName("title")
var title: String, // 刀剑神域 Alicization
@SerializedName("uri")
var uri: String, // https://www.bilibili.com/bangumi/play/ss25510/
@SerializedName("vote")
var vote: Int // 48497
) {
data class Badge(
@SerializedName("bg_color")
var bgColor: String, // #FB7299
@SerializedName("bg_color_night")
var bgColorNight: String, // #BB5B76
@SerializedName("bg_style")
var bgStyle: Int, // 1
@SerializedName("border_color")
var borderColor: String, // #FB7299
@SerializedName("border_color_night")
var borderColorNight: String, // #BB5B76
@SerializedName("text")
var text: String, // 会员抢先
@SerializedName("text_color")
var textColor: String, // #FFFFFF
@SerializedName("text_color_night")
var textColorNight: String // #E5E5E5
)
data class Episode(
@SerializedName("index")
var index: String, // 21
@SerializedName("param")
var `param`: String, // 250557
@SerializedName("uri")
var uri: String // https://www.bilibili.com/bangumi/play/ep250557
)
}
}
}

View File

@ -0,0 +1,82 @@
package com.hiczp.bilibili.api.app.model
import com.google.gson.annotations.SerializedName
data class SearchLiveResult(
@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("live_master")
var liveMaster: LiveMaster,
@SerializedName("live_room")
var liveRoom: LiveRoom,
@SerializedName("pages")
var pages: Int, // 3
@SerializedName("total")
var total: Int, // 0
@SerializedName("trackid")
var trackid: String // 14587616663833842975
) {
data class LiveRoom(
@SerializedName("items")
var items: List<Item>,
@SerializedName("pages")
var pages: Int, // 3
@SerializedName("total")
var total: Int, // 57
@SerializedName("trackid")
var trackid: String
) {
data class Item(
@SerializedName("area_v2_name")
var areaV2Name: String, // 300英雄
@SerializedName("attentions")
var attentions: Int, // 2
@SerializedName("badge")
var badge: String, // 直播
@SerializedName("cover")
var cover: String, // https://i0.hdslb.com/bfs/live/16181996f2260024f861db58d0d3dea2dd390930.jpg
@SerializedName("goto")
var goto: String, // live
@SerializedName("live_status")
var liveStatus: Int, // 2
@SerializedName("mid")
var mid: Long, // 82542745
@SerializedName("name")
var name: String, // SAO刀剑神域
@SerializedName("online")
var online: Int, // 7
@SerializedName("param")
var `param`: String, // 3387258
@SerializedName("region")
var region: Int, // 4
@SerializedName("roomid")
var roomid: Long, // 3387258
@SerializedName("tags")
var tags: String, // 点点关注
@SerializedName("title")
var title: String, // SAO刀剑神域的直播间
@SerializedName("type")
var type: String, // live_room
@SerializedName("uri")
var uri: String // bilibili://live/3387258?broadcast_type=0
)
}
data class LiveMaster(
@SerializedName("pages")
var pages: Int, // 0
@SerializedName("total")
var total: Int, // 0
@SerializedName("trackid")
var trackid: String
)
}
}

View File

@ -0,0 +1,92 @@
package com.hiczp.bilibili.api.app.model
import com.google.gson.annotations.SerializedName
data class SearchMovieResult(
@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("items")
var items: List<Item>,
@SerializedName("pages")
var pages: Int, // 1
@SerializedName("total")
var total: Int, // 2
@SerializedName("trackid")
var trackid: String // 11415000413319714311
) {
data class Item(
@SerializedName("area")
var area: String, // 日本
@SerializedName("badge")
var badge: String, // 电影
/**
* badge 的特殊样式
*/
@SerializedName("badges")
var badges: List<Map<String, String>>,
@SerializedName("cover")
var cover: String, // https://i0.hdslb.com/bfs/bangumi/aef914fac9edfa518c4df9a82d5d3d0cba08a451.jpg
/**
* 类型为 纪录片 时没有 cv, 其他一些字段同理
*/
@SerializedName("cv")
var cv: String?, // 曹旭鹏、阎萌萌、碧涓、惠霖、梦娇
/**
* 有些纪录片有分集, 有些没有
*/
@SerializedName("episodes")
var episodes: List<Episode>?,
@SerializedName("goto")
var goto: String, // movie
/**
* 一些纪录片没有 label, 其他一些字段同理
*/
@SerializedName("label")
var label: String?, // 演员:曹旭鹏、阎萌萌、碧涓、惠霖、梦娇
/**
* 2 为剧场版动画, 3 为纪录片
*/
@SerializedName("media_type")
var mediaType: Int, // 2
@SerializedName("param")
var `param`: String, // 115472
@SerializedName("ptime")
var ptime: Long, // 1505404800
@SerializedName("rating")
var rating: Double, // 5.8
@SerializedName("season_id")
var seasonId: Int, // 12767
@SerializedName("season_type")
var seasonType: Int, // 2
@SerializedName("season_type_name")
var seasonTypeName: String, // 电影
@SerializedName("staff")
var staff: String?, // 导演:伊藤智彦编剧:川原砾
@SerializedName("style")
var style: String, // 科幻/动画
@SerializedName("title")
var title: String, // 刀剑神域:序列之争(中文)
@SerializedName("uri")
var uri: String, // https://www.bilibili.com/bangumi/play/ss12767/
@SerializedName("vote")
var vote: Int? // 581
) {
data class Episode(
@SerializedName("index")
var index: String, // 4
@SerializedName("param")
var `param`: String, // 250006
@SerializedName("uri")
var uri: String // https://www.bilibili.com/bangumi/play/ep250006
)
}
}
}

View File

@ -0,0 +1,186 @@
package com.hiczp.bilibili.api.app.model
import com.google.gson.JsonElement
import com.google.gson.annotations.SerializedName
data class SearchResult(
@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("array")
var array: Int, // 1
@SerializedName("attribute")
var attribute: Int, // 1
@SerializedName("item")
var item: List<Item>,
@SerializedName("items")
var items: JsonElement,
@SerializedName("nav")
var nav: List<Nav>,
@SerializedName("page")
var page: Int, // 1
@SerializedName("trackid")
var trackid: String // 9256129479667154639
) {
data class Nav(
@SerializedName("name")
var name: String, // 专栏
@SerializedName("pages")
var pages: Int, // 50
@SerializedName("total")
var total: Int, // 1000
@SerializedName("type")
var type: Int // 6
)
data class Item(
@SerializedName("area")
var area: String, // 日本
@SerializedName("author")
var author: String, // 那位滑稽
@SerializedName("badge")
var badge: String, // 专栏
@SerializedName("badges")
var badges: List<Badge>,
@SerializedName("cover")
var cover: String, // https://i0.hdslb.com/bfs/archive/a4a58b6772d0de16df6e9a7d3e208fd52a552710.jpg
@SerializedName("cv")
var cv: String, // 曹旭鹏、阎萌萌、碧涓、惠霖、梦娇
@SerializedName("danmaku")
var danmaku: Int, // 196
@SerializedName("desc")
var desc: String, // 刀剑神域第一季作品以 2022 年为舞台大厂牌电子机械制造商“ARGUS”开发出“NERvGear”能连结虚拟世界的机器。完全的虚拟实境终于能够实现。主角桐人使用 NERvGear 游玩 VR MMORPG《Sword Art Online》的玩家幸运地参与过封测并买下正式版的桐人和正式营运就马上“完全潜行”享受着正式版的 SAO 世界。就在游戏四小时多后,桐人发现到“登出”指令竟然消失。认为只是系统暂时出错的桐人和开始陷入混乱的所有玩家们一起被传送到开始地点广场,并传来游戏设计者的死亡游戏
@SerializedName("duration")
var duration: String, // 591:52
@SerializedName("episodes")
var episodes: List<Episode>,
@SerializedName("face")
var face: String, // http://i0.hdslb.com/bfs/face/d34c34fca6471f07e60db3a7007cc5c2eb6bd785.jpg
@SerializedName("goto")
var goto: String, // recommend_word
@SerializedName("id")
var id: Int, // 2227576
@SerializedName("image_urls")
var imageUrls: List<String>,
@SerializedName("is_atten")
var isAtten: Int, // 1
@SerializedName("is_selection")
var isSelection: Int, // 1
@SerializedName("label")
var label: String, // 演员:曹旭鹏、阎萌萌、碧涓、惠霖、梦娇
@SerializedName("like")
var like: Int, // 13
@SerializedName("linktype")
var linktype: String, // query_rec
@SerializedName("list")
var list: List<X>,
@SerializedName("media_type")
var mediaType: Int, // 2
@SerializedName("mid")
var mid: Long, // 382820503
@SerializedName("new_rec_tags")
var newRecTags: List<NewRecTag>,
@SerializedName("param")
var `param`: String, // 33673993
@SerializedName("play")
var play: Int, // 324938
@SerializedName("position")
var position: Int, // 21
@SerializedName("ptime")
var ptime: Long, // 1505404800
@SerializedName("rating")
var rating: Double, // 5.8
@SerializedName("rec_tags")
var recTags: List<String>,
@SerializedName("reply")
var reply: Int, // 4
@SerializedName("season_id")
var seasonId: Int, // 12767
@SerializedName("season_type")
var seasonType: Int, // 2
@SerializedName("season_type_name")
var seasonTypeName: String, // 电影
@SerializedName("staff")
var staff: String, // 导演:伊藤智彦编剧:川原砾
@SerializedName("style")
var style: String, // 科幻/动画
@SerializedName("template_id")
var templateId: Int, // 4
@SerializedName("title")
var title: String, // 相关推荐
@SerializedName("trackid")
var trackid: String, // 9256129479667154639
@SerializedName("uri")
var uri: String, // bilibili://video/33673993?player_width=352&player_height=288&player_rotate=0
@SerializedName("view")
var view: Int, // 2310
@SerializedName("vote")
var vote: Int // 581
) {
data class NewRecTag(
@SerializedName("bg_color")
var bgColor: String, // #FAAB4B
@SerializedName("bg_color_night")
var bgColorNight: String, // #BA833F
@SerializedName("bg_style")
var bgStyle: Int, // 1
@SerializedName("border_color")
var borderColor: String, // #FAAB4B
@SerializedName("border_color_night")
var borderColorNight: String, // #BA833F
@SerializedName("text")
var text: String, // MINECRAFT
@SerializedName("text_color")
var textColor: String, // #FFFFFFFF
@SerializedName("text_color_night")
var textColorNight: String // #E5E5E5
)
data class Badge(
@SerializedName("bg_color")
var bgColor: String, // #FB7299
@SerializedName("bg_color_night")
var bgColorNight: String, // #BB5B76
@SerializedName("bg_style")
var bgStyle: Int, // 1
@SerializedName("border_color")
var borderColor: String, // #FB7299
@SerializedName("border_color_night")
var borderColorNight: String, // #BB5B76
@SerializedName("text")
var text: String, // 会员抢先
@SerializedName("text_color")
var textColor: String, // #FFFFFF
@SerializedName("text_color_night")
var textColorNight: String // #E5E5E5
)
data class X(
@SerializedName("from_source")
var fromSource: String, // query_rec_search
@SerializedName("param")
var `param`: String, // 7852399559249609627
@SerializedName("title")
var title: String, // FATE 刀剑神域
@SerializedName("type")
var type: String // query_rec
)
data class Episode(
@SerializedName("index")
var index: String, // 21
@SerializedName("param")
var `param`: String, // 250557
@SerializedName("uri")
var uri: String // https://www.bilibili.com/bangumi/play/ep250557
)
}
}
}

View File

@ -0,0 +1,86 @@
package com.hiczp.bilibili.api.app.model
import com.google.gson.annotations.SerializedName
data class SearchUserResult(
@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("items")
var items: List<Item>,
@SerializedName("pages")
var pages: Int, // 2
@SerializedName("total")
var total: Int, // 0
@SerializedName("trackid")
var trackid: String // 15623048138266462990
) {
data class Item(
@SerializedName("archives")
var archives: Int, // 1
@SerializedName("av_items")
var avItems: List<AvItem>,
@SerializedName("cover")
var cover: String, // https://i0.hdslb.com/bfs/face/c3200c52ae76004fbbab44010990431d0604aee5.jpg
@SerializedName("fans")
var fans: Int, // 3
@SerializedName("goto")
var goto: String, // author
@SerializedName("is_up")
var isUp: Boolean, // true
@SerializedName("level")
var level: Int, // 3
@SerializedName("live_status")
var liveStatus: Int, // 1
@SerializedName("live_uri")
var liveUri: String, // bilibili://live/3234638?broadcast_type=0
@SerializedName("mid")
var mid: Long, // 32557668
@SerializedName("official_verify")
var officialVerify: OfficialVerify,
@SerializedName("param")
var `param`: String, // 32557668
@SerializedName("roomid")
var roomid: Long, // 3234638
@SerializedName("sign")
var sign: String, // 担心额刚好阿西
@SerializedName("title")
var title: String, // 刀剑神域小漠
@SerializedName("uri")
var uri: String // bilibili://author/32557668
) {
data class OfficialVerify(
@SerializedName("type")
var type: Int // 127
)
data class AvItem(
@SerializedName("cover")
var cover: String, // https://i0.hdslb.com/bfs/archive/95be7c1a940dda2bbf4c33213df94eb650e44d10.jpg
@SerializedName("ctime")
var ctime: Int, // 1535755416
@SerializedName("danmaku")
var danmaku: Int, // 1
@SerializedName("duration")
var duration: String, // 3:1
@SerializedName("goto")
var goto: String, // av
@SerializedName("param")
var `param`: String, // 30843572
@SerializedName("play")
var play: Int, // 15
@SerializedName("title")
var title: String, // 官方认证:非洲正品大酋长
@SerializedName("uri")
var uri: String // bilibili://video/30843572?player_width=1920&player_height=1080&player_rotate=0
)
}
}
}

View File

@ -0,0 +1,41 @@
package com.hiczp.bilibili.api.test
import kotlinx.coroutines.runBlocking
import org.junit.jupiter.api.Test
class SearchTest {
@Test
fun search() {
runBlocking {
bilibiliClient.appAPI.search(keyword = "鹿乃").await()
}
}
@Test
fun searchBangumi() {
runBlocking {
bilibiliClient.appAPI.searchBangumi(keyword = "凉宫春日").await()
}
}
@Test
fun searchUser() {
runBlocking {
bilibiliClient.appAPI.searchUser(keyword = "czp").await()
}
}
@Test
fun searchMovie() {
runBlocking {
bilibiliClient.appAPI.searchMovie(keyword = "透视人体").await()
}
}
@Test
fun searchArticle() {
runBlocking {
bilibiliClient.appAPI.searchArticle(keyword = "欧陆风云").await()
}
}
}