Python Tech

Django网站添加WebIM

这篇文章发表于2011年,已经过期。建议使用融云、个推等方案。

大多数站长的都遇到过这种情况:当你依靠自己网站的内容,辛辛苦苦的吸引了一群用户,他们渐渐的形成一个志同道合的小圈子,然后,他们注册了一个QQ群,从此以后你的网站不再有人光顾……为了避免这种悲剧不断重演,WebIM工具应运而生。用户访问这个网站时,能看到其他正在浏览这个网站的用户,彼此可以即时聊天。比如Ntalker,它可以添加好友,有群组功能,即时消息,但只有asp和php的SDK,于是我试着把它搬到了Django网站上,可以访问onlinegalgame.com查看效果。

Register

首先申请一个Ntalker的帐号,填写邮箱、用户名、网站程序等,如果你是用的是DZ之类的国内主流PHP论坛程序,它会提供现成的安装包。可惜我们用的是Django,没有现成的可用,所以网站程序要选择其他,然后下载SDK。话说这个SDK实在简陋得可以,只有几个txt文件。注册完成后进入管理页面,可以定制样式。

Install

在页面标签之后添加以下JS代码(放在body之前很诡异的会产生两个标签)


<script type="text/javascript" src="http://download.ntalker.com/res/imfunction_utf8.js" charset="utf-8"></script>
<script language="javascript" type="text/javascript">
    im_connectIM("onlinegalgame_com", "{{request.user.id}}", "{{request.user.username}}", "{{request.session.session_key}}", '');
</script>
  • onlinegalgame_com:网站的siteid,通常是你的域名生成的,注册以后下载SDK,可以在sitekey.txt文件中找到;
  • user.id和user.name:获得登录的用户名,如果没有用户名(未登录),则为空,空用户名在Ntalker中会显示用户名name;
  • session_key:不为空即可,但为了安全性最好保证唯一,这里直接用django生成的session_key。

引入之后,页面下方已经可以看到WebIM的工具栏了。在Ntalker网站能修改样式,icon,添加图标等。但点击窗口会提示登录失败,还需要配置API。

API

在自己的网站上定义一个API(比如我定义的是http://onlinegalgame.com/imxml),Ntalker会对这个地址发起请求,通常是以query参数的形式(比如登录会通过http://onlinegalgame.com/imxml?query=login来请求),然后解析返回的xml文件,做出相应的行为。还以下的做法不够规范——没办法,这东西就没给一个规范的SDK——我省略了配置文件,直接利用API来处理所有的请求。

首先编辑urls.py文件,添加API对应的URL


urlpatterns = patterns('',
#……
    url(r'^imxml$', 'onlinegalgame.views.imxml', name='imxml'),
#……

这样当Ntalker服务器对API发起请求的时候,就会由根目录下views.py文件的imxml函数来处理。编辑views.py文件:


from django.http import HttpResponse

def imxml(request):
    #几个config参数,这个例子中没什么用,可以省略
    im_enable = True
    im_float = True
    im_siteid = 'onlinegalgame_com'

    #处理query参数的行为
    querytype = request.GET.get('query') 
    query = {
        'siteprofile' : '<software>custom</software>'+
                        '<language>utf-8</language>'+
                        '<sitename>Onlinegalgame</sitename>',
        'login' : '<version>3.0.0</version>'+
                  '<sessionvalide>true</sessionvalide>',
        'addbuddy' : '<userkeyvalide>true</userkeyvalide>'+
                     '<addbuddyresult>accepted</addbuddyresult>'
    }
    res = '<imxml encoding="utf-8">%s</imxml>' % query[querytype]
    if querytype == None:
        return HttpResponse('Invalid query paramter')
    else:
        return HttpResponse(res,mimetype='application/xml')#返回xml

访问 http://onlinegalgame.com/imxml?query=siteprofile 可以看到返回的xml文件了。只要定义了对login就行了处理,就可以登录了,如果登录失败,登录Ntalker的后台,确定这里的状态是已开通,否则就像我一样,苦等他们的技术客服上线然后联系客服让他帮忙开通吧…

SDK中规定有6个必须的API,这里只写了3个,所以只能实现登录、添加好友之类的行为。

Afterword

其实腾讯收购康盛之后,我原以为他们的目标是在康盛的DZ、UCHOME之上,推出WebIM的,但目前除了添加了QQ用户登录的接口,QQ消息推送以外,没看到其他新动作。Ntalker的缺陷很多,但也是目前我能找到的唯一一个解决方案,希望能有更多类似的WebIM系统,这对于不愿归顺腾讯的用户来说终归是件好事。当然,各位如果知道同类型的WebIM(即使聊天,好友/群功能)希望能在评论中告知。

0 0 投票数
文章评分
订阅评论
提醒
guest

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

2 评论
最新
最旧 最多投票
内联反馈
查看所有评论
Johnny
12 年 前

请问博主知道在wordpress下怎么实现Ntalker吗?