写代码总有觉着枯燥无味觉得烦的时候。那么边写代码边听听相声又会怎么样呢?
       作为一个Java程序员,手头儿的工具是Jetbrains家的IDEA。顺手搜了一把,果然没有现成的插件儿。看来没办法,只能自己手撸一个了。
表情1

一、抓包分析API

       众所周知:要边写代码边听相声得先认识郭德纲(划掉)
       不对不对,众所周知:要边写代码边听相声得先有相声的音源;有了音源之后还得播放,能在线播放最好,实在不行先把文件缓存到本地之后再进行播放;如果遇到格式不兼容的,还得给音频文件转个码。
       音源很好想 —— 咱们的老朋友喜马拉雅就有现成的!但是Java在线播放有点吃亏,不是不能做,就是挺麻烦的。
       综上,大概就是这么个流程:
flowprocesschart

首先咱得打开谷歌浏览器抓个包,分析一下喜马拉雅的接口:
抓包

这里我们可以看得出来:/revision/search/main 这个是搜索的uri,请求方式为GET,请求参数中,“kw”字段用来表示搜索关键字。
抓包1.1

我们再在页面上随便点一个播放试试(这里以第一个《郭德纲21年相声精选》为例):
抓包1.2
这里我们可以看出请求的uri是/revision/play/v1/show,请求方式为:GET。其中有一个参数为id,和上一个搜索到的结果对比发现,id的值对应搜索结果中的albumId,我们可以理解为专辑id。

第二个uri:/revision/play/v1/audio顾名思义为播放uri,请求方式也是GET。传入参数也有个id,经过和上面专辑uri进行对比,发现此id为音频id。
抓包1.3

这个uri的返回值中有一个src属性,我们把它复制到浏览器中康康是个啥?
抓包1.4

果不其然,是音频的播放地址!至此,抓包分析API任务完成!

模拟请求及解析数据

Java平台有许多http客户端,这里我选择的是OKHttp3(因为用的比较顺手
代码在这儿不多赘述(详细代码见文末链接),大概就是拼接好URL,参数,并且按照层级解析返回的JSON即可。
抓包2.1

播放音源

Java原生的音频接口是只能支持AU,AIFF,WAV,MIDI,RFM等格式的音频,而我们平时接触到的最多的音频格式为MP3。而且我们通过上一节的JSON能拿到的音频格式又是M4A格式的。不论怎么说都是不能播放的。
那么问题来了,要怎么办!??

电视机前有经验的老程序员们肯定知道怎么办:Github搜个库呗!
QQ图片20201109161615

说干咱就干,打开Github开搜!QQ图片20201109161825

经过一番操作,我找到了一个音频转码库一个音频播放库,稍微测试了一下,能完美使用!
那就O98K,这个任务咱也算是完成了!(可以说是老缝合怪了
QQ图片20201109162223

IDEA插件开发

经过上面几节的准备,我们的核心功能其实已经开发好了。最后一个任务是如何把功能集成进IDEA,将其做成插件。
经过一小时对《IDEA从入门到放弃》的精心研读,我便开始撸插件儿代码了。QQ图片20201109163029

听相声得有播放列表,开始、暂停、上一曲、下一曲等控件,所以我们需要一个足够大的地方塞下这么多控件 —— 比如toolWindow这个位置就挺大的,应该是够用了!

那么电视机前好奇心重的小朋友们可能会问了:那什么是toolWindow呢?
就是IDEA周围那一圈,可以收起来的工具栏,那玩意儿就叫toolWindow。
截图4.1

IDEA插件的图形化控件和Java Swing的渊源颇深,熟悉Swing的同学可能会在图形化界面开发上比较好上手一点(IDEA Plugin的UI是不支持Java Fx的,这里需要注意)。在知道这一点之后,那后边就挺好上手了。JList拉列表,JButton设置按钮就行了~

说着,就随手整了个简单的界面出来了:
截图4.2

双击列表播放,控件播放、暂停、停止、切歌功能正常。

考虑到跨平台支持,我们还需要根据不同的系统来设置不同的音频文件保存路径。
这里做了个简易的设置界面,把路径交给用户自个儿去填好了~
截图4.3

项目代码

发布

该插件目前已发布至Jetbrains插件市场,搜索:"GDG Cross Talk Show"即可下载安装。

-- 最后祝大家身体健康,再见!


摸鱼癌晚期患者