新浪微博API学习使用笔记(2)
2012-06-22 22:43
225 查看
本来还在想该写个啥例子来实际用一用新浪的api,结果实验室的考勤机就火了,8号那天盯着微博盯了一个下午,眼看着那条微博的转发量从开始的一点一点增长,到后面的快速增长。于是就想写个东西来分析一下一条微博是怎么火起来的。
因为我擅长写的是B/S的工程,所以先确定了这个分析工具是一个B/S架构的,然后来想想都应该有哪些功能点。
首先想到的就是粉丝增长的情况,展现可以用折线图,横轴是时间,纵轴是粉丝数。但是去新浪找了一圈也没有找到可以实现这功能的api,新浪提供的功能最近的api是friendships/followers(获取用户的粉丝列表),但是返回值里并没有成为粉丝的时间这一项。我现在能想象到的数据库表的设计大概是用户一张表,然后这张表里有一列follower(粉丝),里面的值是用户的id,这样的话确实没有地方存成为粉丝的时间这一项(不知道实际是不是这样的)。所以这项功能暂时无法实现。
其次想到的是粉丝的分布情况,展现可以用柱形图,横轴是省份,纵轴是粉丝数,新浪提供的api(friendships/followers:获取用户的粉丝列表)可以获取粉丝所在的省份(.getProvince(),返回的是数字),然后再根据api(common/get
province:获取省份列表)可以得到数字对应的省份名称,于是在前台获取要查找的微博名称,然后使用ext来作图,效果如下:
(上图统计时间是2012-3-12晚9点20,粉丝总数为4770)
开发笔记:
1.认证相关:用的是OAuth方式认证,有一个登陆页面login.jsp和一个回调页面index.jsp,在login.jsp中打开新浪的认证页面,认证成功后跳到回调页面index.jsp(要在应用申请的地方和工程中同时配置好回调页面,见上一篇博文),此时在index.jsp的地址栏里有code值(下一步要用到),用request.getParameter("code")获取这个值,然后执行oauth.getAccessTokenByCode(code).getAccessToken()获取最重要的accessToken,有了这个值才算是认证成功,后面调用api基本都要用到这个值,所以把它存在session里(session.setAttribute("accessToken",accessToken))。至此,认证成功。但是出现一个问题就是当刷新index.jsp时,会报错“error:invalid_grant
error_code:21325/oauth2/access_token”,所以更改一下,在index.jsp的一开始先判断session.getAttribute("accessToken")是否有值,如果没有则进行认证,如果有就不操作。这样改了之后还是报错,报的是空指针的错,原来是因为当用户第一次登陆进来的时候session里面根本没有accessToken这一项,解决方法就是去login.jsp里加一句session.setAttribute("accessToken","")。
2.friendships/followers的参数是screen_name(用户昵称),count(单页返回的记录条数,默认为50,最大值是200),cursor(返回结果的游标,默认为0),也就是说执行一次最多只能返回200条记录,所以需要多次执行。每次执行完毕都可以根据users.getNextCursor()来获取此时游标所在的位置,获取这个值,然后在下次执行的时候作为参数cursor的值。我使用的是do-while的方法,循环的条件是users.getNextCursor()不为0(因为当最后一次执行完毕后,users.getNextCursor()=0)。
3.存储省份人数的方式:用一个大小为100的数组a来存储省份人数,初始值都为0,省份编码即数组编号(比如北京的省份编码是11,则当粉丝的省份是11时,a[11]++)。
4.按人数从大到小排序:设立两个参数(int biggest=0和int p=-1)遍历一次数组a,biggest用来存找到的最大值,p用来存相应的省份代码。用do-while循环,循环的条件是p!=-1,时间复杂度是100*n(人数不为0的省份个数)。
5.将省份编码转换为对应省份的方式:common/get province可以获取省份列表,这个api的参数是country(国家代码),我一开始用的是086,结果查出来结果都是空,然后根据另一个接口common/get_country(获取国家列表)才发现中国的代码应该是001(呃...)。在新浪提供的例子里没有找到使用获取省份列表接口的,于是自己模仿着写了一个,返回值是JSONArray的格式,然后用json.getString(index)获取第index组,再对这个得到的String(例如:{"001011","北京"})进行处理,获取省份编号对应的省份名称。为了减少接口调用的次数,所以把这个功能分成了两个函数,一个是调用接口,返回json,另一个函数是根据省份编码获取省份名称,参数是(json,省份编码),返回值是省份名称。
存在的问题:
1.换一个用户昵称再点查询,回在原先的图下面再生成一张图,最好能使原图消失,然后在这个位置重新生成新的图,这应该是前台代码的问题,ext还要再多熟悉熟悉。
2.friendships/followers最多返回5000条记录,所以要是粉丝数超过5000的就只能分析最新的5000个粉丝的分布了。(马上就要破5千啦,啊啊啊)
3.应该在图上或者网页上显示粉丝总数
4.现在速度很慢,粉丝数4770的这一条用了20多秒才出图。
因为我擅长写的是B/S的工程,所以先确定了这个分析工具是一个B/S架构的,然后来想想都应该有哪些功能点。
首先想到的就是粉丝增长的情况,展现可以用折线图,横轴是时间,纵轴是粉丝数。但是去新浪找了一圈也没有找到可以实现这功能的api,新浪提供的功能最近的api是friendships/followers(获取用户的粉丝列表),但是返回值里并没有成为粉丝的时间这一项。我现在能想象到的数据库表的设计大概是用户一张表,然后这张表里有一列follower(粉丝),里面的值是用户的id,这样的话确实没有地方存成为粉丝的时间这一项(不知道实际是不是这样的)。所以这项功能暂时无法实现。
其次想到的是粉丝的分布情况,展现可以用柱形图,横轴是省份,纵轴是粉丝数,新浪提供的api(friendships/followers:获取用户的粉丝列表)可以获取粉丝所在的省份(.getProvince(),返回的是数字),然后再根据api(common/get
province:获取省份列表)可以得到数字对应的省份名称,于是在前台获取要查找的微博名称,然后使用ext来作图,效果如下:
(上图统计时间是2012-3-12晚9点20,粉丝总数为4770)
开发笔记:
1.认证相关:用的是OAuth方式认证,有一个登陆页面login.jsp和一个回调页面index.jsp,在login.jsp中打开新浪的认证页面,认证成功后跳到回调页面index.jsp(要在应用申请的地方和工程中同时配置好回调页面,见上一篇博文),此时在index.jsp的地址栏里有code值(下一步要用到),用request.getParameter("code")获取这个值,然后执行oauth.getAccessTokenByCode(code).getAccessToken()获取最重要的accessToken,有了这个值才算是认证成功,后面调用api基本都要用到这个值,所以把它存在session里(session.setAttribute("accessToken",accessToken))。至此,认证成功。但是出现一个问题就是当刷新index.jsp时,会报错“error:invalid_grant
error_code:21325/oauth2/access_token”,所以更改一下,在index.jsp的一开始先判断session.getAttribute("accessToken")是否有值,如果没有则进行认证,如果有就不操作。这样改了之后还是报错,报的是空指针的错,原来是因为当用户第一次登陆进来的时候session里面根本没有accessToken这一项,解决方法就是去login.jsp里加一句session.setAttribute("accessToken","")。
2.friendships/followers的参数是screen_name(用户昵称),count(单页返回的记录条数,默认为50,最大值是200),cursor(返回结果的游标,默认为0),也就是说执行一次最多只能返回200条记录,所以需要多次执行。每次执行完毕都可以根据users.getNextCursor()来获取此时游标所在的位置,获取这个值,然后在下次执行的时候作为参数cursor的值。我使用的是do-while的方法,循环的条件是users.getNextCursor()不为0(因为当最后一次执行完毕后,users.getNextCursor()=0)。
3.存储省份人数的方式:用一个大小为100的数组a来存储省份人数,初始值都为0,省份编码即数组编号(比如北京的省份编码是11,则当粉丝的省份是11时,a[11]++)。
4.按人数从大到小排序:设立两个参数(int biggest=0和int p=-1)遍历一次数组a,biggest用来存找到的最大值,p用来存相应的省份代码。用do-while循环,循环的条件是p!=-1,时间复杂度是100*n(人数不为0的省份个数)。
5.将省份编码转换为对应省份的方式:common/get province可以获取省份列表,这个api的参数是country(国家代码),我一开始用的是086,结果查出来结果都是空,然后根据另一个接口common/get_country(获取国家列表)才发现中国的代码应该是001(呃...)。在新浪提供的例子里没有找到使用获取省份列表接口的,于是自己模仿着写了一个,返回值是JSONArray的格式,然后用json.getString(index)获取第index组,再对这个得到的String(例如:{"001011","北京"})进行处理,获取省份编号对应的省份名称。为了减少接口调用的次数,所以把这个功能分成了两个函数,一个是调用接口,返回json,另一个函数是根据省份编码获取省份名称,参数是(json,省份编码),返回值是省份名称。
存在的问题:
1.换一个用户昵称再点查询,回在原先的图下面再生成一张图,最好能使原图消失,然后在这个位置重新生成新的图,这应该是前台代码的问题,ext还要再多熟悉熟悉。
2.friendships/followers最多返回5000条记录,所以要是粉丝数超过5000的就只能分析最新的5000个粉丝的分布了。(马上就要破5千啦,啊啊啊)
3.应该在图上或者网页上显示粉丝总数
4.现在速度很慢,粉丝数4770的这一条用了20多秒才出图。
相关文章推荐
- 新浪微博API学习使用笔记(1)
- 新浪微博API学习使用笔记(2)
- 新浪微博API学习使用笔记(1)
- APIDemo学习笔记——Android上几种简单的Animation使用方法(一)
- entlib 5.0学习笔记 caching application block 3 详细配置及api使用
- osworkflow学习笔记3-使用OSWorkflow的API
- ArcGIS API for JavaScript 4.2学习笔记[24] 【IdentifyTask类】的使用(结合IdentifyParameters类)(第七章完结)
- ArcGIS API for JavaScript 4.2学习笔记[28] 可视域分析【使用Geoprocessor类】
- 【学习笔记】day2数据存储和界面展现第一天 08_使用api获取内部存储空间路径09_files文件夹与cache文件夹
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
- Hadoop学习笔记:HDFS的java API使用
- Android(OPhone) 学习笔记 - Home API 的使用
- APIDemo学习笔记——Android上几种简单的Animation使用方法(二)
- Android(java)学习笔记193:利用谷歌API对数据库增删改查(推荐使用)
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
- 快速学习和使用新浪微博API开发WEB应用
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
- 黑马程序员—17—java基础:有关API的使用学习笔记和心得体会
- ArcGIS API for JavaScript 4.2学习笔记[20] 使用缓冲区结合Query对象进行地震点查询【重温异步操作思想】
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用