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