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