转载请注明出处:http://blog.csdn.net/Chay_Chan/article/details/75319452
由来篇
当初的梦想
一直都想尝试开发自己还没接触过的某类APP,以前刚入门的时候,就有一个梦想:开发社交类、地图类、新闻类、支付、电商类、直播类、游戏类这些APP。社交类的大二的时候已经开发过一款即时通讯的APP,用的是网易云信的SDK;地图、支付、电商也接触过了;游戏的话做过一个植物大战僵尸的demo,算是Cocos2D的入门;新闻和直播之前公司还没有接到过这些项目的开发,所以一直没机会接触,所以一直很想把当初的梦想实现,做完新闻类和直播类的APP。
今日七月份告别了母校,正式毕业了,同时也辞职了,大二时和同学们一起创建公司接项目做,现在已经一年了,想着出去闯一闯,所以辞去了工作,这个项目是6月份多的时候动工的,那时候下班就挤出时间写代码,用的是目前的流行框架,RxJava + Retrofit + MVP,本来在七月份上旬就接近完成自己定下的那些功能,只是期间遇到一些问题。
遇到的问题
问题一:今日头条封闭了老接口,原先是参考大神 wey ye做过的今日头条,根据他以前抓包知道的接口来获取新闻列表,后台接口都获取不到数据了,所以只好想办法解决,之前虽然有使用过fidder抓包,可是用得不是很熟悉,遇到一些https加密过的数据包就束手无策,后来了解到fidder可以解https的数据包,今日头条的新闻数据获取问题就迎刃而解了;
问题二:新闻数据的规律,新闻列表的item布局有好多种,在没有接口文档的前提下,需要根据返回的json数据进行分析,找出规律,知道根据哪个字段来判断属于哪个布局,这个也是相当耗时间。
问题三:视频解析,原先参考的项目中,用到的解析视频方法,这个时候也莫名失效了,所以只好自己去寻找新的解析视频的方法,找到不少的方法,有的是读取新闻详情页的html页面,通过正则匹配出对应视频的地址,还有其他的一些方法,但是觉得还是不合心意,知道找到了一个解析今日头条视频地址的网站,通过传入详情页的网址就能够获取到对应视频的地址,所以开始抓包获取那个接口,视频解析的问题迎刃而解。
时运不齐,命途多舛
可是问题总是接踵而来,本想着今天可以高高兴兴地写博客,分享自己写的这个开源项目,彼此交流下,谁知早上播放视频的时候,视频地址又解析出错了,此时,我的内心是崩溃的。调试以后才知道原来那个解析视频的接口,作者对接口的访问做了验证,估计是为了防止别人直接调用他的接口,一定要通过他的网站来访问,分析了他的js代码后,发现他接口新增了两个参数,参数名没有什么意义,是"r"和"s","r"是一段随机产生的数字,"s"则是根据 视频地址 + "@" + r拼接后,进行一系列的处理,与运算、左移、右移,然后生成的对应的一端数字,后台应该也是根据这个算法进行验证,验证r和s是否有效。
知道作者新增了验证后,也知道了其加密的js代码,本想将加密的js函数转换成java代码写的方法,可最后发现太过复杂,所以放弃了这个念头,找到了java可以读取js脚本,不过在android中用不了,没有对应的ScriptEngine类,只好通过WebView加载本地的js脚本进行解析
,实现java代码与js互调,然后获取js产生的加密后的哪两个参数"r"和"s"的值。
完工
目前已经完成之前顶下的那些功能,比如新闻的多item布局展示(新闻列表)、视频列表、新闻详情、视频详情、点击页签下拉刷新、查看评论列表等。非常高兴可以做自己喜欢做的项目,并非为了工作而做在,纯粹为了接触一些新的事物,尝试做自己没有开发过的APP,最近也在找新的工作,虽然已经面试了几个工作,但最后还是由于薪资不符合自己的要求以及公司的发展前景,从而拒绝了,觉得找工作不应该求急,应该一直找,找到自己心中心仪的工作,这样工作的时候才会愉快,事半功倍。
介绍
精仿今日头条,数据是抓取今日头条App的数据。使用RxJava + Retrofit + MVP开发的开源项目,仅供学习用途。
项目github地址:https://github.com/chaychan/TouTiao
感谢大神 wey ye,项目中参考到他做过的仿今日头条项目
Apk下载地址
[点击下载体验]
演示截图
首页
视频
微头条
我的
gif图
新闻列表、视频列表
[图片上传失败...(image-ea2f64-1516154216596)]
非视频新闻详情页面
[图片上传失败...(image-ce19af-1516154216596)]
查看和保存图片
[图片上传失败...(image-fbbcb1-1516154216596)]
视频播放、视频详情页面
[图片上传失败...(image-512b47-1516154216596)]
使用到的第三方库
- okhttp
- Retrofit
- RxJava
- ButterKnife
- Gson
- BottomBarLayout(轻量级底部导航栏)
- BaseRecyclerViewAdapterHelper(ReclerView万能适配器)
- StateView(用于几种状态布局的切换)
- JieCaoVideoPlayer(视频播放)
- BGARefreshLayout-Android(下拉刷新)
- Eyes(修改状态栏颜色)
- ColorTrackTabLayout
- EventBus
- KLog(log管理)
现有功能
1.获取各种频道的新闻列表,包括视频和非视频新闻;
2.查看新闻详情,包括视频和非视频新闻的详情;
3.查看新闻评论列表;
4.新闻数据本地存储,已经获取到的新闻数据保存在本地数据库中,上拉加载更多时可查看历史新闻;
5.底部页签点击下拉刷新;
6.视频列表播放中的视频不可见时停止播放。
7.查看和保存图片。(8.23更新)
技术要点
1.新闻数据的抓取和分析,使用fidder抓取,具体使用可参考下面的网址:
http://www.tuicool.com/articles/BJjQZf
2.新闻列表多种Item布局的展示,使用的是BaseRecyclerViewAdapterHelper,ReclerView万能适配器,多布局使用可参考下面的网址:
https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/968
3.视频源地址的解析,原先参照大神 wey ye的解析已经失效,目前是通过今日头条视频解析这个网址解析的,传入新闻详情页地址,获取到对应视频下载地址的json数据。
声明
这个属于个人开发作品,仅做学习交流使用,如用到实际项目还需多考虑其他因素如并发等,请多多斟酌。诸位勿传播于非技术人员,拒绝用于商业用途,数据均属于非正常渠道获取,原作公司拥有所有权利。