前言
听《一些事一些情》已经十多年,近来通勤时间重温以往节目的时候发现,无论官方或民间的APP都或多或少有些遗憾,虽然也是个重复造轮子的活,但是自己动手写一个或许会更有乐趣呢。
缘由
首先,开发一款音乐播放器的移动APP,我们得有api才可以展示数据,下载音频文件,最终播放节目。如何获取到每一期节目的数据呢?
- 方案一
通过对现有的APP抓包,这个方案最简单快捷,使用charles之类的工具可以对官方和民间APP进行抓包,获取api。但,选取的几款APP均不是采用get、post请求的,没办法轻易拿到数据,pass。 - 方案二
通过APP内部加载单页web,获取网页源代码后,通过正则表达式提取节目信息以及下载链接并展示。但,经过测试后发现,此方案会有比较严重的性能问题,加载时间过久,用户体验较差,pass。(以下为两种加载web方式的测试代码)
1 | //下标截取,蠢方法一 |
1 | //使用第三方框架Fuzi |
- 方案三
通过抓取官网所有的节目信息和下载地址,自己搭建服务器提供api。此方案要实行对于个人来说有两个难点:1.怎么抓取一千多期节目的数据;2.怎么搭建服务器并提供接口。经过分析各种方案后,第一点可以通过Python爬虫解决,第二点,因后端知识树暂时没点,所以暂时使用实时云服务来替代。一开始是目标为firebase,试用后发现,Google收购它后,慢慢添加Google一些服务接口进去了,由于众所周知的原因,最终选用了墙内的wilddog。
动工
方案选定后,正式动工。
Python为现学现卖,so,现阶段的目标实现需求达到目标即可。
经过分析网页源代码,抓取流程如下:在界面列表抓取当前页所有节目信息–>跳转单期节目的下载页获取真正的音频文件地址–>将节目信息与真正的音频文件地址并为字典按照月份分类再存入数组–>抓取下一页·····所有页抓取完毕后–>再按照年份进行分类–>分别写入不同的JSON文件。
需要用到的库:urllib2、re、json
抓取界面信息
定义Class,初始化确定好下载页面的url,以及全局接收的数组
1 | class Spider: |
1 | #获取索引页面的内容 |
抓取当前页所有节目
抓取完毕之后过滤掉WMA格式,并对粤语和普通话双版本进行分类
1 | #获取索引界面所有节目的信息 |
跳转下载页面获取真正下载地址
1 | #获取真实下载地址 |
分类保存所有节目数据
1 | #传入起止页码,获取界面json |
工具类
主要用于按照年份进行分类,并导出JSON文件
1 | class Tools: |
Let’s go
1 | #传入起止页码即可,在此传入了1,71,表示抓取第2到10页的节目 |
大功告成!然后将导出的JSON文件导入到wilddog。
接下来的工作就是整个APP,LoveqSwift项目的构建了。
最后附上github:http://t.cn/R5AVbTH