图片搜索好友获取微博信息等功能。
1.3 研究思路 应用程序主要是针对的新浪提供的SDK而展开的再深入分析用户可能会用到的功能和用户喜欢的界面UI设计实现新浪微博网页版功能进而移植到桌面客户端使用户体验更加丰富和方便并且在后续版本开放中可以充分发挥桌面平台的优势开发出更多和新浪微博相关的各种插件服务功能。
在应用的开发中主要要弄清是如何请求数据和发送数据的对API接口需要从最初了解其功能到最终的掌握其方法。
考虑到是即时通讯应用软件并且微博更新的速度较快主要侧重于“即时收发数据”并且做到数据发送的完整和迅速。
在整个系统中没有设置数据库来存放用户数据只是在系统中设置了存放系统配置的文件。
第2章 系统的相关技术 3 第2章 系统的相关技术 2.1 J2SE介绍 随着Internet网络的迅速发展基于互联网的企业应用要求软件平台具有开放性、分布性和平台无关性。
于是就相继出现了RPC/COM/CORBA等技术但这些技术在实际应用中存在着许多不足和局限。
它们的特定协议难以通过防火墙因而不适于Web上的应用开发。
为了进一步开发基于Web的应用出现了Sun公司的Sun ONEOpen Net Environment 开发网络环境和Microsoft公司的。
NET等Web 服务技术体系。
Sun ONE体系结构以Java语言为核心包括J2SE/J2EE/J2ME和一系列的标准、技术及协议。
它包括Sun独有的iPlanet软件系列其中有在市场上受欢迎的LDAP目录服务器软件以及Forte for Java――便于在任何环境下书写Java 语言的软件工具。
我们很容易就能从网上免费获得和使用包括Java 集成开发环境、Java数据库和中间件Application Server服务器等产品以及它们的源代码。
Sun ONE更接近或能满足互联网在智能化Web服务方面对分布性、开发性和平台无关性的要求。
2.2 OAuth验证机制 OAUTH认证授权就三个步骤三句话可以概括 1. 获取未授权的Request Token 2. 获取用户授权的Request Token 3. 用授权的Request Token换取
Access Token 当应用拿到
Access Token后就可以有权访问用户授权的资源了。
这三个步骤是对应OAUTH的三个URL服务地址。
上面的三个步骤中每个步骤分别请求一个URL并且收到相关信息并且拿到上步的相关信息去请求接下来的URL直到拿到
Access Token。
具体每步执行信息如下 A. 使用者第三方软件向OAUTH服务提供商请求未授权的Request Token。
向Request Token URL发起请求。
4 B. OAUTH服务提供商同意使用者的请求并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret并返回给使用者。
C. 使用者向OAUTH服务提供商请求用户授权的Request Token。
向User Authorization URL发起请求请求带上上步拿到的未授权的token与其密钥。
D. OAUTH服务提供商将引导用户授权。
该过程可能会提示用户你想将哪些受保护的资源授权给该应用。
此步可能会返回授权的Request Token也可能不返回。
如Yahoo OAUTH就不会返回任何信息给使用者。
E. Request Token 授权后使用者将向
Access Token URL发起请求将上步授权的Request Token换取成
Access Token。
请求的参数见上图这个比第一步A多了一个参数就是Request Token。
F. OAUTH服务提供商同意使用者的请求并向其颁发
Access Token与对应的密钥并返回给使用者。
G. 使用者以后就可以使用上步返回的
Access Token访问用户授权的资源。
从上面的步骤可以看出用户始终没有将其用户名与密码等信息提供给使用者第三方软件从而更安全。
图 2-1 OAUTH认证机制流程图 获取request token 创建request token以及相应的密钥secret 询问用户是否授权使用该客户端 用户授权或者拒绝 如果用户同意授权则转向您的应用。
用request token向新浪换取
access token 创建并返回
access token 以及secret 获取该
access token 的信息并且获取用户的信息 第2章 系统的相关技术 5 2.3 JSON解析 JSONJavaScript Object Notation 是一种轻量级的数据交换格式。
易于人阅读和编写同时也易于机器解析和生成。
它基于JavaScriptStandard ECMA-262 3rd Edition - December 1999的一个子集。
JSON采用完全独立于语言的文本格式但是也使用了类似于C语言家族的习惯包括C C C Java JavaScript Perl Python等。
这些特性使JSON成为理想的数据交换语言。
JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串然后就可以在函数之间轻松地传递这个字符串或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。
这个字符串看起来有点儿古怪但是 JavaScript 很容易解释它而且 JSON 可以表示比名称 / 值对更复杂的结构。
事实上大部分现代计算机语言都以某种形式支持它们。
这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
JSON具有以下这些形式 对象是一个无序的“??名称/值??对”集合。
一个对象以“”左括号开始“”右括号结束。
每个“名称”后跟一个“:”冒号“??名称/值?? 对”之间使用“”逗号分隔。
图 3-1 数组是值value的有序集合。
一个数组以“”左中括号开始“”右中括号结束。
值之间使用“”逗号分隔。
图 3-2 6 值value可以是双引号括起来的字符串string、数值number、true、false、 null、对象object或者数组array。
这些结构可以嵌套。
图 3-3 字符串string是由双引号包围的任意数量Unicode字符的集合使用反斜线转义。
一个字符character即一个单独的字符串character string。
字符串string与C或者Java的字符串非常相似。
图 3-4 数值number也与C或者Java的数值非常相似。
除去未曾使用的八进制与十六进制格式。
除去一些编码细节。
第2章 系统的相关技术 7 图 3-5 2.4 XML解析 XML的解析方式有两种 一是通过文档模型解析也就是通过父标签索引出一组标记。
另外一种方法是遍历节点document 以及 childNodes。
这个可以通过递归来实现不过解析出来的数据仍旧是形式各异往往也不能满足预先的要求。
通过GET方法获取到的新浪微博数据是以XML或者JSON的形式返回的这就要求我们要用XML类或者JSON类进行解析通过某一个KEY来获取到其String值。
对于XML解析使用JDK自带类库操作XML。
部分实现功能代码如下所示 /XML类解析开始/ public static Dom newDomString rootName throws XmlException Document doc null try DocumentBuilder dombuilder DocumentBuilderFactory.newInstance.newDocumentBuilder doc dombuilder.newDocument doc.setXmlStandalonetrue 8 catch Exception e throw new XmlExceptione.getMessage e Element root doc.createElementrootName doc.appendChildroot return new Domroot public static Dom getRootInputStream is throws XmlException Document doc null try DocumentBuilder dombuilder DocumentBuilderFactory.newInstance.newDocumentBuilder doc dombuilder.parseis catch Exception e throw new XmlExceptione.getMessage e Element root doc.getDocumentElement return new Domroot public static Dom getRootString xmlFile throws XmlException try InputStream is new FileInputStreamxmlFile Dom root getRootis is.close return root 第2章 系统的相关技术 9 catch Exception e throw new XmlExceptione.getMessage e public String getAttributeValueString attributeName return e.getAttributeattributeName public boolean existElementString elementName NodeList nodeList e.getElementsByTagNameelementName if nodeList null nodeList.getLength lt 1 return false return true public String elementTextString elementName Element element Elemente.getElementsByTagNameelementName.item0 Node textNode element.getFirstChild if textNode null return quotquot eturn textNode.getNodeValue public Dom elementString elementName 10 NodeList nodeList e.getElementsByTagNameelementName if nodeList null nodeList.getLength lt 1 return null Element element Element nodeList.item0 return new Domelement public ListltDomgt elementsString elementName ListltDomgt eList new ArrayListltDomgt NodeList nodeList e.getElementsByTagNameelementName if nodeList null return eList for int i 0 i lt nodeList.getLength i Node node nodeList.itemi if node.getNodeType Node.ELEMENT_NODE Element element Element node eList.addnew Domelement return eList /XML解析类结束/ 第2章 系统的相关技术 11 图2-2 XML解析流程图 加载用户选择文档 指定了文档的内容类型吗 使用匹配的列表内容类型 使用的是文档内容类型的最近子项的列表内容类型 使用具有相同文档模板的第一个列表内容类型 文档内容类型匹配列表内容类型吗 列表的文档内容类型是文档内容类型的子项吗 指定了文档的模板了吗 将默认的内容类型分配给文档 上载文档并将匹配的属性升级到列表 否 是 否 是 是 是 否 12 第3章 系统的分析 3.1 技术可行性研究 在申请课题之前对新浪官方提供的SDK版本号 weibo4j-2010-12-27进行了分析。
对SDK中封装的方法进行了测试并且对未封装的方法也进行了重新的补充在新浪的开发平台的“工具”中对接口进行了相应的测试接口URL: http://open.t.sina.com.cn/tools/console结果调用数据正常主要是返回的是XML或JSON文件类型可以对返回的数据格式选择自己擅长的一种方式来解析。
对于获取数据采用的是GET方法对于更新信息采用的是POST方法对于删除信息采用的是DELET方法。
对SDK熟悉了之后选择了Netbeans IDE 7.0作为开发环境SDK的版本为jdk1.6.0_25构架好开发环境后首先进行了OAuth验证返回request token后用新浪微博账号进行授权返回
access token在通过类解析获取到pin通过pin和
access token来获取到当前账号的信息表示登陆已经成功。
登陆成功后表面可以通过此方法获取到用户的其他信息并且可以对SDK中的方法进行测试了。
先后测试了public_timeLine获取到最新更新的用户微博默认是返回20条信息接着测试了favorites_timeLine用户所关注的微博信息和friends_timeLine用户首页的微博信息。
测试完三种类型的微博列表后至此已经可以得出一个结论可以根据类似的方法获取到其他的微博列表并且可以调整SDK中的方法。
例如可以增加方法ListltStatusgt statuses weibo.getFriendsTimelineint count通过传递count值来设定返回的微博数缺省值为20最大的值为200。
至此可行性研究已经结束测试的结果表明可以进行客户端应用的相关开发。
3.2 需求分析 第3章 系统的分析 13 可行性研究完成后接下来经行的则是需求分析。
对于一个桌面客户端针对的是广大的用户首先要从用户的角度出发思考哪些是用户所需要的内容哪些是用户最关心的内容哪些是最吸引用户的内容等。
对于客户端的功能。
新浪微博首页URL: http://weibo.com/首先以web页面所提到的功能为基础在实现了web页面的部分功能或者全部功能后后续版本再进行插件的开发扩展更多的微博应用充分利用微博所提供的用户关心网络满足用户的需求探索更多的有价值的插件。
新浪微博客户端JAVA版主要实现了下面的功能 1. 用户OAuth登陆验证 2. 用户界面UI的设计微博icon的设计 2. 获取用户的信息并在首页上显示 3. 用户首页微博列表 4. 随机用户微博列表 5. 关注用户微博列表 6. 我列表 7. 用户收到的评论列表 8. 用户粉丝列表以及用户最新的一条微博信息 9. 用户所有微博列表 10. 页面翻页功能默认返回每页20条微博信息 11. 登陆未读消息提醒提示音设置 12. 用户登陆后即时消息提醒 13. 搜索新用户并且可以加关注 14. 可以取消关注过的某个用户 15. 用户个人设置包括个人信息修改、用户隐私设置和消息提示音开关这三个方面的内容 16. 发文字微博发图片微博发文字加图片的微博信息 14 17. 对获取到的所有用户的微博消息的评论数、转发数的显示。
18. 刷新首页数据 19. 关于/帮助主要介绍了应用的一些功能和使用方法。
3.3 形式化说明技术 3.3.1 形式化图表流程图说明 下图主要介绍了应用进行大体的流程图 SinaMain.java 功能程序的入口 SinaLog.java启动 功能显示登陆框 新用户第一次登陆 是否授权Y/N 选择N 退出系统 选择Y SinaLoading.Java 启动线程1启动进度条显示 整个过程中.
上一篇:
【精品推荐】IA_32系统中PCI地址空间的配置
下一篇:
著作权法定许可制度的探讨