使用嘀咕更新校内网状态

4,473 Comments

校内网虽然也随大流在去年推出了开放平台,但实际上其开放程度还远远不够。从一开始的“霸王条款”到目前令人诟病的开发者文档,可以看出,这其实已经不是心态问题而是态度问题了。不够开放或许是国内大多数互联网应用的通病,这当然还有更深层次的原因,比如出于商业策略方面的考虑。或许大多数互联网从业者认为,开放就意味着资源的流失,这可能是事实,但问题总有两面性,“流失资源”未必就会导致价值损耗。平台化是个例子,越是开放的平台,就越能吸引用户和第三方依赖者,因为开放往往意味着灵活,这是吸引用户的一个因素。同时,被平台“流失的资源”所吸引的第三方依赖者的加入,使平台的功能外延得到不断扩大,这是吸引用户的另一个因素,因此,平台表面上虽然流失了资源,但用户的增长以及第三方应用的依赖,却是平台价值提升的源泉。而第三方依赖者也因此而获得了价值,实现了和平台之间的双赢。当然这只是一个例子,实际情况或许会复杂得多。但不管怎样,未来的互联网必定是全开放的,这是趋势所在。

校内网的开放性确实非常有限,比如你无法像facebook一样,通过第三方应用来更新用户的状态(Status),而用户状态和目前流行的微博客形式是一样的,对于习惯于使用微博客来碎碎念的用户来说,如果能通过微博客来更新用户状态则更为方便。

据说嘀咕的插件嘀神很快会推出更新校内网状态的功能,在此之前,可以自己动手实现一下。(update[090408]: 嘀神今天已经推出更新校内网状态的功能了,赞一下)

虽然校内网没有提供更新用户状态的接口,但问题并不大,因为一个互联网应用无法轻易区分使用它的究竟是人类还是机器人,这给自动化操作带来契机(当然,办法肯定是有的,万恶的验证码就是因此而诞生的。不过据闻即便是强悍的captcha,也会有被干掉的一天。Update[090412]:看看 PWNtcha 这个项目),使用代码模拟用户操作则可实现用户状态的自动更新,虽然这因为校内网没有开放相关接口而稍微增加了些工作量。

那么实现过程就相当明了了,首先获取微博客的更新,然后模拟校内网用户操作,更新用户状态。

以嘀咕为例,通过其API获取嘀咕更新。这里有个小插曲,嘀咕API中可以使用一个参数来获取指定日期以后的所有嘀咕,但在测试中,发现该参数实际上并没有起作用,经小甲师兄确认为bug,这里批评一下嘀咕同学,这个bug不应该啊。获取完嘀咕后,判断哪些是需要更新的(因为API没有完全起作用,获取了全部嘀咕),然后稍微格式化一下(比如去掉html标签,加上相关链接等),接着就可以使用这些嘀咕来更新校内网用户状态了。当然,这个过程得使用轮询的方法(although polling sucks!),因此,计划任务是必不可少的。可惜目前很多虚拟主机都不提供cron服务,而我一般使用实验室的机器来完成这项工作,尽管不太方便。这里推荐没有cron服务的虚拟主机用户使用基于web的cron服务,google一下“free cron”即可。

至此,就已经实现了使用嘀咕来更新校内网的用户状态了,效果如下:
naruto

不过,嘀咕的url有点长,拖着条长尾巴有碍观瞻。细心的用户可能会发现,嘀神或打嘀在同步嘀咕时,使用的链接是短url形式的,如 http://digu.com/u/43936,而嘀咕API返回的数据当中并没有包含短url中的id信息,因此这肯定是个内部的接口。一些嘀咕插件使用到了内部接口,比如刚才提到的短url接口,还有手机上传照片的接口等,这些接口并没有对外公开,希望嘀咕真能如其所言,做到真正的开放,吸引更多真正的第三方开发者。

既然无法获得短url的接口,可以自己弄一个,凑合着用吧。这是缩短了网址之后的效果,围观起来是不是爽多了呢:-D
naruto

SEO Powered by Platinum SEO from Techblissonline