付茗
(國家新聞出版廣播電影電視總局二八二臺,湖南長沙,410146)
由于互聯網電視機頂盒系統(tǒng)是基于Android系統(tǒng)而開發(fā)的,因此可以根據Android相關的特性搭建對應的環(huán)境,對該軟件進行協議分析,逆向相關的API(Application Programming Interface,應用程序編程接口),分析相關的數據,從而得到監(jiān)看統(tǒng)計所需要的源數據。本論文以互聯網電視機頂盒“芒果嗨Q H5”為例進行分析。
該軟件旨在取代互聯網電視機頂盒,而直接對機頂盒的部分數據進行數據采集和數據分析,同時進行數據整理。
自動采集:該軟件能自動采集互聯網電視機頂盒的部分數據,并分析所需要的數據。
自動解析:該軟件能解析相關的數據,并提取有用數據,為統(tǒng)計做前提準備。
自動統(tǒng)計:該軟件能按照監(jiān)看的需求,對相關數據進行分析并統(tǒng)計。
自動導出:該軟件能按照監(jiān)看的需求,進行數據導出,并形成報表。
(1)易用性:該軟件可采用兩種方式工作:“定時后臺服務模式”和“人工主動運行模式”。當采用“定時后臺服務模式”時,可達到無人干預的效果,軟件會定時采集、分析并輸出,完全取代人工操作。當采用“人工主動模式”時,工作人員可選擇在監(jiān)看工作需要的時候,手動運行一下該軟件即可,軟件會自動進行采集、分析和輸出。
(2)智能性:該軟件無論采用哪種模式,其運行過程中,均無需人為干預,軟件會自動進行采集、分析、統(tǒng)計并導出相關數據。
(3)跨平臺性:該軟件可運行于Windows、Linux、MacOS、Unix,甚至嵌入式設備中。此外,該軟件也可作為一個模塊嵌入到其他系統(tǒng)中。
該軟件主要分為以下4個模塊。
(1)采集模塊:采集模塊主要是根據特殊數據,按相關API自動發(fā)送網絡請求包,來代替互聯網電視機頂盒的功能進行相應的數據獲取。
(2)解析模塊:解析模塊主要是將API返回的數據,按照對應的格式進行解析,得到統(tǒng)計所需要的數據。該數據一般為程序的數據結構數據。
(3)統(tǒng)計模塊:統(tǒng)計模塊主要是對解析后的數據進行歸納整理,按特定的統(tǒng)計算法算出相關的數值,并暫存到內存中。
(4)導出模塊:導出模塊主要是將統(tǒng)計好的數據,按照特定的報表進行輸出和歸檔。
該軟件使用了抓包工具Charles。Charles 是一款網絡調試代理應用(Web Debugging Proxy Application),能代理、截獲、轉發(fā)電腦上的http收發(fā)請求數據。該軟件的抓包環(huán)境搭建步驟如下所示。
(1)在電腦上啟動軟件Charles,進入Charles的使用界面。進入“Proxy”(代理)菜單,點擊“Proxy Settings”(代理設置)。
圖1 軟件Charles代理設置示意圖
(2)設置Proxies(代理)的HTTP Proxy端口。
圖2 HTTPPeoxy端口設置示意圖
打開互聯網電視機頂盒的“網絡設置”,在已連接的網絡連接處長按遙控器OK鍵,出現菜單后點擊“修改網絡”,再勾選“高級選項”。
點擊“手動”配置,添加http代理,將代理的ip設為Charles 所在電腦的ip,將代理的端口設為Charles中所設置的端口。
EPG是英文Electronic Program Guide(電子節(jié)目指南)的縮寫。它描述了提供給電視節(jié)目觀眾的所有節(jié)目的信息,同時它的更新或異常也能反映出內容的變化和異常,是需要重點監(jiān)控的警報信息。要想統(tǒng)計互聯網電視集成平臺所傳播的節(jié)目數量,則需要抓取域名“epgcdn.hifuntv.com”下的所有http包。
圖3 修改網絡示意圖
圖4 添加http代理示意圖
4.3.1 獲取主頁目錄數據API
表1 獲取主頁目錄數據表
通過解析數據,獲取所有版塊的id和名稱,以便后續(xù)API的請求。
xpath: meta_data_list/meta_data[id==4.0menu]/page/item_data[action!=m_open_web
&&action!=m_open_search_page]/arg_list/a/[k==media_asset_id]/v
xpath: meta_data_list/meta_data[id==4.0menu]/page/item_data[action!=m_open_web
&&action!=m_open_search_page]/arg_list/a/[k==name]/v
通過分析這兩個xpath,可以分別得到版塊的id以及版塊的名字。
原始數據示例:
4.3.2 獲取版塊的主頁數據API
表2 獲取版塊的主頁數據表
此API的作用是獲取每個版塊的主頁數據,返回json類型的數據。
API參數中的“MediaAssetId”,是版塊的id,主要是用來控制該API取哪個版塊。如表2中所示,參數是“movie”,則表示是電影版塊,該值來源于獲取主頁目錄數據API返回的數據。
該示例中的“l(fā)”節(jié)點,描述的是總體數據,即“電影”版塊的基本數據,如下所示:
①media_asset_id:版塊的id
②media_asset_name:版塊的名稱
③media_asset_count:版塊的資源個數
該示例中的“il”節(jié)點,描述的是“電影”版塊下的二級子版塊數據,該示例只展示了其中的一條二級子版塊“最新強檔”,其它二級子版塊類似。
①name:“二級子版塊”名稱
②arg_list/total_video_rows:該“二級子版塊”中的節(jié)目個數
③arg_list/total_special_rows:該“二級子版塊”下的“三級子版塊”的個數
④arg_list/special_list/il:該“三級子版塊”的信息,其中id表示該版塊的id,name表示該版塊的名稱(只有當arg_list/total_special_rows的值不為0時,才有此節(jié)點)。
4.3.3 獲取三級版塊的主頁數據API
此API的作用是獲取每個三級子版塊的主頁數據,返回json類型的數據。
API參數中的“SpecialId”,是三級子版塊的 id,主要是用來控制該API取哪個三級子版塊。如表3中所示,參數是SpecialId,該值來源于接口二API返回的數據,其具體路徑為:arg_list/special_list/il[@id]。
圖5 程序關鍵代碼流程圖
表3 獲取三級版塊的主頁數據表
該軟件可采用簡單的python[3]腳本去爬取監(jiān)看所需的數據。具體程序關鍵代碼流程圖如圖5所示。
例如,在linux中,可以使用crontab設置定時任務,達到定時執(zhí)行的目的。
crontab的基本用法如下所示:
該軟件經過數據統(tǒng)計,可將統(tǒng)計結果形成報表導出。該報表統(tǒng)計了每一個版塊的節(jié)目個數、所占百分比以及總節(jié)目數,并按照節(jié)目數從多到少對各版塊進行了排序。(如表4所示)
表4 和豐互聯網電視集成平臺傳播節(jié)目數量統(tǒng)計表
該軟件可進行進一步的改進,讓導出的報表更豐富?;蛘邔⒔y(tǒng)計好的數據,發(fā)送給web服務器,讓web服務器以web的方式呈現給數據分析人員。
前文詳細闡述了該軟件的抓包環(huán)境搭建、協議分析、程序設計、程序實現和報表導出。通過這個軟件,可以讓開發(fā)人員實現更多數據的統(tǒng)計和更豐富的報表功能。
[1][美]亨特,[譯]吳文國.XML入門經典[M].清華大學出版社.2009-2:2.
[2][美]Lindsay Bassett,[譯]魏嘉汛.JSON必知必會[M].人民郵電出版社.2016-5:17.
[3][美]埃里克.馬瑟斯,[譯]袁國忠.Python編程:從入門到實踐[M].人民郵電出版社. 2016-7-1:15.