基于开放平台的政务微博管理系统的设计与实现(1)——系统开发实例

政务微博,微博管理系统,微博开放平台,Web系统开发

随着移动互联网技术的不断成熟,微博正以极快的速度发展和影响着人们的生活。微博作为一种移动互联网时代的交流沟通工具,它所具有的便利性和及时性是目前其它任何网络工具都无法比拟的。微博发源于美国的twitter,用户可以通过手机、电脑、平板以及其它客户端自由的组建个人社区,大大的方便了人们之间的交流与沟通。目前国内最具影响力的两大微博平台是新浪微博和腾讯微博,前者最先进入这一领域,具备较雄厚的技术实力,后者凭借其所拥有的强大的用户群也发展迅猛。另外,还有搜狐、网易等也具有各自的微博平台,但相较于前两者影响力则低了很多。

微博的影响力与日俱增,各种围绕着这一领域的应用在不断涌现,其中一个很重要的方面便是政务微博。近来年,政务微博在信息公开、民众沟通、危机处置中发挥了越来越重要的作用。然而,由于平台的差异化及政务职能的多样化,给政务微博的管理带来了一定的难度。具体表现在:1.为了有更广阔的用户覆盖面,需要在多个平台同时注册和发布相同的信息,不仅提升了工作量也带来了使用上的不便。在接收用户反馈和处理信息时也同样存在这样的问题;2.一个政务微博可能需要有多人维护,这样就出现多个人使用同一个账户的问题,在账户的安全性及使用的便捷性上都会存在问题;3.对于具有多个职能部门的单位,有可能需要针对每一个部门设立独立的账号,由于账号之间没有关联性,在管理上也带来很大的困难。当然,除此以外还可能存在其它方面的问题,这里就不再详述了。

我们的想法便是通过组建一个完整的政务微博系统,将多个平台的信息交互同时纳入,在同一个系统中对多个平台的信息进行统一管理,将系统登陆账户与微博的使用账户隔离,并且在系统内部建立多级的权限管理模式。目前,新浪、腾讯、网易、搜狐等均提供了微博开放平台接口,为我们实现以上目标提供了基础的技术支撑。

以最大的两个微博门户(新浪、腾讯)为例,我们以下将探讨设计和开发政务微博系统的途径和方法。

首先是数据库的设计,数据库中关键的数据表需要存储的是微博信息的数据,我们以面向对象的方式来进行系统的开发,这里数据表的设计也应该兼顾到微博信息中的最基本的单元。考虑到不同平台的微博系统所提供的微博数据的命名可能有所不同,常规的方式是可以根据不同平台的数据来源分别设计数据表,但是这样的话接收和存储数据的业务逻辑因为要进行数据区分将会变得复杂。因此,我们最终选择了以微博基本信息为主体的数据存储结构,当然,这里的信息尽可能包含微博平台所能提供的所有内容,如果出现极个别另类字段,系统将不予考虑。微博基本信息对象的构造函数如下,从其英文名称可以直观看出字段的意义,这里不再添加中文说明。

public fy_WeiBoInfoBase(int? id, long? weiBoUId, DateTime? endTime, DateTime? acceptTime, DateTime? receiveTime,
 string infoFrom, int? infoClassId, int? regionId, int? stepId, string address, string infoDes, string infoImgList, 
 string infoReply, int? isVerify, int? isReply, DateTime? modifyTime, string infoFromUser, string infoFromNick, 
 string replyUser, int? replyType, int? isSent, DateTime? sentTime)
        {
            this.Id = id;
            this.WeiBoUId = weiBoUId;
            this.EndTime = endTime;
            this.AcceptTime = acceptTime;
            this.ReceiveTime = receiveTime;
            this.InfoFrom = infoFrom;
            this.InfoClassId = infoClassId;
            this.RegionId = regionId;
            this.StepId = stepId;
            this.Address = address;
            this.InfoDes = infoDes;
            this.InfoImgList = infoImgList;
            this.InfoReply = infoReply;
            this.IsVerify = isVerify;
            this.IsReply = isReply;
            this.ModifyTime = modifyTime;
            this.InfoFromUser = infoFromUser;
            this.InfoFromNick = infoFromNick;
            this.ReplyUser = replyUser;
            this.ReplyType = replyType;
            this.IsSent = isSent;
            this.SentTime = sentTime;
        }

不同平台的微博信息数据与该对象关联并存储于数据库中,前台也通过该对象从数据表中读取数据进行微博信息的综合展示,该对象相当于一个基础数据的统一接口。目前,不同服务商的开放接口均是以JSON格式来传递数据信息,不过各个信息字段的命名会有所不同,因而需要建立相应的对象进行处理。以腾讯为例,我们设计的对象的构造函数代码如下:

public WeiBo_T_Data_Info(string text, string origtext, int count, int mcount, string from, long id, string image,
 string video, string music, string name, string openid, string nick, string source, int self, int timestamp, int type, 
 string head, string location, string country_code, string province_code, string city_code, int isvip, string geo, int status)
        {
            this.text = text;
            this.origtext = origtext;
            this.count = count;
            this.mcount = mcount;
            this.from = from;
            this.id = id;
            this.image = image;
            this.video = video;
            this.music = music;
            this.name = name;
            this.openid = openid;
            this.nick = nick;
            this.source = source;
            this.self = self;
            this.timestamp = timestamp;
            this.type = type;
            this.head = head;
            this.location = location;
            this.country_code = country_code;
            this.province_code = province_code;
            this.city_code = city_code;
            this.isvip = isvip;
            this.geo = geo;
            this.status = status;
        }
public WeiBo_T_Data_Info(JsonData jd)
        {
            this.text = (string)jd["text"];
            this.origtext = (string)jd["origtext"];
            this.count = (int)jd["count"];
            this.mcount = (int)jd["mcount"];
            this.from = (string)jd["from"];
            this.id = Convert.ToInt64((string)jd["id"]);
            this.image = jd["image"] == null ? "" : jd["image"].ToJson();
            this.video = jd["video"] == null ? "" : JsonMapper.ToJson((new WeiBo_T_Data_Info_Video(jd["video"])));
            this.music = jd["music"] == null ? "" : JsonMapper.ToJson((new WeiBo_T_Data_Info_Music(jd["music"])));
            this.name = (string)jd["name"];
            this.openid = (string)jd["openid"];
            this.nick = (string)jd["nick"];
            this.source = jd["source"] == null ? "" : JsonMapper.ToJson((new WeiBo_T_Data_Info_Source(jd["source"])));
            this.self = (int)jd["self"];
            this.timestamp = (int)jd["timestamp"];
            this.type = (int)jd["type"];
            this.head = (string)jd["head"];
            this.location = (string)jd["location"];
            this.country_code = (string)jd["country_code"];
            this.province_code = (string)jd["province_code"];
            this.city_code = (string)jd["city_code"];
            this.isvip = (int)jd["isvip"];
            this.geo = jd["geo"] == null ? "" : jd["geo"].ToJson();
            this.status = (int)jd["status"];
        }

这里是两个不同参数的重载函数,分别对应于手工实例化和JSON数据实例化的操作,其字段的含义可参考腾讯微博开放平台中的字段说明。这里需要注意的是,诸如video、music、source等参数,其实也是作为对象进行处理的,只不过在存储时使用的是JSON字符串的类型,这是为了能在后续的处理中再次方便的解析为对象。

(注:本文为 [风影网络工作室] 原创文章,未经书面许可,严禁转载和复制本站的任何信息,违者必究)