王效武, 劉 英
近年來,隨著信息技術(shù)的快速發(fā)展,特別是電子郵件、社交網(wǎng)絡(luò)、論壇、博客、微博等的出現(xiàn),互聯(lián)網(wǎng)已經(jīng)逐漸成為人們接受信息、發(fā)表意見和溝通交流的主要媒介和平臺[1-2]。由于網(wǎng)絡(luò)媒體的參與門檻低,同時(shí)具有匿名性和群體性特點(diǎn),使得受眾的數(shù)量爆炸式增長;而且隨著3G[3]、4G、wifi等接入技術(shù)的出現(xiàn),人們可以隨時(shí)隨地的接入網(wǎng)絡(luò)進(jìn)行信息的發(fā)送和接收,這些特性也使得輿情干預(yù)人員能夠更隱蔽、更高效地向目標(biāo)發(fā)布信息。因此,研究互聯(lián)網(wǎng)信息發(fā)布技術(shù)十分必要。
互聯(lián)網(wǎng)信息發(fā)布系統(tǒng)以主流互聯(lián)網(wǎng)業(yè)務(wù)為研究目標(biāo),實(shí)現(xiàn)目標(biāo)郵件地址、微博帳號的自動采集和注冊,利用電子郵件、微博等互聯(lián)網(wǎng)業(yè)務(wù)向目標(biāo)人群發(fā)布信息。
發(fā)布互聯(lián)網(wǎng)信息之前,必須獲取目標(biāo)用戶的地址和帳號,采用網(wǎng)絡(luò)爬蟲技術(shù)和關(guān)鍵詞匹配的內(nèi)容識別技術(shù)收集用戶地址和帳號信息。
網(wǎng)絡(luò)爬蟲是一個(gè)自動提取網(wǎng)頁的程序[4],其工作流程如下:首先用戶將原始種子文件導(dǎo)入待爬取的URL庫中,爬蟲程序從URL庫中獲得該輸入,解析URL中的web服務(wù)器地址、建立連接、發(fā)送請求以及接收數(shù)據(jù),將獲得的網(wǎng)頁數(shù)據(jù)存儲在原始網(wǎng)頁庫中,并從其中提取出鏈接信息放入到網(wǎng)頁結(jié)構(gòu)庫中,同時(shí)將網(wǎng)頁中所有待抓取的超鏈接加到URL庫中,保證整個(gè)系統(tǒng)的遞歸進(jìn)行,直到URL庫為空。
關(guān)鍵字匹配技術(shù)主要是針對網(wǎng)頁中的文本信息進(jìn)行識別,它通過檢查和搜集網(wǎng)頁中出現(xiàn)的關(guān)鍵詞來收集地址和帳號信息,采用切詞策略,將網(wǎng)頁中所有的單詞和短語與關(guān)鍵字辭典中的格式內(nèi)容進(jìn)行字符匹配,當(dāng)匹配的個(gè)數(shù)達(dá)到預(yù)設(shè)的閥值時(shí),將信息錄入用戶數(shù)據(jù)庫。
自動注冊及登錄技術(shù)主要實(shí)現(xiàn)用戶到各主流電子郵件、論壇、微博等互聯(lián)網(wǎng)網(wǎng)站進(jìn)行用戶注冊以及在發(fā)送信息之前的自動登錄。自動注冊和登陸的關(guān)鍵技術(shù)是郵箱自動激活賬號和驗(yàn)證碼識別。
互聯(lián)網(wǎng)網(wǎng)站的注冊一般都需要通過郵箱自動激活來激活注冊的用戶,自動注冊技術(shù)通過用戶預(yù)先設(shè)置好的郵箱地址和密碼登陸郵箱,自動收取最近的郵件,進(jìn)行內(nèi)容匹配,自動轉(zhuǎn)向檢測到的URL鏈接,完成帳號的自動激活。
驗(yàn)證碼的識別技術(shù)采用圖形碼自動識別和人工輔助相結(jié)合的方式實(shí)現(xiàn),對于能夠分割、對比度較高的驗(yàn)證碼借鑒成熟的字符識別技術(shù)進(jìn)行自動識別;對于有彩色線噪聲,字符粘連、重疊、動畫、扭曲以及中文字符等驗(yàn)證碼采用人工輔助方式。
互聯(lián)網(wǎng)郵件發(fā)送主要通過 SMTP協(xié)議實(shí)現(xiàn),其工作原理如圖1所示。
圖1 SMTP協(xié)議工作原理
如圖1所示,SMTP協(xié)議是TCP/IP協(xié)議族中的一員,主要定義如何將電子郵件從發(fā)送方地址傳送到接收方地址。首先針對用戶發(fā)出的郵件發(fā)送請求,由發(fā)送方SMTP建立一條連接到接收方SMTP的通信鏈路。發(fā)送方 SMTP負(fù)責(zé)向接收方 SMTP發(fā)送SMTP協(xié)議命令,而接收方SMTP負(fù)責(zé)接收。
郵件發(fā)布系統(tǒng)以主流的互聯(lián)網(wǎng)郵件相關(guān)技術(shù)為基礎(chǔ),采用數(shù)據(jù)庫技術(shù)保存目標(biāo)郵件地址,生成郵件列表;利用人機(jī)界面設(shè)置郵件屬性和內(nèi)容,將郵件列表和郵件內(nèi)容作為郵件群發(fā)的參數(shù),循環(huán)調(diào)用郵件發(fā)送過程,完成郵件的批量發(fā)送。
郵件發(fā)布子系統(tǒng)的實(shí)現(xiàn)方式有兩種,一是郵件發(fā)布客戶端模式,具有群發(fā)功能的客戶端直接使用互聯(lián)網(wǎng)服務(wù)提供商的郵件服務(wù)器,利用這些開放資源完成郵件的轉(zhuǎn)發(fā),這種方法雖然可以簡化發(fā)布系統(tǒng)的設(shè)計(jì),但是群發(fā)的速度和郵件內(nèi)容嚴(yán)重受限于互聯(lián)網(wǎng)的郵件服務(wù)器;二是郵件發(fā)布客戶端+郵件服務(wù)器模式,通過本地搭建的郵件服務(wù)器對客戶端群發(fā)的郵件進(jìn)行轉(zhuǎn)發(fā),采用這種方式可以提高郵件的群發(fā)速度和成功率。
如圖2所示,郵件發(fā)布子系統(tǒng)軟件分為郵件發(fā)布和郵件服務(wù)器兩部分,從層次上看,軟件為包含基礎(chǔ)層、業(yè)務(wù)層、表示層的三層邏輯結(jié)構(gòu)。
圖2 軟件架構(gòu)設(shè)計(jì)
1)基礎(chǔ)層:實(shí)現(xiàn)數(shù)據(jù)庫的讀寫訪問適配,以及SMTP等基礎(chǔ)郵件傳送協(xié)議。
2)業(yè)務(wù)層:獨(dú)立于具體的協(xié)議,實(shí)現(xiàn)郵箱地址管理、郵箱地址采集、帳號注冊認(rèn)證、郵件封裝解析、會話管理、郵件發(fā)送、群發(fā)策略管理、發(fā)送記錄管理。
3)表示層:包括郵箱地址的添加、刪除、編輯、導(dǎo)入、導(dǎo)出界面,郵件內(nèi)容編輯界面,參數(shù)設(shè)置界面,維護(hù)管理界面等。
系統(tǒng)通過郵箱注冊認(rèn)證模塊完成源郵箱地址的獲取和自動登陸,利用地址采集獲取目標(biāo)郵箱地址,地址管理模塊完成郵箱地址的添加、編輯、刪除、導(dǎo)入、導(dǎo)出等功能。郵件封裝解析模塊實(shí)現(xiàn)文本、圖片、音頻等格式內(nèi)容與 XML格式的轉(zhuǎn)換,根據(jù)配置的群發(fā)策略將郵件轉(zhuǎn)換成 SMTP協(xié)議包通過TCP/IP協(xié)議棧發(fā)送。
Visual studio 2010集成了.NET Framework 4.0,其中的System.Net.Mail命名空間中包含了三類郵件傳輸類庫,提供了E-mail發(fā)送的所有對象、屬性和方法:
1)MailMessage類:用于構(gòu)造可用于SmtpClient類傳輸?shù)?SMTP服務(wù)器的電子郵件。通過MailMessage類的關(guān)聯(lián)屬性,制定發(fā)件人(From)、收件人(To)、抄送(CC)、密件抄送(BCC)人的郵件地址及附件(Attachments)、主題(Subject)、郵件正文(Body)的內(nèi)容。
2)SmtpClient類:用于將電子郵件發(fā)送到SMTP服務(wù)器以便傳遞,指定用來發(fā)送電子郵件的 SMTP主機(jī)服務(wù)器名稱或IP地址及身份驗(yàn)證憑據(jù)。
3)Attachment類:參與MailMessage類一起使用,用來添加郵件的附件。
以郵件發(fā)送為例,其調(diào)用方法如下:
發(fā)送郵件
System.Net.Mail.SmtpClient client= new Smtp Client();
Client.Host=″smtp.sina.com″;// 指定郵件服務(wù)器
Client. Credentials = new Network Credential(″********@sinacom*********″);//指定服務(wù)器郵件,及密碼
System.Net.Mail.MailMessage message=new MailMessage(addressFrom, addressTo); client.Send(message);
為了使微博平臺擁有豐富多彩的應(yīng)用,新浪微博、騰訊微博等微博網(wǎng)站都提供標(biāo)準(zhǔn)化的 REST API[5]。REST的全稱是表象化狀態(tài)轉(zhuǎn)移(Representational State Transfer),是一種軟件架構(gòu)風(fēng)格。REST把Web服務(wù)器端的網(wǎng)絡(luò)信息及其表現(xiàn)形式看做資源,每個(gè)資源由URI確定,客戶端通過訪問URI來獲取服務(wù)器端資源的表形,客戶端應(yīng)用程序在獲得資源表形后轉(zhuǎn)變狀態(tài),此過程便是所謂的表象化狀態(tài)轉(zhuǎn)移。REST的設(shè)計(jì)概念和準(zhǔn)則:
1)網(wǎng)絡(luò)信息被抽象為資源(Resource)。
2)每個(gè)資源由唯一的URI(Universal Resource Identifier)標(biāo)識。
3)對資源的獲取、創(chuàng)建、更新和刪除等操作通過通用的連接器接口(GenericConnector Interface)進(jìn)行。
4)URI標(biāo)識不因?qū)Y源的各種操作而改變。
5)對資源的各種操作都是無狀態(tài)的(Stateless)。
微博發(fā)布子系統(tǒng)利用新浪微博、騰訊微博等提供的開放平臺API(基于HTTP),對原有的碎片化的數(shù)據(jù)進(jìn)行重新搭配,綜合利用開放平臺提供的注冊、驗(yàn)證登陸、信息發(fā)送、評論等API接口,開發(fā)具備批量發(fā)送各類信息的微博、即時(shí)通信、社交網(wǎng)站發(fā)布子系統(tǒng)。
這些API以HTTP協(xié)議為承載平臺,微博發(fā)布子系統(tǒng)通過訪問URI來獲取服務(wù)器端資源,其返回結(jié)果以HTTP方式呈現(xiàn)。每個(gè)資源由唯一的URI標(biāo)識,如新浪微博發(fā)送微博消息的 API為http://api.t.sina.com.cn/statuses/update(json|xml),其中json|xml為參數(shù),即XML/JSON(Javascript object notation)格式的待發(fā)送微博內(nèi)容。
使用開放平臺的API之前需要獲得授權(quán),首先在相應(yīng)的互聯(lián)網(wǎng)網(wǎng)站注冊開發(fā)者帳號,創(chuàng)建應(yīng)用,申請APP KEY,APP KEY作為開放平臺API調(diào)用參數(shù),完成API授權(quán)。
如圖3所示,微博發(fā)布子系統(tǒng)軟件架構(gòu)分為基礎(chǔ)層、支撐層、業(yè)務(wù)層、表現(xiàn)層,各層功能如下:
1)基礎(chǔ)層:實(shí)現(xiàn)HTTP等基礎(chǔ)傳送協(xié)議,提供數(shù)據(jù)庫訪問接口。
2)支撐層:完成XML/JSON格式的微博頁面內(nèi)容解析和封裝,并通過REST API調(diào)用微博服務(wù)器的資源。
3)業(yè)務(wù)層:獨(dú)立于具體的協(xié)議和微博服務(wù),實(shí)現(xiàn)微博帳號管理、微博帳號采集、帳號注冊認(rèn)證、微博采集評論、群發(fā)微博、群發(fā)評論、群發(fā)@消息、群發(fā)私信等。
4)表示層:包括微博帳號的添加、刪除、編輯、導(dǎo)入、導(dǎo)出界面,微博、評論、@消息等的內(nèi)容編輯界面,參數(shù)設(shè)置界面等。
圖3 軟件架構(gòu)設(shè)計(jì)
(1)批量發(fā)送策略模塊
由于大部分微博網(wǎng)站的用戶量龐大,為了緩解海量處理導(dǎo)致的硬件成本增加,微博網(wǎng)站增加了訪問限制,以新浪為例:針對普通授權(quán)用戶,一個(gè)IP的請求次數(shù)不超過10 000次/小時(shí),單用戶每應(yīng)用的請求次數(shù)不超過1 000次/小時(shí)。當(dāng)頻次權(quán)限達(dá)到本級別的上限時(shí),可在網(wǎng)站在線申請,條件比較苛刻。
批量發(fā)送策略模塊主要通過以下方法解決頻次權(quán)限問題:
1)定時(shí)更換IP:ADSL接入時(shí),通過斷開重建立PPPOE鏈接的方式重新獲取IP,也可通過代理服務(wù)器的方式連接微博網(wǎng)站。
2)增加微博帳號數(shù)量,進(jìn)行帳號輪轉(zhuǎn):監(jiān)控每一個(gè)帳號的接口API使用次數(shù),在限制范圍內(nèi)輪轉(zhuǎn)帳號發(fā)送。
3)盡可能多的使用網(wǎng)站提供的匿名接口。
4)盡量減少請求量,減少請求接口返回?cái)?shù)據(jù):通過緩存一些已經(jīng)獲取到的數(shù)據(jù),來提高應(yīng)用的效率和體驗(yàn),特別是針對一些很少變動的數(shù)據(jù),如用戶頭像、表情數(shù)據(jù)等。
(2)C# SDK
通過新浪、騰訊、網(wǎng)易等微博網(wǎng)站都可以獲取基于C#語言的SDK包,SDK是通用的API使用工具,SDK實(shí)現(xiàn)了開放平臺的全部或大部分接口,通過SDK的使用,不需要關(guān)心API接口細(xì)節(jié)、認(rèn)證實(shí)現(xiàn)等,可以直接調(diào)用接口完成微博的注冊、登陸、群發(fā)信息等功能。
以新浪為例,其SDK提供的接口API格式如下:
發(fā)布一條新微博
要發(fā)布的微博文本內(nèi)容,內(nèi)容不超過140個(gè)漢字。
緯度,有效范圍:-90.0到+90.0,+表示北緯,默認(rèn)為0.0。
經(jīng)度,有效范圍:-180.0到+180.0,+表示東經(jīng),默認(rèn)為0.0。
元數(shù)據(jù),記錄一些適合于自己使用的信息。
public string Update(string status, float lat = 0.0f,float log = 0.0f, string annotations = "")
轉(zhuǎn)發(fā)一條微博
要轉(zhuǎn)發(fā)的微博ID。
添加的轉(zhuǎn)發(fā)文本,內(nèi)容不超過140個(gè)漢字。
是否在轉(zhuǎn)發(fā)的同時(shí)發(fā)表評論。
public string Repost(string id, string status, int isComment)
本系統(tǒng)利用Visual studio 2010開發(fā),采用語言語法簡潔、易用的C#作為開發(fā)語言,具有良好穩(wěn)定性、友好的界面和可擴(kuò)展性,對 Windows系統(tǒng)具有很好的支持。郵件發(fā)布子系統(tǒng)實(shí)現(xiàn)了郵件地址和管理,通過郵件地址列表實(shí)現(xiàn)了郵件的批量發(fā)布;微博發(fā)布子系統(tǒng)支持微博、評論、私信、@消息的批量發(fā)布。這就為互聯(lián)網(wǎng)輿情的干預(yù)提供了一個(gè)新的有效途徑。目前系統(tǒng)實(shí)現(xiàn)了互聯(lián)網(wǎng)發(fā)布的基本功能,但如何增強(qiáng)信息發(fā)布后的效果還需要進(jìn)一步研究[6]。
[1] 陳銘,李生紅,陳秀真,等.基于句式結(jié)構(gòu)的評論傾向性識別方法[J].通信技術(shù),2011,44(02):100.
[2] 仇鈞,劉功申.基于關(guān)系的微博重要度算法研究[J].信息安全與通信保密,2013(01):51.
[3] 孫俊杰,鄢妍.3G移動通信技術(shù)的研究[J].通信技術(shù),2012,45(04):66.
[4] 李曉明,閏宏飛,王繼民,等.搜索引擎原理、技術(shù)與系統(tǒng)[M].北京:科學(xué)出版社,2004:29-42.
[5] 徐涵.RESTfuI Web services中文版[M].北京:電子工業(yè)出版社,2008:35-45.
[6] 劉英,王效武,曾兵,等.一種數(shù)據(jù)備份與恢復(fù)系統(tǒng)體系設(shè)計(jì)[J].信息安全與通信保密,2011(01):66.