王效武, 劉 英
近年來,隨著信息技術的快速發展,特別是電子郵件、社交網絡、論壇、博客、微博等的出現,互聯網已經逐漸成為人們接受信息、發表意見和溝通交流的主要媒介和平臺[1-2]。由于網絡媒體的參與門檻低,同時具有匿名性和群體性特點,使得受眾的數量爆炸式增長;而且隨著3G[3]、4G、wifi等接入技術的出現,人們可以隨時隨地的接入網絡進行信息的發送和接收,這些特性也使得輿情干預人員能夠更隱蔽、更高效地向目標發布信息。因此,研究互聯網信息發布技術十分必要。
互聯網信息發布系統以主流互聯網業務為研究目標,實現目標郵件地址、微博帳號的自動采集和注冊,利用電子郵件、微博等互聯網業務向目標人群發布信息。
發布互聯網信息之前,必須獲取目標用戶的地址和帳號,采用網絡爬蟲技術和關鍵詞匹配的內容識別技術收集用戶地址和帳號信息。
網絡爬蟲是一個自動提取網頁的程序[4],其工作流程如下:首先用戶將原始種子文件導入待爬取的URL庫中,爬蟲程序從URL庫中獲得該輸入,解析URL中的web服務器地址、建立連接、發送請求以及接收數據,將獲得的網頁數據存儲在原始網頁庫中,并從其中提取出鏈接信息放入到網頁結構庫中,同時將網頁中所有待抓取的超鏈接加到URL庫中,保證整個系統的遞歸進行,直到URL庫為空。
關鍵字匹配技術主要是針對網頁中的文本信息進行識別,它通過檢查和搜集網頁中出現的關鍵詞來收集地址和帳號信息,采用切詞策略,將網頁中所有的單詞和短語與關鍵字辭典中的格式內容進行字符匹配,當匹配的個數達到預設的閥值時,將信息錄入用戶數據庫。
自動注冊及登錄技術主要實現用戶到各主流電子郵件、論壇、微博等互聯網網站進行用戶注冊以及在發送信息之前的自動登錄。自動注冊和登陸的關鍵技術是郵箱自動激活賬號和驗證碼識別。
互聯網網站的注冊一般都需要通過郵箱自動激活來激活注冊的用戶,自動注冊技術通過用戶預先設置好的郵箱地址和密碼登陸郵箱,自動收取最近的郵件,進行內容匹配,自動轉向檢測到的URL鏈接,完成帳號的自動激活。
驗證碼的識別技術采用圖形碼自動識別和人工輔助相結合的方式實現,對于能夠分割、對比度較高的驗證碼借鑒成熟的字符識別技術進行自動識別;對于有彩色線噪聲,字符粘連、重疊、動畫、扭曲以及中文字符等驗證碼采用人工輔助方式。
互聯網郵件發送主要通過 SMTP協議實現,其工作原理如圖1所示。

圖1 SMTP協議工作原理
如圖1所示,SMTP協議是TCP/IP協議族中的一員,主要定義如何將電子郵件從發送方地址傳送到接收方地址。首先針對用戶發出的郵件發送請求,由發送方SMTP建立一條連接到接收方SMTP的通信鏈路。發送方 SMTP負責向接收方 SMTP發送SMTP協議命令,而接收方SMTP負責接收。
郵件發布系統以主流的互聯網郵件相關技術為基礎,采用數據庫技術保存目標郵件地址,生成郵件列表;利用人機界面設置郵件屬性和內容,將郵件列表和郵件內容作為郵件群發的參數,循環調用郵件發送過程,完成郵件的批量發送。
郵件發布子系統的實現方式有兩種,一是郵件發布客戶端模式,具有群發功能的客戶端直接使用互聯網服務提供商的郵件服務器,利用這些開放資源完成郵件的轉發,這種方法雖然可以簡化發布系統的設計,但是群發的速度和郵件內容嚴重受限于互聯網的郵件服務器;二是郵件發布客戶端+郵件服務器模式,通過本地搭建的郵件服務器對客戶端群發的郵件進行轉發,采用這種方式可以提高郵件的群發速度和成功率。
如圖2所示,郵件發布子系統軟件分為郵件發布和郵件服務器兩部分,從層次上看,軟件為包含基礎層、業務層、表示層的三層邏輯結構。

圖2 軟件架構設計
1)基礎層:實現數據庫的讀寫訪問適配,以及SMTP等基礎郵件傳送協議。
2)業務層:獨立于具體的協議,實現郵箱地址管理、郵箱地址采集、帳號注冊認證、郵件封裝解析、會話管理、郵件發送、群發策略管理、發送記錄管理。
3)表示層:包括郵箱地址的添加、刪除、編輯、導入、導出界面,郵件內容編輯界面,參數設置界面,維護管理界面等。
系統通過郵箱注冊認證模塊完成源郵箱地址的獲取和自動登陸,利用地址采集獲取目標郵箱地址,地址管理模塊完成郵箱地址的添加、編輯、刪除、導入、導出等功能。郵件封裝解析模塊實現文本、圖片、音頻等格式內容與 XML格式的轉換,根據配置的群發策略將郵件轉換成 SMTP協議包通過TCP/IP協議棧發送。
Visual studio 2010集成了.NET Framework 4.0,其中的System.Net.Mail命名空間中包含了三類郵件傳輸類庫,提供了E-mail發送的所有對象、屬性和方法:
1)MailMessage類:用于構造可用于SmtpClient類傳輸到 SMTP服務器的電子郵件。通過MailMessage類的關聯屬性,制定發件人(From)、收件人(To)、抄送(CC)、密件抄送(BCC)人的郵件地址及附件(Attachments)、主題(Subject)、郵件正文(Body)的內容。
2)SmtpClient類:用于將電子郵件發送到SMTP服務器以便傳遞,指定用來發送電子郵件的 SMTP主機服務器名稱或IP地址及身份驗證憑據。
3)Attachment類:參與MailMessage類一起使用,用來添加郵件的附件。
以郵件發送為例,其調用方法如下:
發送郵件
System.Net.Mail.SmtpClient client= new Smtp Client();
Client.Host=″smtp.sina.com″;// 指定郵件服務器
Client. Credentials = new Network Credential(″********@sinacom*********″);//指定服務器郵件,及密碼
System.Net.Mail.MailMessage message=new MailMessage(addressFrom, addressTo); client.Send(message);
為了使微博平臺擁有豐富多彩的應用,新浪微博、騰訊微博等微博網站都提供標準化的 REST API[5]。REST的全稱是表象化狀態轉移(Representational State Transfer),是一種軟件架構風格。REST把Web服務器端的網絡信息及其表現形式看做資源,每個資源由URI確定,客戶端通過訪問URI來獲取服務器端資源的表形,客戶端應用程序在獲得資源表形后轉變狀態,此過程便是所謂的表象化狀態轉移。REST的設計概念和準則:
1)網絡信息被抽象為資源(Resource)。
2)每個資源由唯一的URI(Universal Resource Identifier)標識。
3)對資源的獲取、創建、更新和刪除等操作通過通用的連接器接口(GenericConnector Interface)進行。
4)URI標識不因對資源的各種操作而改變。
5)對資源的各種操作都是無狀態的(Stateless)。
微博發布子系統利用新浪微博、騰訊微博等提供的開放平臺API(基于HTTP),對原有的碎片化的數據進行重新搭配,綜合利用開放平臺提供的注冊、驗證登陸、信息發送、評論等API接口,開發具備批量發送各類信息的微博、即時通信、社交網站發布子系統。
這些API以HTTP協議為承載平臺,微博發布子系統通過訪問URI來獲取服務器端資源,其返回結果以HTTP方式呈現。每個資源由唯一的URI標識,如新浪微博發送微博消息的 API為http://api.t.sina.com.cn/statuses/update(json|xml),其中json|xml為參數,即XML/JSON(Javascript object notation)格式的待發送微博內容。
使用開放平臺的API之前需要獲得授權,首先在相應的互聯網網站注冊開發者帳號,創建應用,申請APP KEY,APP KEY作為開放平臺API調用參數,完成API授權。
如圖3所示,微博發布子系統軟件架構分為基礎層、支撐層、業務層、表現層,各層功能如下:
1)基礎層:實現HTTP等基礎傳送協議,提供數據庫訪問接口。
2)支撐層:完成XML/JSON格式的微博頁面內容解析和封裝,并通過REST API調用微博服務器的資源。
3)業務層:獨立于具體的協議和微博服務,實現微博帳號管理、微博帳號采集、帳號注冊認證、微博采集評論、群發微博、群發評論、群發@消息、群發私信等。
4)表示層:包括微博帳號的添加、刪除、編輯、導入、導出界面,微博、評論、@消息等的內容編輯界面,參數設置界面等。

圖3 軟件架構設計
(1)批量發送策略模塊
由于大部分微博網站的用戶量龐大,為了緩解海量處理導致的硬件成本增加,微博網站增加了訪問限制,以新浪為例:針對普通授權用戶,一個IP的請求次數不超過10 000次/小時,單用戶每應用的請求次數不超過1 000次/小時。當頻次權限達到本級別的上限時,可在網站在線申請,條件比較苛刻。
批量發送策略模塊主要通過以下方法解決頻次權限問題:
1)定時更換IP:ADSL接入時,通過斷開重建立PPPOE鏈接的方式重新獲取IP,也可通過代理服務器的方式連接微博網站。
2)增加微博帳號數量,進行帳號輪轉:監控每一個帳號的接口API使用次數,在限制范圍內輪轉帳號發送。
3)盡可能多的使用網站提供的匿名接口。
4)盡量減少請求量,減少請求接口返回數據:通過緩存一些已經獲取到的數據,來提高應用的效率和體驗,特別是針對一些很少變動的數據,如用戶頭像、表情數據等。
(2)C# SDK
通過新浪、騰訊、網易等微博網站都可以獲取基于C#語言的SDK包,SDK是通用的API使用工具,SDK實現了開放平臺的全部或大部分接口,通過SDK的使用,不需要關心API接口細節、認證實現等,可以直接調用接口完成微博的注冊、登陸、群發信息等功能。
以新浪為例,其SDK提供的接口API格式如下:
發布一條新微博
要發布的微博文本內容,內容不超過140個漢字。
緯度,有效范圍:-90.0到+90.0,+表示北緯,默認為0.0。
經度,有效范圍:-180.0到+180.0,+表示東經,默認為0.0。
元數據,記錄一些適合于自己使用的信息。
public string Update(string status, float lat = 0.0f,float log = 0.0f, string annotations = "")
轉發一條微博
要轉發的微博ID。
添加的轉發文本,內容不超過140個漢字。
是否在轉發的同時發表評論。
public string Repost(string id, string status, int isComment)
本系統利用Visual studio 2010開發,采用語言語法簡潔、易用的C#作為開發語言,具有良好穩定性、友好的界面和可擴展性,對 Windows系統具有很好的支持。郵件發布子系統實現了郵件地址和管理,通過郵件地址列表實現了郵件的批量發布;微博發布子系統支持微博、評論、私信、@消息的批量發布。這就為互聯網輿情的干預提供了一個新的有效途徑。目前系統實現了互聯網發布的基本功能,但如何增強信息發布后的效果還需要進一步研究[6]。
[1] 陳銘,李生紅,陳秀真,等.基于句式結構的評論傾向性識別方法[J].通信技術,2011,44(02):100.
[2] 仇鈞,劉功申.基于關系的微博重要度算法研究[J].信息安全與通信保密,2013(01):51.
[3] 孫俊杰,鄢妍.3G移動通信技術的研究[J].通信技術,2012,45(04):66.
[4] 李曉明,閏宏飛,王繼民,等.搜索引擎原理、技術與系統[M].北京:科學出版社,2004:29-42.
[5] 徐涵.RESTfuI Web services中文版[M].北京:電子工業出版社,2008:35-45.
[6] 劉英,王效武,曾兵,等.一種數據備份與恢復系統體系設計[J].信息安全與通信保密,2011(01):66.