大家是否玩过校内网里的"好友买卖","极速飙车","抢床位"的游戏呢? 这就是校内应用。

那么我们如何来开发一个这样的应用呢?

研究了几天,我也写了个小应用 🙂

幸福彩票 地址:http://apps.xiaonei.com/happylottery/

大体上了解了他的原理。

我们来看一下他的原理。

首先我们必须要有自己的空间,我们开发的程序放在自己的空间上,然后把地址告诉校内网,校内网来抓取我们网页的源代码放到校内网页面里 的里,所以我们的网页里都不能包含及以外的像等标 签.
由于是通过抓取我们页面的源代码,所以不管你用什么程序语言都能写校内应用。

那么关键的问题是,我们的程序如何与校内网里的用户数据结合起来。

校内网提供了两种方法.
1.xnml.
xnml 就是校内网自己定义的标签。各标签的用法见http://dev.xiaonei.com/wiki/XNML 。
我们在我们自己服务器上的一个动态页里使用xnml标签,校内网来抓取我们这个页面的源代码,然后再处理这些标签后显示给用户。

举个例子。
标签:Xn:name
功能描述:用以显示指定用户的姓名,同时还可以生成指向他/她个人主页的链接。

属性:
uid 要显示用户名的用户的ID;在画布(canvas)上可以使用"loggedinuser"(不包括括号)来表示当前登录的用户;在个人主页(profile)上,可以使用"profileowner"(不包括引号)这个值来表示这个主页的主人。
linked(bool类型) 生成指向该用户个人主页的链接(默认值为 true)。
shownetwork(bool类型) 显示该用户当前所在的网络(默认值为false)。
---------------------------------------------------

我们在我们一个网页里 比如index.aspx 里写上

校内网来抓取index.aspx源代码后会解析成:
用户姓名(所在网络)
校内在请求我们的index.aspx时会把当前登陆的用户UserID "post"给index.aspx,所以我们只须在 index.aspx 里写上 " linked="true" shownetwork="true" /> 就会显示当前登陆用户的姓名。

再通过使用其它标签,就可以开发一个校内应用了。
但因为这种方法没办法获取用户的资料等数据,表现方式太过于局限,只能按校内定义的形式表现,开发者没法自由显示用户的数据,所以校内网又提供了第2种方法:API。

2.API.

通过校内API,可以获得校内网的用户资料、好友关系等开放的数据,保存到我们自己的数据库。那么我们就不受校内网的控制了,想怎么显示就怎么显示,呵呵。

校内的API函数: http://dev.xiaonei.com/wiki/API

校内官方描述:
通过这些接口(API),你可以完成你的应用程序获得校内网的用户资料、好友关系等几乎所有可开放的数据。
校 内网开放平台API是采用REST基础的接口规范。所有的校内网(http://xiaonei.com) 开放平台API都是通过HTTP POST向XN API REST Server(http://api.xiaonei.com/restserver.do) 发送请求来实现的。几乎所有的计算机语言都可以通过HTTP协议同REST服务器通信。

简单地说就是我们的程序通过请求校内指定的网址(就是:http://api.xiaonei.com/restserver.do),校内网返回给我们一段xml数据,这里面包含了我们所想要的数据,然后我们分析XML数据,把数据提取出来。

来看个例子:

函数:Users.getInfo
描述:得到用户信息,当对方设置了隐私权限,只能返回用户的姓名(name)、性别(sex)、是否为星级用户(star)、头像(headurl)等数据。

参数:
api_key(string类型) 登记应用时分配到的api_key.
method(string类型) users.getInfo
call_id(float类型) 请求队列号
sig(string类型) 用于验证的数字签名,后续会给出具体的策略
v(string类型) API的版本号,请设置成 1.0.
session_key(string类型) 登录用户的session key. 用于验证是否为当前用户发出的请求,如果出现Session Key过期的情况请参考关于session_key过期
uids(string类型) 需要查询的用户的id。
fields(string类型) 返回的字段列表,可以指定返回那些字段,用逗号分隔。如:name,sex,hometown_location。
format(string类型) Response的格式。请指定为XML(缺省值)

以下是c#代码:

string session_key = Request["xn_sig_session_key"];
string url ="http://api.xiaonei.com/restserver.do?api_key=校内分配给你的api_key& method=users.getInfo&call_id=&sig&v=1.0& session_key="+session_key+"&uids=用户ID&fields=name,sex& format=XML";
HttpWebRequest webRequest=(HttpWebRequest)WebRequest.Create(url);
WebResponse webResponse=webRequest.GetResponse();
string xmlString;
using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
{
xmlString = this.RawResponse = reader.ReadToEnd();
}

------------------------

获取到的xmlString值为:




用户ID
用户姓名
1

我们再分析这个XML 把姓名 性别取出来保存到我们自己的数据库里。如果要获得用户的更多信息可以指定fields参数,比如birthday生日,hometown_location家乡,等等.

OK,就这么简单,接下来的事情,就是充分发挥你的想象,写一个好玩的校内应用!

开发校内应用的流程参见下面网址:
http://dev.xiaonei.com/mediawiki/index.php?title=%E5%BC%80%E5%8F%91%E6%A0%A1%E5%86%85%E5%BA%94%E7%94%A8%E7%9A%84%E6%B5%81%E7%A8%8B&oldid=2618