轉載請注明出處: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,項目中參考到他做過的仿今日頭條項目,他的項目位址是:https://github.com/yewei02538/TodayNews
Apk下載下傳位址
[點選下載下傳體驗]
示範截圖
首頁
視訊
微頭條
我的
gif圖
新聞清單、視訊清單
非視訊新聞詳情頁面
視訊播放、視訊詳情頁面
使用到的第三方庫
- okhttp
- Retrofit
- RxJava
- ButterKnife
- Gson
- BottomBarLayout(輕量級底部導航欄)
- BaseRecyclerViewAdapterHelper(ReclerView萬能擴充卡)
- StateView(用于幾種狀态布局的切換)
- JieCaoVideoPlayer(視訊播放)
- BGARefreshLayout-Android(下拉重新整理)
- Eyes(修改狀态欄顔色)
- ColorTrackTabLayout
- EventBus
- KLog(log管理)
現有功能
1.擷取各種頻道的新聞清單,包括視訊和非視訊新聞;
2.檢視新聞詳情,包括視訊和非視訊新聞的詳情;
3.檢視新聞評論清單;
4.新聞資料本地存儲,已經擷取到的新聞資料儲存在本地資料庫中,上拉加載更多時可檢視曆史新聞;
5.底部頁簽點選下拉重新整理;
6.視訊清單播放中的視訊不可見時停止播放。
技術要點
1.新聞資料的抓取和分析,使用fidder抓取,具體使用可參考下面的網址:
http://www.tuicool.com/articles/BJjQZf
2.新聞清單多種Item布局的展示,使用的是BaseRecyclerViewAdapterHelper,ReclerView萬能擴充卡,多布局使用可參考下面的網址:
https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/968
3.視訊源位址的解析,原先參照大神 wey ye的解析已經失效,目前是通過今日頭條視訊解析這個網址解析的,傳入新聞詳情頁位址,擷取到對應視訊下載下傳位址的json資料。
聲明
這個屬于個人開發作品,僅做學習交流使用,如用到實際項目還需多考慮其他因素如并發等,請多多斟酌。諸位勿傳播于非技術人員,拒絕用于商業用途,資料均屬于非正常管道擷取,原作公司擁有所有權利。