天天看點

精仿今日頭條 由來篇 介紹 Apk下載下傳位址 示範截圖 gif圖 使用到的第三方庫 現有功能 技術要點 聲明

轉載請注明出處: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下載下傳位址

[點選下載下傳體驗]

示範截圖

首頁

精仿今日頭條 由來篇 介紹 Apk下載下傳位址 示範截圖 gif圖 使用到的第三方庫 現有功能 技術要點 聲明

視訊

精仿今日頭條 由來篇 介紹 Apk下載下傳位址 示範截圖 gif圖 使用到的第三方庫 現有功能 技術要點 聲明

微頭條

精仿今日頭條 由來篇 介紹 Apk下載下傳位址 示範截圖 gif圖 使用到的第三方庫 現有功能 技術要點 聲明

我的

精仿今日頭條 由來篇 介紹 Apk下載下傳位址 示範截圖 gif圖 使用到的第三方庫 現有功能 技術要點 聲明

gif圖

新聞清單、視訊清單

精仿今日頭條 由來篇 介紹 Apk下載下傳位址 示範截圖 gif圖 使用到的第三方庫 現有功能 技術要點 聲明

非視訊新聞詳情頁面

精仿今日頭條 由來篇 介紹 Apk下載下傳位址 示範截圖 gif圖 使用到的第三方庫 現有功能 技術要點 聲明

視訊播放、視訊詳情頁面

精仿今日頭條 由來篇 介紹 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資料。

聲明

這個屬于個人開發作品,僅做學習交流使用,如用到實際項目還需多考慮其他因素如并發等,請多多斟酌。諸位勿傳播于非技術人員,拒絕用于商業用途,資料均屬于非正常管道擷取,原作公司擁有所有權利。

繼續閱讀