使用新浪微博开放平台api同步微博内容至自己网站(写个一条怎么火起来?一条B/S架构分析)

优采云 发布时间: 2021-12-25 04:07

  使用新浪微博开放平台api同步微博内容至自己网站(写个一条怎么火起来?一条B/S架构分析)

  还在想着写个例子来实际使用新浪的api。结果,实验室的考勤机着火了。8日下午盯着微博,看到那条微博的转发量从一开始是一点点增长,然后是后面快速增长。所以我想写点什么来分析微博是如何流行起来的。

  因为擅长写B/S项目,所以先确定这个分析工具是B/S结构,然后考虑应该提供什么功能。

  首先想到的是粉丝的增长。折线图可用于显示显示。横轴是时间,纵轴是风扇数量。但是我去新浪找了一个可以实现这个功能的api。新浪提供的最新api是friends/followers(获取用户的粉丝列表),但是返回值不包括成为粉丝的时间。我现在能想象的数据库表的设计大概就是一个用户的表,然后这个表里面有一列follower,里面的值就是用户的id。在这种情况下,真的没有地方可以存放成为粉丝的时间。(我不知道实际情况是否如此)。因此,此功能暂时不可用。

  想到的第二件事是粉丝的分布。条形图可用于显示。横轴为省,纵轴为风扇数。新浪提供的api(friendships/followers:获取用户的粉丝列表)可以获取粉丝所在的省份(.getProvince(),返回一个数字),然后根据api(common/get省份:获取列表省),就可以得到号码对应的省的名称,所以在前台得到你要找的微博的名称,然后用ext来绘制地图。效果如下:

  

  (上图中统计时间为2012-3-12 9:20 PM,总粉丝数4770)

  开发笔记:

  1. 认证相关:使用OAuth认证。有一个登录页面 login.jsp 和一个回调页面 index.jsp。在login.jsp中打开新浪的认证页面,认证成功后跳转到回调页面索引。jsp(需要同时在应用应用场所和项目中配置回调页面,见上一篇博文)。这时候index.jsp的地址栏中有一个code值(下一步使用),使用request.getParameter("code")获取这个值,然后执行oauth.getAccessTokenByCode(code).getAccessToken () 获取最重要的accessToken。有了这个值,认证就被认为是成功的。这个值基本用于后续调用api,所以存储在session中(session.setAttribute("accessToken", 访问令牌))。至此,认证成功。但是有一个问题,刷新index.jsp的时候,会报错“error:invalid_grant error_code:21325/oauth2/access_token”,所以改一下,开头先判断session.getAttribute("accessToken")是否可用index.jsp 的值,如果没有认证,如果没有操作。这个改动后报错,报错是空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。错误是一个空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。错误是一个空指针。原来,当用户第一次登录时,会话中没有accessToken。解决的办法是加一句session.setAttribute(" to login.jsp.accessToken","")。

  2.friendships/followers 的参数是screen_name(用户昵称)、count(单页返回的记录条数,默认50条,最大20条0)、cursor(那个返回结果,默认为0),表示一次只能返回200条记录,所以需要执行多次,每次执行后可以得到此时光标的位置根据users.getNextCursor(),得到这个值,然后作为下一次执行的参数cursor的值,我用的是do-while方法,循环的条件是users.getNextCursor( ) 不为 0(因为当最后一次执行完成时,users.getNextCursor()=0)。

  3. 如何存储一个省的人数:用一个大小为100的数组a来存储一个省的人数,初始值为0,省代码为数组编号(例如,北京的省代码是11,粉丝的省是11点,a[11]++)。

  4. 按人数从大到小排序:设置两个参数(int big=0 和 int p=-1) 遍历数组一次,最大的用来存储最大值找到了,p用来存放对应的省份代码,使用do-while循环,循环条件p!=-1,时间复杂度为100*n(人数不为0的省份) .

  5. 省码转对应省的方式:common/get Province可以得到省列表,这个api的参数是country(国家码),我一开始用的是086,结果是都是空的。,然后再根据另一个接口common/get_country(获取国家列表)才发现中国的代码应该是001(呃...)。在新浪提供的例子中,我没有找到获取省份列表的接口,所以我模仿写了一个,返回值是JSONArray的格式,然后使用json.getString(index)获取索引组,然后字符串(例如:{"001011","Beijing"})处理并获取与省号对应的省名。为了减少接口调用次数,

  存在的问题:

  1. 更改用户昵称点击查询,然后在原图下方生成一张图片。最好让原图消失,然后在这个位置重新生成新图。这个应该是前台代码有问题。ext应该比较熟悉和熟悉。

  2.friendships/followers 最多返回5000条记录,所以如果follower超过5000,只能分析最近5000follower的分布。(马上就要破五千了啊啊啊)

  3. 粉丝总数应显示在图片或网页上

  4.现在速度很慢。4770粉丝号用了20多秒才放出图片。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线