王效武, 刘 英
近年来,随着信息技术的快速发展,特别是电子邮件、社交网络、论坛、博客、微博等的出现,互联网已经逐渐成为人们接受信息、发表意见和沟通交流的主要媒介和平台[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.