django 集成个推_Django网站添加WebIM
這篇文章發(fā)表于2011年,已經(jīng)過期。建議使用融云、個(gè)推等方案。
大多數(shù)站長的都遇到過這種情況:當(dāng)你依靠自己網(wǎng)站的內(nèi)容,辛辛苦苦的吸引了一群用戶,他們漸漸的形成一個(gè)志同道合的小圈子,然后,他們注冊了一個(gè)QQ群,從此以后你的網(wǎng)站不再有人光顧……為了避免這種悲劇不斷重演,WebIM工具應(yīng)運(yùn)而生。用戶訪問這個(gè)網(wǎng)站時(shí),能看到其他正在瀏覽這個(gè)網(wǎng)站的用戶,彼此可以即時(shí)聊天。比如Ntalker,它可以添加好友,有群組功能,即時(shí)消息,但只有asp和php的SDK,于是我試著把它搬到了Django網(wǎng)站上,可以訪問onlinegalgame.com查看效果。
Register
首先申請(qǐng)一個(gè)Ntalker的帳號(hào),填寫郵箱、用戶名、網(wǎng)站程序等,如果你是用的是DZ之類的國內(nèi)主流PHP論壇程序,它會(huì)提供現(xiàn)成的安裝包。可惜我們用的是Django,沒有現(xiàn)成的可用,所以網(wǎng)站程序要選擇其他,然后下載SDK。話說這個(gè)SDK實(shí)在簡陋得可以,只有幾個(gè)txt文件。注冊完成后進(jìn)入管理頁面,可以定制樣式。
Install
在頁面標(biāo)簽之后添加以下JS代碼(放在body之前很詭異的會(huì)產(chǎn)生兩個(gè)標(biāo)簽)
im_connectIM("onlinegalgame_com", "{{request.user.id}}", "{{request.user.username}}", "{{request.session.session_key}}", '');
onlinegalgame_com:網(wǎng)站的siteid,通常是你的域名生成的,注冊以后下載SDK,可以在sitekey.txt文件中找到;
user.id和user.name:獲得登錄的用戶名,如果沒有用戶名(未登錄),則為空,空用戶名在Ntalker中會(huì)顯示用戶名name;
session_key:不為空即可,但為了安全性最好保證唯一,這里直接用django生成的session_key。
引入之后,頁面下方已經(jīng)可以看到WebIM的工具欄了。在Ntalker網(wǎng)站能修改樣式,icon,添加圖標(biāo)等。但點(diǎn)擊窗口會(huì)提示登錄失敗,還需要配置API。
API
在自己的網(wǎng)站上定義一個(gè)API(比如我定義的是http://onlinegalgame.com/imxml),Ntalker會(huì)對(duì)這個(gè)地址發(fā)起請(qǐng)求,通常是以query參數(shù)的形式(比如登錄會(huì)通過http://onlinegalgame.com/imxml?query=login來請(qǐng)求),然后解析返回的xml文件,做出相應(yīng)的行為。還以下的做法不夠規(guī)范——沒辦法,這東西就沒給一個(gè)規(guī)范的SDK——我省略了配置文件,直接利用API來處理所有的請(qǐng)求。
首先編輯urls.py文件,添加API對(duì)應(yīng)的URL
urlpatterns = patterns('',
#……
url(r'^imxml$', 'onlinegalgame.views.imxml', name='imxml'),
#……
這樣當(dāng)Ntalker服務(wù)器對(duì)API發(fā)起請(qǐng)求的時(shí)候,就會(huì)由根目錄下views.py文件的imxml函數(shù)來處理。編輯views.py文件:
from django.http import HttpResponse
def imxml(request):
#幾個(gè)config參數(shù),這個(gè)例子中沒什么用,可以省略
im_enable = True
im_float = True
im_siteid = 'onlinegalgame_com'
#處理query參數(shù)的行為
querytype = request.GET.get('query')
query = {
'siteprofile' : 'custom'+
'utf-8'+
'Onlinegalgame',
'login' : '3.0.0'+
'true',
'addbuddy' : 'true'+
'accepted'
}
res = '%s' % 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文件了。只要定義了對(duì)login就行了處理,就可以登錄了,如果登錄失敗,登錄Ntalker的后臺(tái),確定這里的狀態(tài)是已開通,否則就像我一樣,苦等他們的技術(shù)客服上線然后聯(lián)系客服讓他幫忙開通吧…
SDK中規(guī)定有6個(gè)必須的API,這里只寫了3個(gè),所以只能實(shí)現(xiàn)登錄、添加好友之類的行為。
Afterword
其實(shí)騰訊收購康盛之后,我原以為他們的目標(biāo)是在康盛的DZ、UCHOME之上,推出WebIM的,但目前除了添加了QQ用戶登錄的接口,QQ消息推送以外,沒看到其他新動(dòng)作。Ntalker的缺陷很多,但也是目前我能找到的唯一一個(gè)解決方案,希望能有更多類似的WebIM系統(tǒng),這對(duì)于不愿歸順騰訊的用戶來說終歸是件好事。當(dāng)然,各位如果知道同類型的WebIM(即使聊天,好友/群功能)希望能在評(píng)論中告知。
總結(jié)
以上是生活随笔為你收集整理的django 集成个推_Django网站添加WebIM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pwm一个时间单位_详解STM32的PW
- 下一篇: dfmea文件_DFMEA和PFMEA的